Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШкПЛИС_ahdl.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
164 Кб
Скачать
☆

Врезка 14

FUNCTION bus_reg2 (clk, oe) RETURNS (io);

SUBDESIGN bidir1

(

clk, oe : INPUT;

io[3..0] : BIDIR;

)

BEGIN

io0 = bus_reg2 )clk, oe);

io1 = bus_reg2 )clk, oe);

io2 = bus_reg2 )clk, oe);

io3 = bus_reg2 )clk, oe);

END;

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

Последовательностная логика в AHDL

Логическая схема называется последовательностной, если выходы в заданный момент времени являются функцией входов не только в тот же момент, но и во все предыдущие моменты времени. Таким образом, в по-следовательностную схему должны входить некоторые элементы памяти (триггеры). В языке AHDL последовательностная логика реализована цифровыми автоматами с памятью (state machines), регистрами и триггерами. При этом средства описания цифровых автоматов занимают особое место. Кроме того, к последовательностным логическим схемам относятся различные счётчики и контроллеры.

Объявление регистров

Регистры используются для хранения значений данных и промежуточных результатов счётчика, тактирование осуществляется синхросигналом. Регистр создаётся его объявлением в секции VARIABLE.

Для подсоединения примера примитива, макрофункции или цифрового автомата к другой логике в TDF-файле можно использовать порты. Порт примера описывается в следующем формате: “<имя примера>.<имя порта>”.

Имя порта — это вход или выход примитива, макрофункции или цифрового автомата, что является синонимом имени вывода в файлах проектов (GDF-файл), “*.WDF” и других.

На врезке 1 приводится файл bur_reg.tdf, содержащий байтовый регистр, который фиксирует значения на входах d по выходам q на фронте синхроимпульса, когда уровень загрузки высокий.

Врезка 1

SUBDESIGN bur_reg

(

clk, load, d[7..0] : INPUT;

q[7..0] : OUTPUT;

)

VARIABLE

ff[7..0] : DFFE;

BEGIN

ff[].clk = clk;

ff[].ena = load;

ff[].d = d[];

q[] = ff[].q

END;

Как видно из файла, регистр объявлен в секции VARIABLE как D-триггер с разрешением (DFFE). В первом булевом уравнении в логической секции происходит соединение входа тактового сигнала подпроекта к портам тактового сигнала триггеров ff[7..0]. Во втором уравнении отпирающий тактовый сигнал соединяется с загрузкой. В третьем уравнении входы данных подпроекта соединяются с портами данных триггеров ff[7..0]. В четвёртом уравнении выходы подпроекта соединяются с выходами триггеров. Все четыре уравнения оцениваются одновременно.

Можно также в секции VARIABLE объявить T-, JK- и SR-триггеры и затем использовать их в логической секции. При использовании T-триггеров придётся в третьем уравнении изменить порт d на t. При использовании JK- и SR-триггеров вместо третьего уравнения придётся записать два уравнения, в которых происходит соединение портов j и k или s и r с сигналами. При загрузке регистра по заданному фронту глобального тактового сигнала фирма Altera рекомендует использовать вход разрешения одного из регистров: DFFE, TFFE, JKFFE или SRFFE, чтобы контролировать загрузку регистра.

Можно объявить регистровые выходы, если объявить выходы подпроекта как D-триггеры в секции VARIABLE.

Приведённый на врезке 2 файл reg_out.tdf обеспечивает те же функции, что и предыдущий (bur_reg.tdf), но имеет регистровые выходы.