AN 464: DFT/IDFT Reference Design

ID 683644
Date 5/30/2018
Public

Functional Description for the DFT/IDFT Reference Design

The input is an Avalon-ST sink interface with a ready latency of 1. The design does not use the eop signal at the input as it expects packets of exactly length. The transform commences within the design after you provide all length samples.
Figure 1. Block Diagram

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.

Figure 2. Example of DFT IQ samples output sequence for block size 3,240
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.

Table 1.  Transform Sizes
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.