nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 12 Dec 2017 06:23



Reply to topic  [ 22 posts ]  Go to page Previous  1, 2
Симулятор цифровых схем Logisim 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Во официально ВСЕ версии - говорят что и для старой джавы есть:
http://sourceforge.net/projects/circuit/files/

Поскачивал и потестировал младшие версии с некоторым интервалом в номерах,
вобщем начиная с версии Logisim 2.3.0. - он ещё пытается работать, но зависает.

Интересно, что совсем уж бета версии обладают примерно той же функциональностью
в плане симуляции, но по размеру примерно на треть меньше...

Так если повыкидывать всякие хелпы, анализаторы и др., может Logisim и под
J2ME портанётся... :wink:

Алгоритм симуляции просто элементарный... так что даже странно, что автор лишил
нас многоканального логического анализатора... Или хотя бы двухканального
осциллоскопа... :(

_________________
iLavr


21 Aug 2012 17:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Я немного "протрусил" интернет на вопрос, разбирался ли кто с внутренностями файла *.circ этого самого Logisim...
Таких любителей не нашел, а то что пишут...
Quote:
Файл *.circ содержит данные в формате XML и включает в себя имена и координаты расположения для соединений, шлюзов и точек.

Circuit file created and used by Logisim, a graphical tool for designing and simulating logic circuits; contains circuit data in XML format; includes names and placement coordinates of wiring, gates, and plexers.

собственно, это было понятно мне давно, при взгляде в сам файл *.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.

Это файл, соответствующий следующей схеме:
Attachment:
RS-TRIGGERcirc.gif
RS-TRIGGERcirc.gif [ 1.58 KiB | Viewed 70 times ]

Элементы,помеченные как >0 - так последний, работающий у меня Logisim 2.2.0, изображает
"ИЛИ-НЕ" (почему я с Logisim и не работаю из-за кучи похожих "косяков").

И для сравнения я здесь выложу похожую по числу элементов и связям схему из EWB:

Image
вместе с файлом её экспорта в SPICE-формат *.cir

 RS_trig_EWB
Code:
****** c:\ewb\shems_old\rs_ttl\rs_trig_.ewb ******
*  Interactive Image Technologies                *
*                                                *
*  This File was created by:                     *
*    Electronics Workbench to SPICE netlist      *
*    conversion DLL                              *
*                                                *
*  Tue Dec 05 16:41:47 2017                      *
**************************************************

* Resistor(s)
*
R1 14 3 1K
*
R2 15 3 1K

* Connector(s)
* node = 5, label =
* node = 4, label =
* node = 3, label =
* node = 0, label =
* node = 3, label = /S
* node = 4, label = /R
* node = 1, label =
* node = 2, label =

* +Vcc Voltage Source(s)
*
V5V_U9 3 0 DC 5

* 2-Input NAND Gate(s)
*
UNAND_U4 NAND(2) $G_DPWR $G_DGND 2 14 12 T_GATE_ttl_LS IO_STD
*
UNAND_U5 NAND(2) $G_DPWR $G_DGND 15 12 2 T_GATE_ttl_LS IO_STD

* Red Probe(s)
* red Q
.PROBE D(PrbR2)
UPrbR_U6 BUF $G_DPWR $G_DGND 2 PrbR2 D0_GATE IO_STD

* Blue Probe(s)
* blue /Q
.PROBE D(PrbB12)
UPrbB_U8 BUF $G_DPWR $G_DGND 12 PrbB12 D0_GATE IO_STD

* Misc
.MODEL T_GATE_ttl_LS UGATE
+ ( TPLHMN=10n TPLHTY=10n TPLHMX=10n
+   TPHLMN=10n TPHLTY=10n TPHLMX=10n )
.LIB

.OPTIONS ITL4=250 METHOD=GEAR
.END

Возможно, будет интересно сравнить эти два формата хранения схем, раз уж у нас такой разговор здесь возник...

_________________
iLavr


06 Dec 2017 17:42
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Ну и пока я прочесывал Интернет на повод формата файла *.circ попались мне мимоходом
два проекта одного джентельмена, разработавшего свои модели процессоров под Logisim:

An Example Hardwired CPU
Attachment:
cpu_in_logisim.gif
cpu_in_logisim.gif [ 14.33 KiB | Viewed 69 times ]


и Warren's Microcoded CPU
Attachment:
main_path.png
main_path.png [ 6.8 KiB | Viewed 69 times ]


Возможно, пользователям Logisim нашего форума проекты покажутся интересными...

_________________
iLavr


06 Dec 2017 17:54
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15908
Location: Colorado
Reply with quote
Lavr wrote:
Возможно, будет интересно сравнить эти два формата хранения схем, раз уж у нас такой разговор здесь возник...
Если вкраце, то SPICE это "нетлист", который даёт список элементов (без привязки к координатам), у которых ногам приписываются номера цепей - если выход одного элемента подцеплен ко входу другого, то у них будет один и тот же номер - очевидно, что этот номер уникальным образом идентифицирует цепь (в общем случае это может быть не номер, а имя, например VCC и GND), а Logisim просто описывает все элементы схемы (включая отрезки проводов) с привязкой к координатной сетке:
Code:
<project version="1.0" source="2.2.0">
этот тэг описывает проект - он один на файл .circ
Code:
  <lib name="0" desc="#Base">
это либы, их можно пропустить, также в файл .circ затолканы всякие настройки, например внешний вид меню (по мне так это вообще лишнее)

непосредственно схемы находятся в тэгах circuit (и их как правило больше одого):
Code:
  <circuit name="main">

далее вплоть до закрывающего тэга circuit могут идти:

- тэги wire (прямой отрезок сигнального провода без указания его ширины, т.е. 1-проводные и многопроводные сигналы на уровне проводов описываются совершенно одинаково):
Code:
    <wire from="(150,130)" to="(270,130)" />
    <wire from="(270,170)" to="(270,200)" />
    <wire from="(160,120)" to="(180,120)" />

from и to это координаты концов отрезка в плоской системе координат (0,0 это левый верхний угол) - очевидно, что при чтении .circ файла Logisim "в уме" подцепляет такие отрезки друг к другу, составляя цепь, и уже потом определяет сколькипроводные они (по тому к сколькипроводному выходу они подключены) - причём если отрезки идут "внахлёст", то считаются, что они не пересекаются, а если концами заканчиваются в одной точке, то пересекаются (а если там концами стыкуются больше двух таких отрезков, то логисим ставит там жирную точку)

- тэги comp (компонент), внутри которого могут быть параметры, самый распостранённый из которых это name:
Code:
    <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 вообще в одну строку записывается:
Code:
    <comp lib="1" loc="(1150,1530)" name="NAND Gate"/>
без закрывающего тэга comp (по XML стандарту в этом случае перед последней закрывающей треугольной скобкой надо писать слэш) - этот пример я взял из своего проекта NEDONAND (возможно в старых версиях логисима понятие параметра по умолчанию отсутствовало)

координата loc компонента как правило соответствует его первому выходу (это так, наблюдение)

вот собственно и всё :)

