Врезка 4
SUBDESIGN simple ( clk : INPUT; reset : INPUT; d : INPUT; q : OUTPUT; ) VARIABLE ss : MACHINE WITH STATES (s0, s1); BEGIN ss.clk = clk; ss.reset = reset; CASE ss IS WHEN s0 q = GND; IF d THEN ss = s1; END IF; WHEN s1 q = VCC; IF !d THEN ss = s0; END IF; END CASE; END;
|
В данном файле в секции VARIABLE объявлен цифровой автомат (state machine) ss. Состояния автомата определяются как s0 и s1. Биты состояний не определены.
Сигналы Clock, Reset и Enable управляют триггерами регистра состояний в цифровом автомате. Эти сигналы задаются булевыми уравнениями управления в логической секции.
В предыдущем примере (файл simple.tdf) синхросигнал цифрового автомата (Clock) формируется входом clk. Асин-хронный сигнал сброса цифрового автомата (Reset) формируется входом reset, имеющим высокий активный уровень. Для подключения сигнала отпирания (Enable) нужно добавить в данный файл проекта строку “ena : INPUT;” в секцию SUBDESIGN, а также добавить в логическую секцию булево уравнение “ss.ena = ena;”.
Для задания выходных значений можно использовать операторы IF и CASE. В приведённом выше примере (файл simple.tdf) значение выхода q устанавливается равным GND, если цифровой автомат ss находится в состоянии s0, и равным VCC, когда она находится в состоянии s1. Эти присваивания делаются в предложениях WHEN оператора CASE.
Выходные значения можно также задавать в таблицах истинности, как будет описано в разделе “Присвоение битов и значений в машине состояний”.
Переходы между состояниями определяют условия, при которых машина переходит в новое состояние. Переходы в машине состояний задаются путём условного присвоения состояния в рамках одной конструкции, описывающей режим. Для этой цели рекомендуется использовать оператор CASE или таблицу истинности.
В приведённом выше примере (файл simple.tdf) переходы для каждого состояния определены в предложениях WHEN оператора CASE.
Бит состояния — это выход триггера, используемый для хранения одного бита значений цифрового автомата. В большинстве случаев для минимизации логических ресурсов следует предоставить компилятору системы MAX+plusII присвоение битов и значений состояния. Однако пользователь может сделать это самостоятельно в объявлении цифрового автомата, если, например, он хочет, чтобы определённые биты были выходами цифрового автомата.
Если выходы цифрового автомата зависят только от его состояния, их можно задать в предложении WITH STATES объявления цифрового автомата. Это сделает их менее подверженными ошибкам. Кроме того, в некоторых случаях для логических операций потребуется меньше логических ячеек.
На врезке 5 приведён пример, в котором реализован автомат Мура с четырьмя состояниями.
