Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABA1.DOC
Скачиваний:
3
Добавлен:
23.11.2019
Размер:
141.31 Кб
Скачать

Обращение к примитивам и параметризуемым функциям

При обращении к примитивам не требуется указание ссылки на библиотечный файл (include «имя.inc») и указание параметров.

Можно выделить два основных типа вызова:

1. Непосредственное обращение

Существует два варианта непосредственного обращения:

1.1. В логической секции на месте входных сигналов примитива или функции указываются сигналы, описанные в секциях subdesign и variable:

My_out_Dtrig = DFF ( data_in, clock, reset, set );

Out_FF[7..0] = lpm_ff(dataRG[], clock) WITH(LPM_WIDTH = 8) RETURNS(.q[]);

1.2. В логической секции входным сигналам примитива или функции (.входной сигнал вызываемого элемента = сигнал) присваиваются сигналы, описанные в секциях subdesign и variable:

My_out_Dtrig = DFF ( .clrn = reset, .clk = clock, .D = data_in, .prn = set );

Out_FF[7..0] = lpm_ff(.data[] = dataRG[], .clock = clock) WITH(LPM_WIDTH = 8) RETURNS(.q[]);

2. Использование элемента как переменной

Пример:

Variable

Dtrig :DFF;

REG :lpm_ff () WITH (LPM_WIDTH = 8);

Begin

-- обращение к D триггеру

Dtrig.D = Data;

Dtrig.clk = clock;

Dtrig.(prn, clrn) = ( set, reset );

Out_Dtrig = Dtrig.q;

-- обращение к lpm_ff

REG..data[] = dataRG[];

REG..clock = clock;

out_RG[] = REG..q[];

End;

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

Основные операторы

 Оператор IF THEN

Оператор If Then содержит список операторов, выполняемых в том случае, если булевское выражение, расположенное между ключевыми словами IF и THEN, принимает истинное значение .

IF a[] == b[] THEN

c[8..1] = H "77";

addr[3..1] = f[3..1].q;

f[].d = addr[] + 1;

ELSIF g3 $ g4 THEN

f[].d = addr[];

ELSE

d = VCC;

END IF;

 Оператор CASE

Оператор Case определяет список альтернативных вариантов, которые могут быть активизированы в зависимости от значения переменной, группы или выражения, следующего за ключевым словом CASE.

CASE f[].q IS

WHEN H"00" =>

addr[] = 0;

s = a & b;

WHEN H"01" =>

count[].d = count[].q + 1;

WHEN H"02", H"03", H"04" =>

f[3..0].d = addr[4..1];

WHEN OTHERS =>

f[].d = f[].q;

END CASE;

 Оператор TRUTH TABLE

Оператор Truth Table используется для определения комбинационной логики или для определения поведения автоматов. В таблицах истинности, используемых в AHDL каждая строка таблицы состоит из комбинации входных значений и соответствующих этой комбинации выходных значений. Эти выходные значения могут использоваться как обратные связи для определения переходов автоматов из одного состояния в другое, а также его выходов.

TABLE

a0,

f[4..1].q

=>

f[4..1].d,

control;

0,

B"0000"

=>

B"0001",

1;

0,

B"0100"

=>

B"0010",

0;

1,

B"0XXX"

=>

B"0100",

0;

X,

B"1111"

=>

B"0101",

1;

END TABLE;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]