Page 1 of 2

Моделирование логических схем (образовательная программа)

Posted: Sat Mar 10, 2012 2:16 pm
by IgorA
Появилась идея сделать программу для моделирования поведения логических схем. Сделал несколько файлов со схемами, их можно открывать и запускать на выполнение. Программа до конца еще не сделана, а именно нет возможности редактировать и создавать новые схемы (файлы пока можно редактировать в текстовом виде). Программа предназначена в основном для образовательных целей, что бы можно было понять как работают логические элементы при их объединении в различных вариантах.
Детали можно почитать в документации в папке docs, хотя описано не все.

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 2:20 pm
by Mario
А можно узнать почему у тебя уже вторая программа в темных тонах? Я ничего против авторской задумки не имею, но лично мои глаза при работе с черным фоном быстрее устают, чем когда на белом фоне рисуется все.

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 8:00 pm
by IgorA
Mario wrote:А можно узнать почему у тебя уже вторая программа в темных тонах?
Просто мне кажется что от светлых тонов на мониторах будет быстрее выгорать люминофор :) На современные мониторы это врятли распространяется, но привычка писать темные программы осталась еще с DOS-вских времен.

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 8:16 pm
by XVilka
схемы разводить, кстати удобно на темном фоне. Хотя было бы классно, если бы была возможность выбрать или "темную" или "светлую" темы.

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 8:35 pm
by SoUrcerer
Да и цветовую гамму приложения в целом. Иначе получается несколько вырвиглазно. За прогу - респект!

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 9:34 pm
by popovpa
На ЖК мониторах чёрный цвет самый энергоёмкий...на ЭЛТ на оборот...

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 9:39 pm
by Mario
popovpa wrote:на ЭЛТ на оборот...
"На оборот" это как? На задней крышке что ли?

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 10:34 pm
by art_zh
Игорь, у тебя просто призвание браться за невозможные вещи.
И делать их!

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

Re: Моделирование логических схем (образовательная программа

Posted: Sat Mar 10, 2012 10:50 pm
by SoUrcerer
Я так понимаю, что это эмулирование именно логических элементов. Мне нравится Logisim, он хранит свои данные вот так:
Spoiler:

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project source="2.7.1" version="1.0">
This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/).
<lib desc="#Wiring" name="0"/>
  <lib desc="#Gates" name="1"/>
  <lib desc="#Plexers" name="2"/>
  <lib desc="#Arithmetic" name="3"/>
  <lib desc="#Memory" name="4">
    <tool name="ROM">
      <a name="contents">addr/data: 8 8
0
</a>
    </tool>
  </lib>
  <lib desc="#I/O" name="5"/>
  <lib desc="#Base" name="6">
    <tool name="Text Tool">
      <a name="text" val=""/>
      <a name="font" val="SansSerif plain 12"/>
      <a name="halign" val="center"/>
      <a name="valign" val="base"/>
    </tool>
  </lib>
  <main name="main"/>
  <options>
    <a name="gateUndefined" val="ignore"/>
    <a name="simlimit" val="1000"/>
    <a name="simrand" val="0"/>
  </options>
  <mappings>
    <tool lib="6" map="Button2" name="Menu Tool"/>
    <tool lib="6" map="Ctrl Button1" name="Menu Tool"/>
    <tool lib="6" map="Button3" name="Menu Tool"/>
  </mappings>
  <toolbar>
    <tool lib="6" name="Poke Tool"/>
    <tool lib="6" name="Edit Tool"/>
    <tool lib="6" name="Text Tool">
      <a name="text" val=""/>
      <a name="font" val="SansSerif plain 12"/>
      <a name="halign" val="center"/>
      <a name="valign" val="base"/>
    </tool>
    <sep/>
    <tool lib="0" name="Pin">
      <a name="tristate" val="false"/>
    </tool>
    <tool lib="0" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="labelloc" val="east"/>
    </tool>
    <tool lib="1" name="NOT Gate"/>
    <tool lib="1" name="AND Gate"/>
    <tool lib="1" name="OR Gate"/>
  </toolbar>
  <circuit name="main">
    <a name="circuit" val="main"/>
    <a name="clabel" val="8"/>
    <a name="clabelup" val="east"/>
    <a name="clabelfont" val="SansSerif plain 12"/>
    <wire from="(190,420)" to="(230,420)"/>
     <wire from="(230,60)" to="(230,100)"/>
    <wire from="(150,40)" to="(240,40)"/>
    <wire from="(280,50)" to="(290,50)"/>
    <wire from="(350,260)" to="(410,260)"/>
    <comp lib="0" loc="(100,270)" name="Clock"/>
    <comp lib="1" loc="(570,120)" name="Controlled Buffer">
      <a name="facing" val="south"/>
      <a name="width" val="8"/>
      <a name="control" val="left"/>
    </comp>
    <comp lib="4" loc="(160,330)" name="Counter">
      <a name="width" val="3"/>
      <a name="max" val="0x4"/>
    </comp>
    <comp lib="0" loc="(660,310)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="labelloc" val="east"/>
    </comp>
    <comp lib="0" loc="(740,180)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="labelloc" val="east"/>
    </comp>
    <comp lib="1" loc="(680,240)" name="NOT Gate"/>
    <comp lib="2" loc="(150,430)" name="Demultiplexer">
      <a name="selloc" val="tr"/>
      <a name="select" val="3"/>
    </comp>
    <comp lib="6" loc="(167,298)" name="Text">
      <a name="text" val="Счетчик команд"/>
    </comp>
    <comp lib="6" loc="(686,151)" name="Text">
      <a name="text" val="Сдвиговый регистр"/>
    </comp>
    <comp lib="2" loc="(260,170)" name="Multiplexer">
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="0" loc="(620,550)" name="Pin">
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="2" loc="(700,560)" name="Multiplexer">
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="4" loc="(530,180)" name="RAM"/>
    <comp lib="1" loc="(410,540)" name="OR Gate">
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="1" loc="(480,410)" name="NOT Gate">
      <a name="facing" val="north"/>
    </comp>
    <comp lib="2" loc="(710,410)" name="Multiplexer">
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="1" loc="(370,410)" name="OR Gate">
      <a name="inputs" val="3"/>
    </comp>
    <comp lib="0" loc="(60,240)" name="Pin">
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="0" loc="(220,100)" name="Bit Extender">
      <a name="in_width" val="1"/>
      <a name="out_width" val="8"/>
    </comp>
    <comp lib="1" loc="(380,110)" name="OR Gate">
      <a name="width" val="8"/>
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="0" loc="(280,130)" name="Pin">
      <a name="facing" val="south"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="4" loc="(130,180)" name="Register"/>
    <comp lib="1" loc="(330,290)" name="AND Gate">
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="0" loc="(750,360)" name="Pin">
      <a name="facing" val="south"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="3" loc="(280,50)" name="Adder"/>
    <comp lib="0" loc="(760,290)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="labelloc" val="east"/>
    </comp>
    <comp lib="6" loc="(99,147)" name="Text">
      <a name="text" val="Регистр PC"/>
    </comp>
    <comp lib="4" loc="(670,180)" name="Shift Register">
      <a name="width" val="8"/>
      <a name="length" val="2"/>
    </comp>
  </circuit>
