Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники / Язык AHDL.DOC
Скачиваний:
56
Добавлен:
13.06.2014
Размер:
995.84 Кб
Скачать
        1. Оператор If Generate

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

Следующий пример демонстрирует использование оператора If Generate:

IF DEVICE_FAMILY == "FLEX8K" GENERATE

c[] = 8kadder(a[], b[], cin);

ELSE GENERATE

c[] = otheradder(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 состоит в том, что в первом случае значение булевского выражения оценивается аппаратным способом (в кремнии), а во втором случае значение набора арифметических выражений оценивается на этапе компиляции.

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

        1. Оператор For Generate.

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

CONSTANT NUM_OF_ADDERS = 8;

SUBDESIGN 4gentst

(

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

cin : INPUT;

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

)

VARIABLE

carry_out[(NUM_OF_ADDERS+1)..1] : NODE;

BEGIN

carry_out[1] = cin;

FOR i IN 1 TO NUM_OF_ADDERS GENERATE

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

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

END GENERATE;

cout = carry_out[NUM_OF_ADDERS+1];

END;

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

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

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

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

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

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