_________________
:eugeek: https://twitter.com/Shaos1973


06 Dec 2017 23:32
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
SPICE это "нетлист", который даёт список элементов (без привязки к координатам), у которых ногам приписываются номера цепей...

Да, это действительно так: без привязки к координатам...

Когда втаскиваешь SPICE-файл *.cir через Import, тебе предлагают несколько вариантов
автоматического размещения элементов на листе. Вот самый плохой - Fast :
Attachment:
RS-TRIGGERin.gif
RS-TRIGGERin.gif [ 2.53 KiB | Viewed 52 times ]


Поэтому, к примеру, в формате файлов Proteus уже есть скрытые привязки элементов к координатам:
Attachment:
elementPRO.gif
elementPRO.gif [ 1.5 KiB | Viewed 52 times ]

Маркер локального начала координат, относительно которого отсчитываются координаты выводов.

_________________
iLavr


07 Dec 2017 08:45
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15908
Location: Colorado
Reply with quote
Добавил ещё гейтов в свою рисовалку логисимовских схем (теперь исходник 759 строк):

http://nedopc.org/nedopc/files/LOGIGRAF.ZIP (130KB)

Если взять вот такую схемку например:

Attachment:
test.png
test.png [ 3.08 KiB | Viewed 40 times ]


На языке логисима она представляется так:

 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>


А моя досовская декодилка показывает её вот так:

Attachment:
logigraf_test.jpg
logigraf_test.jpg [ 12.44 KiB | Viewed 40 times ]


P.S. Хотя наверное блочки надо побольше сделать - они же могут до 5 входов иметь...

_________________
:eugeek: https://twitter.com/Shaos1973


07 Dec 2017 23:55
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15908
Location: Colorado
Reply with quote
Сделал гейты побольше (всё равно ещё был запас - я им хвост дорисовываю в любом случае, т.к. оригинальные логисимовские гейты ещё "длиннее"):

Attachment:
logigraf_test_new.jpg
logigraf_test_new.jpg [ 13.58 KiB | Viewed 39 times ]


Вот так например сейчас выглядит кусок схемы NEDONAND:

Attachment:
logigraf_nedonand.jpg
logigraf_nedonand.jpg [ 31.67 KiB | Viewed 39 times ]

В частности тут можно видеть, почему инверторы у меня такие мелкие...

_________________
:eugeek: https://twitter.com/Shaos1973


08 Dec 2017 00:43
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 22 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 1 guest


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.