Functional Description for the DFT/IDFT Reference Design
The DFT 3P3R block decomposes the input block into three sub-blocks and performs three parallel DFT operations. The DFT results feed a parallel radix-3 pipelined engine for the final radix-3 pass that computes the final DFT result. The DFT radix-3 engine output 3 IQ samples per clock cycle.
IQ output 1: [DATA 0] [DATA 1] [DATA 2] ... [DATA 1079]
IQ output 2: [DATA 1080] [DATA 1081] [DATA 1082] ... [DATA 2159]
IQ output 3: [DATA 2160] [DATA 2161] [DATA 2162] ... [DATA 3239]
You can configure the number of input IQ samples per clock cycle for the Avalon-ST sink interface with parameter iqinpercc that has values of 1 and 3. Setting the IQ samples per clock cycle to 3 reduces the block load latency on the DFT reference design, provided that the targeted system can sustain the DFT input throughput.
You can configure the output Avalon-ST interface to come from the DFT engine from an optional buffer. The buffer depth is user selectable. With the buffer there is a ready signal input, which prevents data streaming out as soon as the DFT engine finishes a transform. When the DFT engine finishes a transform is determined by: when data is input to the design, and the transform time for the current length.
The reference design uses an Avalon-ST interface to output the transformed block into three parallel IQ sub-blocks.
Transform Size | Block-to-Block Latency (cycles) | Input-to-Output Latency | ||
---|---|---|---|---|
1 IQ input sample/clock cycle | 3 IQ input samples/clock cycle | (cycles) 1 IQ input sample/clock cycle | (µs) 1 IQ input sample/clock cycle | |
12 | 63 | 55 | 91 | 0.185 |
24 | 118 | 102 | 154 | 0.313 |
36 | 143 | 119 | 187 | 0.380 |
48 | 168 | 136 | 220 | 0.447 |
60 | 193 | 153 | 253 | 0.514 |
72 | 266 | 218 | 334 | 0.679 |
96 | 323 | 259 | 407 | 0.828 |
108 | 351 | 279 | 443 | 0.901 |
120 | 380 | 300 | 480 | 0.976 |
144 | 436 | 340 | 552 | 1.123 |
180 | 521 | 401 | 661 | 1.344 |
192 | 549 | 421 | 697 | 1.418 |
216 | 702 | 558 | 866 | 1.762 |
240 | 662 | 502 | 842 | 1.713 |
288 | 895 | 703 | 1107 | 2.252 |
300 | 803 | 603 | 1023 | 2.081 |
324 | 991 | 775 | 1227 | 2.496 |
360 | 1088 | 848 | 1348 | 2.742 |
384 | 1152 | 896 | 1428 | 2.905 |
432 | 1280 | 992 | 1588 | 3.230 |
480 | 1409 | 1089 | 1749 | 3.558 |
540 | 1569 | 1209 | 1949 | 3.965 |
576 | 1665 | 1281 | 2069 | 4.209 |
600 | 1730 | 1330 | 2150 | 4.374 |
648 | 2098 | 1666 | 2550 | 5.188 |
720 | 2050 | 1570 | 2550 | 5.188 |
768 | 2178 | 1666 | 2710 | 5.513 |
864 | 2747 | 2171 | 3343 | 6.801 |
900 | 2531 | 1931 | 3151 | 6.410 |
960 | 2691 | 2051 | 3351 | 6.817 |
972 | 3071 | 2423 | 3739 | 7.607 |
1080 | 3396 | 2676 | 4136 | 8.414 |
1152 | 3612 | 2844 | 4400 | 8.951 |
1200 | 3332 | 2532 | 4152 | 8.447 |
1296 | 4044 | 3180 | 4928 | 10.026 |
1440 | 4477 | 3517 | 5457 | 11.102 |
1500 | 4133 | 3133 | 5153 | 10.483 |
1536 | 4765 | 3741 | 5809 | 11.818 |
1620 | 5017 | 3937 | 6117 | 12.445 |
1728 | 5341 | 4189 | 6513 | 13.250 |
1800 | 5558 | 4358 | 6778 | 13.789 |
1920 | 5918 | 4638 | 7218 | 14.685 |
1944 | 6662 | 5366 | 7978 | 16.231 |
2160 | 6638 | 5198 | 8098 | 16.475 |
2304 | 7070 | 5534 | 8626 | 17.549 |
2400 | 7359 | 5759 | 8979 | 18.267 |
2592 | 8823 | 7095 | 10571 | 21.506 |
2700 | 8259 | 6459 | 10079 | 20.505 |
2880 | 8799 | 6879 | 10739 | 21.848 |
2916 | 9903 | 7959 | 11867 | 24.143 |
3000 | 9160 | 7160 | 11180 | 22.745 |
3072 | 9375 | 7327 | 11443 | 23.280 |
3240 | 10984 | 8824 | 13164 | 26.782 |
If you turn on the output buffer, the ready input controls the data flow out of the buffer. The buffer always fills in bursts as the DFT engine completes individual transforms so you must ensure the buffer depth is adequate for your system to avoid overflow. The design behaves unpredictably if the buffer overflows.
The design provides the sop and eop signals at the output, which you can optionally use.
To perform an IDFT, set the idft_mode parameter to 1.
The design does not perform the 1/length scaling for an IDFT.