Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры бис.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
12 Мб
Скачать
☆

3.5.2. Установка сигналов Clock, Reset и Enable

Сигналы Clock, Reset и Enable управляют триггерами регистра состояний в цифровом автомате. Эти сигналы задаются булевыми уравнениями управления в логической секции.

В предыдущем примере (файл simple.tdf) синхросигнал цифрового автомата (Clock) формируется входом clk. Асинхронный сигнал сброса цифрового автомата (Reset) формируется входом reset, имеющим высокий активный уровень. Для подключения сигнала отпирания (Enable) нужно добавить в данный файл проекта строку “ena : INPUT;” в секцию SUBDESIGN, а также добавить в логическую секцию булево уравнение “ss.ena = ena;”.

3.5.3. Задание выходных значений для состояний

Для задания выходных значений можно использовать операторы IF и CASE. В приведенном выше примере (файл simple.tdf) значение выхода q устанавливается равным GND, если цифровой автомат ss находится в состоянии s0, и равным VCC, когда она находится в состоянии s1. Эти присваивания делаются в предложениях WHEN оператора CASE.

Выходные значения можно также задавать в таблицах истинности, как будет описано в разделе “Присвоение битов и значений в машине состояний”.

3.5.4. Задание переходов между состояниями

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

В приведенном выше примере (файл simple.tdf) переходы для каждого состояния определены в предложениях WHEN оператора CASE.

3.5.5. Присвоение битов и значений в цифровом автомате

Бит состояния - это выход триггера, используемый для хранения одного бита значений цифрового автомата. В большинстве случаев для минимизации логических ресурсов следует предоставить компилятору системы MAX+PLUS II присвоение битов и значений состояния. Однако пользователь может сделать это самостоятельно в объявлении цифрового автомата, если, например, он хочет, чтобы определенные биты были выходами цифрового автомата.

Ниже приведен файл stepper.tdf, реализующий функцию контроллера шагового двигателя.

SUBDESIGN stepper

(

clk, reset : INPUT;

ccw, cw : INPUT;

phase[3..0] : OUTPUT;

)

VARIABLE

ss : MACHINE OF BITS (phase[3..0])

WITH STATES (

s0 = B"0001", s1 = B"0010", s2 = B"0100", s3 = B"1000");

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

ss, ccw, cw =>ss;

s0, 1, x => s3;

s0, x, 1 => s1;

s1, 1, x => s0;

s1, x, 1 => s2;

s2, 1, x => s1;

s2, x, 1 => s3;

s3, 1, x => s2;

s3, x, 1 => s0;

END TABLE;

END;

В данном примере выходы phase[3..0], объявленные в секции SUBDESIGN, объявляются также, как биты цифрового автомата ss в объявлении цифрового автомата.

3.5.6. Цифровоые автоматы с синхронными выходами

Если выходы цифрового автомата зависят только от его состояния, их можно задать в предложении WITH STATES объявления цифрового автомата. Это сделает их менее подверженными ошибкам. Кроме того, в некоторых случаях для логических операций потребуется меньше логических ячеек.

Ниже приведен пример (файл moorel.tdf), в котором реализован автомат Мура с четырьмя состояниями.

SUBDESIGN moore1

(

clk : INPUT;

reset : INPUT;

y : INPUT;

z : OUTPUT;

)

VARIABLE % current current %

% state output %

ss :MACHINE OF BITS (z)

WITH STATES (s0 = 0,

s1 = 1,

s2 = 1,

s3 = 0);

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

% current current next %

% state input state %

ss, y =>ss;

s0, 0 => s0;

s0, 1 => s2;

s1, 0 => s0;

s1, 1 => s2;

s2, 0 => s2;

s2, 1 => s3;

s3, 0 => s3;

s3, 1 => s1;

END TABLE;

END;

В даном примере состояния определены в объявлении цифрового автомата. Переходы между состояниями определены в таблицеnext_state, которая задана в объявлении таблицы истинности. В данном примере машина имеет четыре состояния и только один бит состояния z. Компилятор системы MAX+PLUS II автоматически добавляет еще один бит и делает соответствующие присвоения этой синтезированной переменной для того, чтобы получилась машина с четырьмя состояниями. Такой цифровой автомат (statemachine) требует, по крайней мере, двух битов.

Если значения состояний используются как выходы ( как в файле moorel.tdf), для проекта потребуется меньше логических ячеек, но, возможно, логические ячейки потребуют больше логики, чтобы возбудить входы триггера. В этом случае модуль логического синтезатора компилятора, возможно, не сможет полностью минимизировать автомат.

Другой способ построения цифрового автомата заколючается в том чтобы не делать присвоения состояний и явно объявить выходные триггеры.

Этот альтернативный метод использован в приведенном ниже файле moore2.tdf.

SUBDESIGN moore2

(

clk : INPUT;

reset : INPUT;

y : INPUT;

z : OUTPUT;

)

VARIABLE

ss : MACHINE WITH STATES (s0, s1, s2, s3);

zd : NODE;

BEGIN

ss.clk = clk;

ss.reset = reset;

z = DFF(zd, clk, VCC, VCC);

TABLE

% current current next next %

% state input state output %

ss, y =>ss, zd;

s0, 0 => s0, 0;

s0, 1 => s2, 1;

s1, 0 => s0, 0;

s1, 1 => s2, 1;

s2, 0 => s2, 1;

s2, 1 => s3, 0;

s3, 0 => s3, 0;

s3, 1 => s1, 1;

END TABLE;

END;

В данном примере вместо того, чтобы задать выходы присвоением значений состояниям в объявлении цифрового автомата, в объявление таблицы истинности добавлен один столбец под названием “nextoutput (следующий выход)”. В этом методе для синхронизации выходов синхросигналом используется D-триггер, вызов которого записан с помощью непосредственной ссылки.