|
|
When you wish to use multiple blocks of logic that are very similar, you can use the For Generate Statement to iteratively generate logic based on a numeric range delimited by arithmetic expressions.
The iter_add.tdf file shown below shows an example of iterative logic generation:
CONSTANT NUM_OF_ADDERS = 8;
SUBDESIGN iter_add
(
a[NUM_OF_ADDERS..1], b[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]; % Full Adder %
carryout[i+1] = a[i] & b[i] # carryout[i] & (a[i] $ b[i]);
END GENERATE;
cout = carryout[NUM_OF_ADDERS+1];
c[] = sum[];
END;
In iter_add.tdf, the For Generate Statement is used to instantiate full adders that each perform one bit of the NUM_OF_ADDERS-bit (that is, 8-bit) addition. The carryout of each bit is generated along with each full adder.
| The If Generate Statement is especially useful with For Generate Statements that handle special cases differently, for example, the first and last stages of a multiple stage multiplier. See Using Conditionally Generated Logic for more information. |
|
- PLDWorld - |
|
|
| Created by chm2web html help conversion utility. |