Язык AHDL


Оператор 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, что позволяет различным образом обрабатывать особые ситуации, например, младший значащий бит в многокаскадном умножителе. Этот  оператор может также использоваться для тестирования значений параметров, как показано в последнем примере.



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