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