|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Симулятор цифровых схем Logisim
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Поскачивал и потестировал младшие версии с некоторым интервалом в номерах,
вобщем начиная с версии Logisim 2.3.0. - он ещё пытается работать, но зависает.
Интересно, что совсем уж бета версии обладают примерно той же функциональностью
в плане симуляции, но по размеру примерно на треть меньше...
Так если повыкидывать всякие хелпы, анализаторы и др., может Logisim и под
J2ME портанётся...
Алгоритм симуляции просто элементарный... так что даже странно, что автор лишил
нас многоканального логического анализатора... Или хотя бы двухканального
осциллоскопа...
_________________ iLavr
|
21 Aug 2012 14:13 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я немного "протрусил" интернет на вопрос, разбирался ли кто с внутренностями файла *.circ этого самого Logisim... Таких любителей не нашел, а то что пишут... собственно, это было понятно мне давно, при взгляде в сам файл *.circ - он текстовый... RS-TRIGGER.circ | | | | Code: <?xml version="1.0" encoding="UTF-8"?> <project version="1.0" source="2.2.0"> This file is intended to be loaded by Logisim (www.logisim.com). <lib name="0" desc="#Base"> <tool name="Text Tool"> <a name="text" val="" /> <a name="font" val="dialog plain 12" /> <a name="halign" val="center" /> <a name="valign" val="base" /> </tool> <tool name="Splitter"> <a name="facing" val="east" /> <a name="fanout" val="2" /> <a name="incoming" val="2" /> <a name="bit0" val="0" /> <a name="bit1" val="1" /> </tool> <tool name="Pin"> <a name="facing" val="east" /> <a name="output" val="false" /> <a name="width" val="1" /> <a name="tristate" val="true" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="west" /> <a name="labelfont" val="dialog plain 12" /> </tool> <tool name="Probe"> <a name="facing" val="east" /> <a name="label" val="" /> <a name="labelloc" val="west" /> <a name="labelfont" val="dialog plain 12" /> <a name="radix" val="2" /> </tool> <tool name="Clock"> <a name="facing" val="east" /> <a name="highDuration" val="1" /> <a name="lowDuration" val="1" /> <a name="label" val="" /> <a name="labelloc" val="west" /> <a name="labelfont" val="dialog plain 12" /> </tool> <tool name="Text"> <a name="text" val="" /> <a name="font" val="dialog plain 12" /> <a name="halign" val="center" /> <a name="valign" val="base" /> </tool> </lib> <lib name="1" desc="#Gates"> <tool name="Constant"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="value" val="0x1" /> </tool> <tool name="NOT Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="30" /> </tool> <tool name="Buffer"> <a name="facing" val="east" /> <a name="width" val="1" /> </tool> <tool name="AND Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="OR Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="NAND Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="NOR Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="2" /> </tool> <tool name="XOR Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="XNOR Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="Odd Parity"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="Even Parity"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool name="Controlled Buffer"> <a name="facing" val="east" /> <a name="width" val="1" /> </tool> <tool name="Controlled Inverter"> <a name="facing" val="east" /> <a name="width" val="1" /> </tool> </lib> <main name="main" /> <options> <a name="showgrid" val="false" /> <a name="preview" val="false" /> <a name="showghosts" val="true" /> <a name="showhalo" val="true" /> <a name="showhalo" val="true" /> <a name="zoom" val="1.0" /> <a name="simlimit" val="1000" /> <a name="simrand" val="0" /> <a name="radix" val="2" /> <a name="radix2" val="10signed" /> <a name="toolbarloc" val="north" /> </options> <mappings> <tool lib="0" name="Menu Tool" map="Button3" /> <tool lib="0" name="Menu Tool" map="Button2" /> <tool lib="0" name="Menu Tool" map="Ctrl Button1" /> </mappings> <toolbar> <tool lib="0" name="Poke Tool" /> <tool lib="0" name="Select Tool" /> <tool lib="0" name="Wiring Tool" /> <tool lib="0" name="Text Tool"> <a name="text" val="" /> <a name="font" val="dialog plain 12" /> <a name="halign" val="center" /> <a name="valign" val="base" /> </tool> <sep /> <tool lib="0" name="Pin"> <a name="facing" val="east" /> <a name="output" val="false" /> <a name="width" val="1" /> <a name="tristate" val="false" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="west" /> <a name="labelfont" val="dialog plain 12" /> </tool> <tool lib="0" name="Pin"> <a name="facing" val="west" /> <a name="output" val="true" /> <a name="width" val="1" /> <a name="tristate" val="true" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="east" /> <a name="labelfont" val="dialog plain 12" /> </tool> <tool lib="1" name="NOT Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="30" /> </tool> <tool lib="1" name="AND Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> <tool lib="1" name="OR Gate"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="5" /> </tool> </toolbar> <circuit name="main"> <wire from="(150,130)" to="(270,130)" /> <wire from="(270,170)" to="(270,200)" /> <wire from="(160,120)" to="(180,120)" /> <wire from="(160,120)" to="(160,170)" /> <wire from="(270,170)" to="(310,170)" /> <wire from="(110,220)" to="(180,220)" /> <wire from="(240,200)" to="(270,200)" /> <wire from="(150,130)" to="(150,180)" /> <wire from="(270,100)" to="(310,100)" /> <wire from="(270,100)" to="(270,130)" /> <wire from="(240,100)" to="(270,100)" /> <wire from="(150,180)" to="(180,180)" /> <wire from="(110,80)" to="(180,80)" /> <wire from="(160,170)" to="(270,170)" /> <comp lib="1" name="NOR Gate" loc="(240,200)"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="2" /> </comp> <comp lib="0" name="Pin" loc="(310,100)"> <a name="facing" val="west" /> <a name="output" val="true" /> <a name="width" val="1" /> <a name="tristate" val="true" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="east" /> <a name="labelfont" val="dialog plain 12" /> </comp> <comp lib="0" name="Pin" loc="(110,80)"> <a name="facing" val="east" /> <a name="output" val="false" /> <a name="width" val="1" /> <a name="tristate" val="false" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="west" /> <a name="labelfont" val="dialog plain 12" /> </comp> <comp lib="0" name="Pin" loc="(310,170)"> <a name="facing" val="west" /> <a name="output" val="true" /> <a name="width" val="1" /> <a name="tristate" val="true" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="east" /> <a name="labelfont" val="dialog plain 12" /> </comp> <comp lib="0" name="Pin" loc="(110,220)"> <a name="facing" val="east" /> <a name="output" val="false" /> <a name="width" val="1" /> <a name="tristate" val="false" /> <a name="pull" val="none" /> <a name="label" val="" /> <a name="labelloc" val="west" /> <a name="labelfont" val="dialog plain 12" /> </comp> <comp lib="1" name="NOR Gate" loc="(240,100)"> <a name="facing" val="east" /> <a name="width" val="1" /> <a name="size" val="50" /> <a name="inputs" val="2" /> </comp> </circuit> </project> | | | | |
...но довольно большой по размеру, поэтому спрятан под spoiler. Это файл, соответствующий следующей схеме: Элементы,помеченные как >0 - так последний, работающий у меня Logisim 2.2.0, изображает "ИЛИ-НЕ" (почему я с Logisim и не работаю из-за кучи похожих "косяков"). И для сравнения я здесь выложу похожую по числу элементов и связям схему из EWB: вместе с файлом её экспорта в SPICE-формат *.cir RS_trig_EWB Возможно, будет интересно сравнить эти два формата хранения схем, раз уж у нас такой разговор здесь возник...
_________________ iLavr
|
06 Dec 2017 14:42 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну и пока я прочесывал Интернет на повод формата файла *.circ попались мне мимоходом два проекта одного джентельмена, разработавшего свои модели процессоров под Logisim: An Example Hardwired CPUи Warren's Microcoded CPUВозможно, пользователям Logisim нашего форума проекты покажутся интересными...
_________________ iLavr
|
06 Dec 2017 14:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Если вкраце, то SPICE это "нетлист", который даёт список элементов (без привязки к координатам), у которых ногам приписываются номера цепей - если выход одного элемента подцеплен ко входу другого, то у них будет один и тот же номер - очевидно, что этот номер уникальным образом идентифицирует цепь (в общем случае это может быть не номер, а имя, например VCC и GND), а Logisim просто описывает все элементы схемы (включая отрезки проводов) с привязкой к координатной сетке: этот тэг описывает проект - он один на файл .circ это либы, их можно пропустить, также в файл .circ затолканы всякие настройки, например внешний вид меню (по мне так это вообще лишнее) непосредственно схемы находятся в тэгах circuit (и их как правило больше одого): далее вплоть до закрывающего тэга circuit могут идти: - тэги wire (прямой отрезок сигнального провода без указания его ширины, т.е. 1-проводные и многопроводные сигналы на уровне проводов описываются совершенно одинаково): from и to это координаты концов отрезка в плоской системе координат (0,0 это левый верхний угол) - очевидно, что при чтении .circ файла Logisim "в уме" подцепляет такие отрезки друг к другу, составляя цепь, и уже потом определяет сколькипроводные они (по тому к сколькипроводному выходу они подключены) - причём если отрезки идут "внахлёст", то считаются, что они не пересекаются, а если концами заканчиваются в одной точке, то пересекаются (а если там концами стыкуются больше двух таких отрезков, то логисим ставит там жирную точку) - тэги comp (компонент), внутри которого могут быть параметры, самый распостранённый из которых это name: где-то внутри логисима (в либах?) есть понятие какие параметры являются параметрами по умолчанию, и если компонент все параметры использует по умолчанию, то тэг comp вообще в одну строку записывается: без закрывающего тэга comp (по XML стандарту в этом случае перед последней закрывающей треугольной скобкой надо писать слэш) - этот пример я взял из своего проекта NEDONAND (возможно в старых версиях логисима понятие параметра по умолчанию отсутствовало) координата loc компонента как правило соответствует его первому выходу (это так, наблюдение) вот собственно и всё
|
06 Dec 2017 20:32 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да, это действительно так: без привязки к координатам... Когда втаскиваешь SPICE-файл *.cir через Import, тебе предлагают несколько вариантов автоматического размещения элементов на листе. Вот самый плохой - Fast : Поэтому, к примеру, в формате файлов Proteus уже есть скрытые привязки элементов к координатам: Маркер локального начала координат, относительно которого отсчитываются координаты выводов.
_________________ iLavr
|
07 Dec 2017 05:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Добавил ещё гейтов в свою рисовалку логисимовских схем (теперь исходник 759 строк): http://nedopc.org/nedopc/files/LOGIGRAF.ZIP (130KB) Если взять вот такую схемку например: На языке логисима она представляется так: TEST | | | | Code: <circuit name="main"> <a name="circuit" val="main"/> <a name="clabel" val=""/> <a name="clabelup" val="east"/> <a name="clabelfont" val="SansSerif plain 12"/> <wire from="(280,100)" to="(280,110)"/> <wire from="(160,50)" to="(170,50)"/> <wire from="(370,190)" to="(400,190)"/> <wire from="(280,100)" to="(300,100)"/> <wire from="(380,170)" to="(400,170)"/> <wire from="(280,110)" to="(280,170)"/> <wire from="(290,190)" to="(300,190)"/> <wire from="(380,50)" to="(380,100)"/> <wire from="(200,50)" to="(380,50)"/> <wire from="(280,170)" to="(300,170)"/> <wire from="(460,110)" to="(560,110)"/> <wire from="(380,100)" to="(380,170)"/> <wire from="(170,120)" to="(210,120)"/> <wire from="(160,50)" to="(160,100)"/> <wire from="(150,180)" to="(170,180)"/> <wire from="(260,110)" to="(280,110)"/> <wire from="(290,180)" to="(290,190)"/> <wire from="(370,120)" to="(370,190)"/> <wire from="(170,190)" to="(210,190)"/> <wire from="(150,100)" to="(160,100)"/> <wire from="(380,100)" to="(400,100)"/> <wire from="(580,100)" to="(600,100)"/> <wire from="(370,110)" to="(370,120)"/> <wire from="(170,120)" to="(170,140)"/> <wire from="(370,120)" to="(400,120)"/> <wire from="(170,180)" to="(170,190)"/> <wire from="(170,170)" to="(210,170)"/> <wire from="(150,140)" to="(170,140)"/> <wire from="(560,110)" to="(560,140)"/> <wire from="(290,120)" to="(300,120)"/> <wire from="(260,180)" to="(290,180)"/> <wire from="(380,50)" to="(580,50)"/> <wire from="(580,50)" to="(580,100)"/> <wire from="(290,120)" to="(290,180)"/> <wire from="(360,110)" to="(370,110)"/> <wire from="(170,140)" to="(170,170)"/> <wire from="(470,180)" to="(600,180)"/> <wire from="(360,180)" to="(400,180)"/> <wire from="(560,140)" to="(600,140)"/> <wire from="(160,100)" to="(210,100)"/> <comp lib="1" loc="(470,180)" name="XNOR Gate"/> <comp lib="1" loc="(460,110)" name="XOR Gate"/> <comp lib="0" loc="(150,180)" name="Pin"> <a name="tristate" val="false"/> </comp> <comp lib="1" loc="(260,110)" name="AND Gate"/> <comp lib="0" loc="(600,180)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> <a name="labelloc" val="east"/> </comp> <comp lib="0" loc="(600,140)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> <a name="labelloc" val="east"/> </comp> <comp lib="0" loc="(150,100)" name="Pin"> <a name="tristate" val="false"/> </comp> <comp lib="1" loc="(360,180)" name="NOR Gate"/> <comp lib="0" loc="(150,140)" name="Pin"> <a name="tristate" val="false"/> </comp> <comp lib="1" loc="(200,50)" name="NOT Gate"/> <comp lib="0" loc="(600,100)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> <a name="labelloc" val="east"/> </comp> <comp lib="1" loc="(260,180)" name="OR Gate"/> <comp lib="1" loc="(360,110)" name="NAND Gate"/> </circuit>
| | | | |
А моя досовская декодилка показывает её вот так: P.S. Хотя наверное блочки надо побольше сделать - они же могут до 5 входов иметь...
|
07 Dec 2017 20:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Сделал гейты побольше (всё равно ещё был запас - я им хвост дорисовываю в любом случае, т.к. оригинальные логисимовские гейты ещё "длиннее"): Вот так например сейчас выглядит кусок схемы NEDONAND: В частности тут можно видеть, почему инверторы у меня такие мелкие...
|
07 Dec 2017 21:43 |
|
|
FizikS
Maniac
Joined: 11 Oct 2018 00:52 Posts: 201 Location: г. Клинцы, Брянская обл.
|
Подниму тему из небытия. Выкладываю свои наработки (модельки микросхем ТТЛ серии) для этой программы (по просьбе). Думал, что потерял, но нашел с большим трудом. Пускай здесь будут. Сделано в программе Logisim_2.7.1
|
27 Feb 2023 08:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
спс!!!
|
27 Feb 2023 09:29 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
Пытаясь в Logisim перенести схему «РАДИО-86РК» почти 1:1, столкнулся не только с проблемой отсутствия моделей многих компонентов, но и со сложностью их изображения в УГО (пустышек). Короче говоря, схема вообще не работает, лишь графически выглядит нормально…Если такие ИМС, как К155ТМ2, К155ИР1, К155ИД7 и т.п. легко изобразить как УГО и даже начинку сделать работающую, то с БИС типа К580ВМ80, К580ВТ57, К580ВГ75 и т.п. даже нарисовать ровный УГО - уже проблема. Предлагаю Вам скрипт для генерации таких бутафорских элементов для экспорта в Logisim-библиотеку (вручную). Вот ссылка для запуска с примером описания для отображения ИМС ПДП ВТ57.
|
20 Oct 2023 04:39 |
|
|
Who is online |
Users browsing this forum: No registered users and 3 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|