Написал редактор функциональных блоков. Блоки только И, ИЛИ, НЕ, исключающее ИЛИ. Эту часть доделал, мне нравится, теперь нужно запустить эмуляцию. С чего начать, где и что почитать? Может кто объяснит в двух словах?
Мысли такие - по умолчанию на входах всех блоков "0", сами блоки выставляют выхода в зависимости от своего назначения. следуя с верху вниз и слева на право, исходя из выставленных пользователем связей меняем входа и соответственно выхода блоков пока не добираемся до выхода со схемы. Вот тут вопросы полезли. Расположение блоков в редакторе произвольно и значит возможны ошибки. Также возможны обратные связи (пока думаю записывать значение и подставлять в следующей итерации). Вот тут мысль останавливается.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
07-03-2020 03:22
>>> Также возможны обратные связи
Простейший пример: вход элемента НЕ замкнут на выход. Каков должен быть сигнал на выходе? Правильный ответ - высокочастотный "звон", который определяется исключительно паразитными эффектами платы, элемента и проводников. Отсюда вывод: надо делать "тактовый" импульс и на выходе показывать не однозначный сигнал, а сигнал в "динамике" - осциллограмму! Считать очень просто: есть "старое" состояние, есть "новое" состояние, при вычислении состояния КАЖДОГО элемента вы пользуетесь только таблице "старого" состояния, полностью игнорируя то, что вот у этого вот элемента "или" раньше на всех входах были нули, а теперь вдруг на одном из входов состояние поменялось.
При таком подходе вообще никакой разницы не будет, как именно элементы расположены на схеме, потому что им всё-равно (не верите - мысленно смоделируйте, помня, что выход всегда является строго функцией входа от старого состояния, а старое состояние является константой). Именно так и работают реальные схемы. Правда, в реальной схеме есть ещё задержка распространения сигнала, потому получаются в моменты переключения (иногда) короткие "выбросы", которые иногда доводят разработчиков цифровых устройств до белого каления. Есть ещё гонки сигналов, когда на вход решающего устройства данные приходят по разным цепям с разными задержками, вынуждая решающее устройство на короткое время "менять" своё "мнение" на противоположное, что может приводить к проблемам (а может и не приводить), но на это в своём симуляторе для начинающих пока не запаривайтесь. Это и так слишком сложная тема.
>>>теперь нужно запустить эмуляцию
Вы делаете дискретное устройство. Другими словами последовательное соединение дискретных блоков в схему, которые, как предполагается, будут работать последовательно.
На вход каждого блока подаётся три вида сигнала: значения входных данных, признак наличия данных, событие произведения действия (тактовый сигнал). На выходе - два сигнала: значения выходных данных, признак наличия данных.
Вся схема производит действие на каждый тактовый сигнал, но за два шага (полутакта) (Минский М. -Вычисления и автоматы -1971). Другими словами на каждый тактовый сигнал производится обработка каждого дискретного блока схемы. На первом шаге (полутакте) проверяется есть ли "признак наличия данных" и если есть данные обрабатываются (но значения выхода блока не изменяется). На втором шаге изменяются значения выхода каждого блока, в соответствии с полученными в блоке результатами.
>>>по умолчанию на входах всех блоков "0"
В современных учебниках (как по программированию, так и по электронике) учат смешивать поток "события наличия данных" и "значения данных", принимая за отсутствие данных 0 или "неопределённость". Такое смешение видов потоков, обычно допускают для оптимизации используемых ресурсом (занимаемой памяти перенными, разрядности шины и т.д.). При таком совмещении, дополнительно приходится где-то помнить, что часть значений потока данных обозначают событие наличия, а часть - собственно значения. Другими словами, часть структуры системы, прячется в возможность предобработки данных. Два структурных признака (признак наличия и значение) преобразуются в два последовательных шага (проверка наличия в данных данных и получение значения данных).
Если вы что-то конструируете, строите концептуальную схему или анализирует дискретную структурную схему, то настоятельно рекомендуется разделить эти два потока. Так нагляднее и практичнее.
Вам нужно дописать редактор функциональных блоков, чтобы он мог создавать связи между ними. Неважно, как расположены блоки, главное — какие между ними связи. Набор блоков и связей - это уже схема, которая является функциональной моделью для эмулятора.
При наличии обратных связей, конечно, за один проход эмулятор может не справиться.
В набор состояний введите неопределённое состояние. Это такое, которое на момент начала итерации неизвестно. После итерации неопределённые состояния становятся известными, как функция других состояний, в соответствии со схемой. В сложной схеме для определения всех состояний может понадобиться несколько итераций.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.