|
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. |