Язык AHDL

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


Регистры запоминают значения данных и синхронизируют их с помощью сигнала Clock. Вы можете объявить экземпляр регистра с помощью объявления Register в разделе Variable. ( Вы можете также реализовать регистр используя ссылки на функции в разделе Logic). AHDL предлагает несколько примитивов регистров, а также поддерживает регистровые LPM функции.

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

<имя экземпляра>.<имя порта>

Файл bur_reg.tdf, приведенный ниже, использует объявление Register для создания байтного регистра, который фиксирует значения входов d на переднем фронте Clock, когда вход загрузки высокий.

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 как DFFE(D триггер с сигналом разрешения). Первое булево уравнение в разделе Logic соединяет вход clk с портами Clock триггеров ff[7..0].

Второе уравнение соединяет вход загрузки с портами разрешения тактовой частоты. Третье уравнение соединяет входы данных d[7..0] с входными портами триггеров ff[7..0]. И четвертое уравнение соединяет выходы с выходными портами триггеров. Все четыре уравнения оцениваются совместно.

Вы можете также объявить T, JK, и SR триггеры в разделе Variable, а затем использовать в разделе Logic.

Если Вы хотите загрузить регистр на определенном переднем фронте глобального сигнала Clock, Altera рекомендует использовать вход разрешения тактовой частоты одного из DFFE, TFFE, JKFFE, или SRFFE триггеров для управления загрузкой регистра.

Файл lpm_reg.tdf, приведенный ниже, использует ссылку для реализации экземпляра функции lpm_dff, который обладает такой же функциональностью, как и файл bur_reg.tdf.

INCLUDE "lpm_dff.inc";

SUBDESIGN lpm_reg

(

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

   q[7..0]            : OUTPUT;

)

BEGIN

q[] = lpm_dff (.clock=clk, .enable=load, .data[]=d[])

      WITH (LPM_WIDTH=8)

   RETURNS (.q[]);

END;



Содержание раздела