Язык AHDL

       

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


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



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