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

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

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

В приведенном ниже фале mealy.tdf реализован автомат Мили с четырьмя состояниями и асинхронными выходами.

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

% current currentcurrent next %

% state input output state %

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;

3.5.8. Восстановление после неправильных состояний

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

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

Для n-битового цифрового автомата существует 2n возможных состояний. Поэтому нужно добавить воображаемые имена состояний, чтобы получилось такое их число.

Ниже приведен файл 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;

В данном примере цифровой автомат имеет три бита, поэтому она должна иметь 23, или 8 состояний. В объявлении заданы только 5 состояний. Следовательно, нужно туда добавить еще три воображаемых состояния illegal1, illegal2, illegal3.

 

3.6. Реализация иерархического проекта

В иерархической структуре проекта TDF-файлы, написанные на языке AHDL, можно использовать вместе с другими файлами проектов. На нижнем уровне проекта могут быть макрофункции, поставляемые фирмой Altera или разработанные пользователями.

3.6.1. Использование макрофункций системы Altera MAX+PLUS II

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

В языке AHDL существуют два способа вызова (то есть вставки в качестве примера) макрофункции:

объявить переменную типа <macrofunction> в объявлении примеров INSTANCE в секции VARIABLE и использовать порты примера макрофункции в логической секции. В этом способе важное значение имеют имена портов;

использовать для макрофункции непосредственную ссылку в логической секции файла TDF. В этом способе важен порядок портов.

Входы и выходы макрофункций перечисляются в описании прототипов функций (FUNCTION PROTOTYPE). Прототипы функций можно записать в отдельный файл и указать его в своем файле с помощью директивы INCLUDE. Такие Include-файлы создаются автоматически для данного проекта с помощью команды CreateDefaultIncludeFile. Include-файл вставляется вместо вызывающей его директивы INCLUDE. Для всех макрофункций системы MAX+PLUS II Include-файлы должны находиться в каталоге \maxplus2\max2inc.

Ниже приведен файл macro1.tdf, который реализует четырех битовый счетчик, подсоединенный к дешифратору 4бит -> 16 бит. Соответствующие макрофункции вызываются объявлениями примеров в секции VARIABLE

INCLUDE "4count";

INCLUDE "16dmux";

SUBDESIGN macro1

(

clk : INPUT;

out[15..0] : OUTPUT;

)

VARIABLE

counter : 4count;

decoder : 16dmux;

BEGIN

counter.clk = clk;

counter.dnup = GND;

decoder.(d,c,b,a) = counter.(qd,qc,qb,qa);

out[15..0] = decoder.q[15..0];

END;

 

В данном файле используются директивы INCLUDE для импортирования прототипов функций для двух макроофункций фирмы Altera: 4count и 16dmux. В секции VARIABLE объявляются две переменные: counter и decoder как примеры этих макрофункций. В логической секции определяются входные порты для обеих макрофункций в формате <имя переменной-примера>.<имя порта>. (Они ставятся в левой части булевых уравнений, а выходные порты - справа.) Порядок портов в прототипе функции не важен, так как имена портов в логической секции перечисляются явно.

Ниже приведен файл macro2.tdf, выполняющий те же функции, что и предыдущий, но макрофункции в нем вызываются непосредственной ссылкой.

 

INCLUDE "4count";

INCLUDE "16dmux";

SUBDESIGN macro2

(

clk : INPUT;

out[15..0] : OUTPUT;

)

VARIABLE

q[3..0] : NODE;

BEGIN

(q[3..0], ) = 4count (clk, , , , , GND, , , , );

%

out[15..0] = 16dmux (.(d, c, b, a)=q[3..0]);

% equivalent in-line ref. with positional port association %

% out[15..0] = 16dmux (q[3..0]); %

END;

Вызов макрофункций 4count и 16dmux осуществляется в логической секции непосредственной ссылкой (в правой части булевых уравнений).

Ниже приведены прототипы этих макрофункций, записанные в файлах 4count.inc 16dmux.inc:

FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a)

RETURNS (qd, qc, qb, qa, cout);

FUNCTION 16dmux (d, c, b, a)

RETURNS (q[15..0]);

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