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

AHDL поддерживает реализацию конечных автоматов с асинхронными выходами. Выходы этих типов конечных автоматов могут изменяться при изменении входов, несмотря на переходы сигнала Clock.

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

SUBDESIGN mealy

(

clk : INPUT;

reset : INPUT;

y : INPUT;

z : OUTPUT;

)

VARIABLE

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

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

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

ss, y => z, ss;

s0, 0 => 0, s0;

s0, 1 => 1, s1;

s1, 0 => 1, s1;

s1, 1 => 0, s2;

s2, 0 => 0, s2;

s2, 1 => 1, s3;

s3, 0 => 0, s3;

s3, 1 => 1, s0;

END TABLE;

END;

        1. Выход из некорректных состояний

Логика, созданная для конечного автомата компилятором MAX+PLUS II, будет вести себя так, как Вы описали в файле TDF. Тем не менее проекты конечных автоматов, которые точно объявляют биты состояния, и которые не используют позиционного кодирования, часто допускают значения битов состояния, которые не связаны с действительными состояниями. Эти не присвоенные значения называются не корректными состояниями. Проект, который вводит некорректные состояния, например, в результате нарушений времени предустановки и удержания, может приводить к неверным выходам. Хотя Altera рекомендует, чтобы входы конечного автомата удовлетворяли всем временным требованиям, Вы можете заставить конечный автомат принудительно вернуться из некорректного состояния в известное состояние с помощью оператора Case.

Для возвращения из некорректных состояний в проектах не использующих FLEX устройств, или проектов не использующих опцию позиционного кодирования, Вы должны назвать все некорректные состояния автомата. Предложение WHEN OTHERS в операторе Case, которое принуждает выполнить каждый переход из некорректного состояния в известное состояние, применяется только к состояниям, которые объявлены, но не упоминаются в предложении WHEN. Предложение WHEN OTHERS может форсировать принудительные переходы, только если все некорректные состояния объявлены в объявлении конечного автомата.

Для n-битного конечного автомата, существует 2n возможных состояний. Если Вы объявилиn бит Вы должны продолжать добавлять имена фиктивных состояний до тех пор, пока количество состояний не достигнет степени 2. Файл recover.tdf, приведенный ниже, содержит автомат, который может возвращаться из некорректных состояний.

SUBDESIGN recover

(

clk : INPUT;

go : INPUT;

ok : OUTPUT;

)

VARIABLE

sequence : MACHINE

OF BITS (q[2..0])

WITH STATES (

idle,

one,

two,

three,

four,

illegal1,

illegal2,

illegal3);

BEGIN

sequence.clk = clk;

CASE sequence IS

WHEN idle =>

IF go THEN

sequence = one;

END IF;

WHEN one =>

sequence = two;

WHEN two =>

sequence = three;

WHEN three =>

sequence = four;

WHEN OTHERS =>

sequence = idle;

END CASE;

ok = (sequence == four);

END;

Этот пример содержит 3 бита: q2, q1, и q0. Следовательно существует 8 состояний. Так как объявлено только 5 состояний, были добавлены 3 фиктивных состояния.