Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППЛИС_лаб2.doc
Скачиваний:
77
Добавлен:
05.06.2015
Размер:
1.31 Mб
Скачать

Else generate

c[] = adder_def(a[], b[], cin);

END GENERATE;

Оператор If Generate имеет следующие характеристики:

Между ключевыми словами If  Generate заключается арифметическое выражение, значение которого подвергается оценке. За ключевым словом GENERATE следует список операторов, каждый из которых заканчивается символом «;». Операторы активизируются в том случае, если арифметическое выражение принимает истинное значение.

За ключевыми словами ELSE GENERATE следует один или более операторов, которые активизируются в случае, если арифметическое выражение принимает ложное значение.

Оператор If Generate заканчивается ключевыми словами END GENERATE, за которыми следует символ «;».

Оператор If Generate может использоваться в разделе Logic и в разделе Variable.

В отличие от операторов If Then, которые могут оценивать лишь значения булевских выражений, операторы If Generate могут оценивать значения наборов арифметических выражений. Основное различие между операторами If Then и If Generate состоит в том, что в первом случае значение булевского выражения оценивается аппаратным способом (в кремнии), а во втором случае значение набора арифметических выражений оценивается на этапе компиляции.

Оператор For Generate. Следующий пример показывает использование итерационного оператора For Generate:

CONSTANT WIDTH = 6;

SUBDESIGN adder

(

suma[WIDTH ..1], sumb[WIDTH..1],

carry_in : INPUT;

out[WIDTH..1], carry_out: OUTPUT;

)

Variable

cout[(WIDTH +1)..1] : NODE;

BEGIN

cout[1] = carry_in;

FOR i IN 1 TO WIDTH GENERATE

out[i]=suma[i]$sumb[i]$cout[i];% Полный сумматор %

cout[i+1]=suma[i]&sumb[i]#cout[i]&(suma[i]$sumb[i]);

END GENERATE;

carry_out=cout[WIDTH +1];

END;

Оператор For Generate имеет следующие характеристики:

Между ключевыми словами FOR и GENERATE  заключаются следующие параметры:

1. Временная переменная, представляющая собой символическое имя. Эта переменная используется лишь в пределах оператора For Generate и заканчивает свое существование после того, как компилятор обработает этот оператор. В примере, показанном выше, такой переменной является переменная i. Это имя не может использоваться в качестве имени константы, параметра или узла в пределах данного проекта.

2.  За ключевым словом IN следует диапазон, ограниченный двумя арифметическими выражениями. Арифметические выражения разделяются между собой ключевым словом TO. В примере, показанном выше, арифметическими выражениями являются 1 и WIDTH. Границы диапазона могут  содержать выражения, состоящие только из констант и параметров; использование переменных при этом недопустимо.

За ключевым словом GENERATE следует один или более логических операторов, каждый из которых заканчивается символом (;).

Оператор If Generate заканчивается ключевыми словами END GENERATE, за которыми следует символ (;).

6.3.5. Проектирование на языке ahdl с использованием примитивов.

Для использования в текстовом описании модуля примитива необходимо обратиться к встроенному в пакет функциональному описанию данного примитива и сопоставить его выводам числа, константы, переменные или выводы модуля.

В AHDL определены два способа обращения к примитиву:

  • непосредственное обращение (In_line Reference);

  • присвоение примитиву символического имени, т.е. объявление его переменной, и обращение к нему как к переменной.