Задержки логических элементов
В качестве примера уровня проработанности алгоритма Logisim рассмотрим следующую схему.
Она "очевидно" всегда даёт 0 на выходе. Но элементы НЕ не реагируют мгновенно на сигналы на входах в реальности, и в Logisim - тоже. В результате, когда значение на входе этой цепи изменяется с 0 на 1, элемент И будет короткое время видеть 1 на обоих входах, и выдаст на выходе 1 на короткое время. Вы не увидите этого на экране. Но этот эффект можно наблюдать, если мы подадим выход элемента И на тактовый вход D триггера.
Если вы нажмёте на вход чтобы изменить значение с 0 на 1, то на D триггер мгновенно придёт 1, и его значение будет переключаться каждый раз, когда значение на входе схемы меняется с 0 на 1.
Каждый компонент имеет задержку, связанную с ним. Более сложные компоненты, встроенные в Logisim, как правило имеют большие задержки, но эти задержки несколько произвольны и могут не отражать реальность.
С технической точки зрения относительно легко обойтись таким уровнем проработанности в одной схеме. Удачное манипулирование с задержками элементов в подсхемах, однако, является немного более сложным; Logisim пытается справиться с этим, располагая просчитываемые для примитивных компонентов значения в одну очередь, независимо от подсхемы, в которой находится компонент.
(Через вкладку Моделирование окна Параметры проекта вы можете настроить Logisim на добавление случайной задержки к просчёту компонента. Это сделано для того, чтобы имитировать неравномерность реальных схем. Например, R-S триггер, построенный с использованием двух элементов ИЛИ-НЕ, будет возбуждаться без этой случайности, так как оба элемента будут обрабатывать свои входы "нога в ногу". Эта случайность отключена по умолчанию.)
Не могу позволить себе сказать, что Logisim всегда правильно обращается с задержками элементов. Но он по крайней мере пытается.
Далее: Ошибки при возбуждении.