@keldish

Компиляция логической схемы, с чего начать?

Написал редактор функциональных блоков. Блоки только И, ИЛИ, НЕ, исключающее ИЛИ. Эту часть доделал, мне нравится, теперь нужно запустить эмуляцию. С чего начать, где и что почитать? Может кто объяснит в двух словах?
Мысли такие - по умолчанию на входах всех блоков "0", сами блоки выставляют выхода в зависимости от своего назначения. следуя с верху вниз и слева на право, исходя из выставленных пользователем связей меняем входа и соответственно выхода блоков пока не добираемся до выхода со схемы. Вот тут вопросы полезли. Расположение блоков в редакторе произвольно и значит возможны ошибки. Также возможны обратные связи (пока думаю записывать значение и подставлять в следующей итерации). Вот тут мысль останавливается.
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 3
hint000
@hint000
у админа три руки
записывать значение и подставлять в следующей итерации
Хорошая, годная мысль.
Расположение блоков в редакторе произвольно и значит возможны ошибки
Логика работы, конечно, не должна зависеть от расположения блоков на экране. Блоки вызывают друг друга рекурсивно, чтобы определить состояния своих входов. Каждый блок должен помнить состояния своих входов и выходов для текущего момента времени и, возможно, для предыдущего момента. Отдельно каждый блок имеет флаг, показывающий, было ли уже вычислено состояние выхода на текущий момент. Флаг гарантирует конечность рекурсивных вызовов, т.к. если выход уже вычислен, то сразу возвращаемся из рекурсии.
(Делал очень-очень давно подобную штуку, только не для логических элементов, а для аналоговых СВЧ-блоков, сам удивляюсь, что ещё что-то помню о том проекте).
Ответ написан
@AlexSku
Программист по автоматике
Если бы не было обратных связей, то можно просто написать декларации в любом порядке (функциональный язык Hasell):
f1 = x1 && x2

f2 = x1 || x2

f3 = f1 xor f2

f4 = not f3

Для обратных связей можно взять пример языка CFC Codesys программируемых контроллеров. Каждый блок нумеруется и вычисляется один раз за скан программы. А уж как реализовать порядок - это вам решать.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Сначала нужно построить общую формулу по граф.схеме.
Затем, разложить на независимые группы и построить таблицу состояний: сверху - время, слева - элементы.
Так сможете понять: что считаем параллельно, а что - последовательно.

Обратную связь без тактового генератора - нереально сделать.
Вот пример простейшей схемы.

Контроль завершения эмуляции при рекурсивных передачах состояний от блока к блоку без тактового генератора, можно сделать с помощью валидации первого выходного сигнала на всех выходах всей схемы. Как только все выходы (выходы всей схемы, а не выходы отдельных элементов!) получили значение - останавливаем процесс.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы