Язык AHDL


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



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

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

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



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