Главная страница

Учебник по языку ahdl оглавление Введение 2 Элементы языка ahdl 3 Структура описания проекта на языке ahdl 25


Скачать 0.61 Mb.
НазваниеУчебник по языку ahdl оглавление Введение 2 Элементы языка ahdl 3 Структура описания проекта на языке ahdl 25
Дата28.04.2019
Размер0.61 Mb.
Формат файлаdoc
Имя файлаahdl.doc
ТипУчебник
#75494
страница15 из 18
1   ...   10   11   12   13   14   15   16   17   18

1.30.Использование итеративно-генерируемой логики


Когда Вы хотите использовать несколько схожих блоков логики, Вы можете использовать оператор For Generate для итеративно-генерируемой логики.

Файл iter_add.tdf, приведенный ниже, демонстрирует пример итеративного создания логики:
CONSTANT NUM_OF_ADDERS = 8;

SUBDESIGN iter_add

(

a[NUM_OF_ADDERS..1], [NUM_OF_ADDERS..1],

cin : INPUT;

c[NUM_OF_ADDERS..1], cout : OUTPUT;

)

VARIABLE

sum[NUM_OF_ADDERS..1], carryout[(NUM_OF_ADDERS+1)..1] : NODE;

BEGIN

carryout[1] = cin;

FOR i IN 1 TO NUM_OF_ADDERS GENERATE

sum[i] = a[i] $ b[i] $ carryout[i]; % Полный суматор %

carryout[i+1] = a[i] & b[i] # carryout[i] & (a[i] $ b[i]);

END GENERATE;

cout = carryout[NUM_OF_ADDERS+1];

c[] = sum[];

END;
В iter_add.tdf оператор For Generate используется для присваивания значений полным сумматорам. Выходной перенос carryout генерируется вместе с каждым полным сумматором.

Оператор If Generate особенно полезен с оператором For Generate, который раздельно управляет специальными случаями, например, в первом и последнем каскадах многокаскадного умножителя.

1.31.Использование условно-генерируемой логики


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

Файл condlog1.tdf, приведенный ниже, использует оператор If Generate для реализации различного поведения выхода output_b на основании текущего семейства устройств.
PARAMETERS (DEVICE_FAMILY);

SUBDESIGN condlog1

(

input_a : INPUT;

output_b : OUTPUT;

)

BEGIN

IF DEVICE_FAMILY == "FLEX8K" GENERATE

output_b = input_a;

ELSE GENERATE

output_b = LCELL(input_a);

END GENERATE;

END;

Оператор If Generate особенно полезен с оператором For Generate, который управляет специальными случаями различно.

MAX+PLUS II включает предопределенный параметр DEVICE_FAMILY, как показано в примере выше и предварительно вычисляемую функцию USED, которую можно использовать в арифметических выражениях. Параметр DEVICE_FAMILY можно использовать для проверки текущего семейства устройств для проекта, заданного с помощью команды Device (меню Assign). Функцию USED можно использовать для проверки того, использовался ли дополнительный порт в текущем экземпляре.

Вы можете найти многочисленные примеры операторов If Generate в TDF файлах, которые реализуют LPM функции в MAX+PLUS II. Эти файлы размещаются в подкаталоге mega_lpm каталога max2lib.

1.32.Выполнение контроля выражений с помощью оператора Assert


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

Когда Вы используете оператор Assert с условиями, Вы приводите список приемлемых значений для устанавливаемых условий. Если значение не допустимо, активизируется оператор и выдается сообщение. Если Вы используете оператор Assert без условий, то оператор активизируется всегда.

Компилятор вычисляет каждое условие только один раз после того, как модуль экстрактора списка связей (Netlist Extractor) разрешил все значения параметров. Оператор не может зависеть от значения сигнала, который реализуется в устройстве. Например, если оператор Assert помещается после оператора If Then вида IF a = VCC THEN c = d, то условие оператора Assert не может зависеть от значения a.

Файл condlog2.tdf, приведенный ниже, имеет такую же функциональность как и condlog1.tdf, но использует операторы Assert в разделе Logic для сообщения какая логика сгенерирована оператором If Generate.
PARAMETERS (DEVICE_FAMILY);

SUBDESIGN condlog2

(

input_a : INPUT;

output_b : OUTPUT;

)

BEGIN

IF DEVICE_FAMILY == "FLEX8000" GENERATE

output_b = input_a;

ASSERT

REPORT "Компиляция для семейства FLEX8000"

SEVERITY INFO;

ELSE GENERATE

output_b = LCELL(input_a);

ASSERT (DEVICE_FAMILY == "FLEX10K")

REPORT "Компиляция для семейства %", DEVICE_FAMILY;

END GENERATE;

END;
1   ...   10   11   12   13   14   15   16   17   18


написать администратору сайта