</project>

Re: Моделирование логических схем (образовательная программа

Posted: Mon Mar 12, 2012 2:05 pm
by IgorA
XVilka wrote:схемы разводить, кстати удобно на темном фоне. Хотя было бы классно, если бы была возможность выбрать или "темную" или "светлую" темы.
когда будет свободное время надо будет добавить выбор цвета, пока что нужно добавить инструменты для редактирования
art_zh wrote:Совет: надо сразу подумать о совместимости с имеющимися программами, особенно на уровне библиотек элементов. Иначе зазюзюкаешься каждую микросхему забивать в отдельный файл.
думаю что сделать конвертирование можно, но вот будут ли при этом совпадать пропорции элементов. В этом может быть основная проблема с переносом
SoUrcerer wrote:Я так понимаю, что это эмулирование именно логических элементов. Мне нравится Logisim, он хранит свои данные вот так:
посмотрел в интернете эту программу, интересная

Re: Моделирование логических схем (образовательная программа

Posted: Thu Mar 15, 2012 12:56 pm
by IgorA
Сделал небольшие доработки программы и отправил на svn ревизия 2462.
Исправил небольшую ошибку с надписями.
Добавил кнопки для рисования и стирания проводов. Провода рисуются по пикселям (клеткам), хотя конечно лучше было бы если рисовалось линиями, но пока нет времени на эксперименты.

Re: Моделирование логических схем (образовательная программа

Posted: Thu Mar 15, 2012 10:20 pm
by Kopa
IgorA wrote: посмотрел в интернете эту программу, интересная
Особенно использование во "всевозможных" курсах обучения
логики и созданию CPU. (поиск "Logisim circ"), но по моему
"песочница" Javы для него "несколько" обременительна.

P.S. Пожелание у пользователя должна быть возможность нарастить функционал,
например используя, простейший язык программирования типа Лого.
Самому близка и интересна эта тематика, как приложение сил прогера и пользователя.

Re: Моделирование логических схем (образовательная программа

Posted: Thu Mar 22, 2012 6:09 pm
by IgorA
Делал несколько обновлений программы в ревизиях 2482 и 2487 (добавил курсоры).
Обнаружил ошибку предположительно в функции pole_cell_delete. Из-з чего возможны глюки при сохранении и при интенсивном редактировании схем.
Kopa wrote:P.S. Пожелание у пользователя должна быть возможность нарастить функционал, например используя, простейший язык программирования типа Лого.
Надо нарастить программу другими функциями, тогда и за Лого можно будет взятся. Пока что работа всех элементов задается таблицами, а это не удобно, когда у элемента много входных ног.
Нашел эту ошибку не там где думал а в другой функции, скоро исправлю на svn.

Re: Моделирование логических схем (образовательная программа

Posted: Thu Mar 29, 2012 11:46 pm
by IgorA
В рев. 2523 добавил открытие цветов из ini файла
Пока не все цвета можно задавать, только основные
Файл bat не копирует в папку bin файл ini, потому по умолчанию цвета будут старые.

Re: Моделирование логических схем (образовательная программа

Posted: Thu Mar 29, 2012 11:54 pm
by Mario
В качестве задела на будущее было бы хорошо иметь возможность увеличить масштаб. Если не произвольно, то хотя бы в целое число раз. Да даже в 2,4,8,16 уже для большинства случаев хватит. Не у всех идеальное зрение, но даже у тех кого оно хорошее спустя часы работы глаза устают, а увеличение масштаба позволяет меньше напрягать глаза.

UPD Упс, я был не внимателен. Масштабирование уже есть. Меня смутило отсутствие скроллбаров.