Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники / Язык AHDL.DOC
Скачиваний:
56
Добавлен:
13.06.2014
Размер:
995.84 Кб
Скачать
        1. Конечные автоматы с синхронными выходами

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

Файл moore1.tdf, приведенный ниже, реализует автомат Мура на четыре состояния.

SUBDESIGN moore1

(

clk : INPUT;

reset : INPUT;

y : INPUT;

z : OUTPUT;

)

VARIABLE

ss: MACHINE OF BITS (z)

WITH STATES (s0 = 0,

s1 = 1,

s2 = 1,

s3 = 0);

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

% текущее текущий следующее %

% состояние вход состояние %

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;

Этот пример определяет состояния конечного автомата с помощью объявления конечного автомата. Переходы между состояниями определены в таблице переходов, которая реализована с помощью оператора Table. В этом примере автомат ss имеет 4 состояния, но только один бит состояния (z). Компилятор автоматически добавляет другой бит и создает соответствующие присваивания для синтезированной переменной для представления автомата на 4 состояния. Этот автомат требует не менее 2 битов.

Когда значения состояний используются в качестве выходов, как в файле moore1.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

% состояние вход состояние выход %

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;

Вместо определения выхода с помощью присваиваний значений состояниям в объявлении конечного автомата, этот пример включает столбец ‘‘следующий выход’’, после столбца‘‘следующее состояние’’в оператореTable. Этот метод использует D триггер (DFF), вызванный с помощью ссылки, для синхронизации выходов с тактовой частотой.