Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Эмулятор комбинационной схемы (http://www.flasher.ru/forum/showthread.php?t=126012)

Роман Вадимович 08.06.2009 00:15

Эмулятор комбинационной схемы
 
Вложений: 1
Добрый день!
Наверняка каждый из Вас в университете или школе рассматривал комбинационные схемы.
Передо мной стоит задача разработать приложение, позволяющее создавать, и самое ужасное - симулировать их.
Для того чтобы было понятнее, я приведу пример во вложении.
Допустим у нас есть 2 кнопки генерирующие логический 0, либо 1 в зависимости нажаты ли они. Выходы этих клавиш поступают в блок логического "И", который в зависимости от входных данных формирует на выходе 0, либо 1.
Мне нужно создать редактор, позволяющий эмулировать подобные процессы, только элементов там будет значительно больше.
В качестве примера можно привести Electronic WorkBench под винду.
Как реализовать интерфейс и связи между элементами я знаю, но как производить симуляцию сцемы - понятия не имею.
Может кто-то сталкивался и хотя бы подскажет в каком направлении компать. Т.к. для меня важна только идея - код я реализую если алгоритм будет понятен.
Заранее благодарен.

silin 08.06.2009 00:25

http://en.wikipedia.org/wiki/Logic_gate#Logic_gates ?

dimarik 08.06.2009 01:34

А D-триггеры тоже будут? =)

silin, что это?

Там, похоже тема из обычной корпусной электроники 70-х годов. И, ИЛИ, ИЛИ-НЕ, ИСКЛ-И(ИЛИ), RS-ТРИГЕРЫ, C-ТРИГГЕРЫ, регистры, мультиплексоры, счетчики и в таком духе.

Роман Вадимович 08.06.2009 02:44

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

Добавлено:
Нашел внизу страницы, которую дал silin:
http://www.neuroproductions.be/logic...ndex.php?id=52

То что нужно, знать бы как это реализовано...

AL.exe 08.06.2009 02:51

http://code.google.com/p/as3ds/ - возможно, поможет. Особенно не всматривался, что туда входит.

Роман Вадимович 08.06.2009 02:56

Cпасибо, пригодится любая информация!

wizardjedi 08.06.2009 09:58

У вас типичная задача для систем автоматизированного проектирования (САПР). То, что вы хотите реализовать, это моделирование систем на макро-уровне.

Можете прочитать про это в книге И.П. Норенкова "Основы автоматизированного проектирования", ну, или, например, в лекциях В.В. Топоркова ;)

Если вкратце, то первоначально, вам необходимо построить модель комбинационной схемы, например, в виде графа.

Впоследствии применяя метод простых итераций или метод Зейделя решаете задачу определения состояний комбинационной схемы в 0,1, и в переходах 0->1,1->0. Определяете выходные значения(а заодно статические и динамические риски сбоев ;) ).

Однако, эти методы достаточно требовательны к памяти и вычислений многовато, можно воспользоваться модификацией методов на основе событийной модели(это когда создаётся специальный блок, следящий за изменением событий на выходе элементов и пересчитывает только в том случае, если имело место изменения состояния выхода). Заодно сможете и задержки просчитать. :)

silin 08.06.2009 10:09

>>silin, что это?
наводящий вопрос..:)
я банально не понял, в чем собственно проблема, если "реализовать интерфейс и связи между элементами" не вопрос, то в чем затык ?

Роман Вадимович 08.06.2009 20:21

Вложений: 1
Цитата:

я банально не понял, в чем собственно проблема, если "реализовать интерфейс и связи между элементами" не вопрос, то в чем затык ?
Создать редактор, который позволит расставлять элементы и связывать входы с выходами я знаю как. Но как провести симуляцию - для меня загадка. Спасибо wizardjedi, за приведенную литературу. Сейчас займусь поисками аналогов преложенных книг. Как верно Вы заметили, пересчет всей схемы я планирую осуществлять только при изменении генераторов сигналов, что сократит ресурсоёмкость программы.
Если рассмотреть элементарный пример в приложении, то мы видим 2 кнопки (источники сигнала), логический элемент "ИЛИ" и графичекий индикатор.
Принцип расчета я пока вижу следующим образом:

1) Циклически перебираем все элементы, являющиеся генераторами сигнала (в данном случае 2 кнопки).
2) Берем первый и устанавливаем его значение на всех входах, элементов подключенных к нему.
3) Пытаемся эмуляровать дальше и видим, что у элемента "ИЛИ" известно значение только первого входа, поэтому берем следующий генератор сигнала и повторяем пункт 2.
4) При подаче второго сигнала на входы элемента "ИЛИ" - мы можем двигаться дальше.
5) Получаем выходное значение и зажигаем либо тушим лампочку.

Это все, что я пока могу полагать - не знаю является ли этот алгоритм универсальным, поэтому мне остается только начать изучение книг предложенных, wizardjedi.

Спасибо за помощь.

alatar 08.06.2009 22:11

Зачем циклически опрашивать? Есть четыре объекта (в данном случае): два входа, логический элемент, выход. Лампочка запрашивает сигнал с выхода, выход запрашивает логичекий элемент, логический элемент опрашивает свои входы, входы запрашивают состояние своих кнопок.Все


Часовой пояс GMT +4, время: 20:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.