R2FFT-master

所属分类:VHDL/FPGA/Verilog
开发工具:Verilog
文件大小:733KB
下载次数:15
上传日期:2017-12-05 15:49:38
上 传 者slplion
说明:  基2算法fft实现 verilog 快速傅里叶变换
(the implemention of fft in radix 2 algorithm)

文件列表:
LICENSE (1507, 2016-11-22)
doc (0, 2016-11-22)
doc\diagram (0, 2016-11-22)
doc\diagram\dmaTiming.dia (4238, 2016-11-22)
doc\diagram\dmaTiming.png (33175, 2016-11-22)
doc\diagram\inputTiming.dia (3411, 2016-11-22)
doc\diagram\inputTiming.png (27479, 2016-11-22)
doc\diagram\ramTiming.dia (5547, 2016-11-22)
doc\diagram\ramTiming.png (44606, 2016-11-22)
doc\diagram\testbenchStructure.dia (3024, 2016-11-22)
doc\diagram\testbenchStructure.png (22137, 2016-11-22)
doc\diagram\twromTiming.dia (3404, 2016-11-22)
doc\diagram\twromTiming.png (25121, 2016-11-22)
doc\sim_wave.png (86642, 2016-11-22)
hdl (0, 2016-11-22)
hdl\R2FFT.sv (12969, 2016-11-22)
hdl\R2FFT_tribuf.sv (17094, 2016-11-22)
hdl\bfp_Shifter.sv (628, 2016-11-22)
hdl\bfp_bitWidthAcc.sv (1577, 2016-11-22)
hdl\bfp_bitWidthDetector.sv (1093, 2016-11-22)
hdl\bfp_maxBitWidth.sv (674, 2016-11-22)
hdl\bitReverseCounter.sv (880, 2016-11-22)
hdl\butterflyCore.sv (4761, 2016-11-22)
hdl\butterflyUnit.sv (4962, 2016-11-22)
hdl\fftAddressGenerator.sv (2881, 2016-11-22)
hdl\radix2Butterfly.sv (7450, 2016-11-22)
hdl\ramPipelineBridge.sv (1985, 2016-11-22)
hdl\readBusMux.sv (1190, 2016-11-22)
hdl\readBusMux_tribuf.sv (4425, 2016-11-22)
hdl\twiddleFactorRomBridge.sv (2963, 2016-11-22)
hdl\writeBusMax.sv (1270, 2016-11-22)
hdl\writeBusMax_tribuf.sv (3590, 2016-11-22)
quartus (0, 2016-11-22)
quartus\dpram.qip (346, 2016-11-22)
quartus\dpram.v (9141, 2016-11-22)
quartus\dpram_bb.v (7517, 2016-11-22)
quartus\r2fft_impl.sv (4051, 2016-11-22)
... ...

# R2FFT ## Introduction R2FFT is a fully synthesizable verilog module for doing the FFT on an FPGA or ASIC. ## Key features * Configurable 2^n transform length. * Configurable data width. * Support block floating point scaling. * Small footprint implementation of single raidx-2 algorithm. * FFT_LENGTH/2 \* log2(FFT_LENGTH) clock latency. * Forward and inverse FFT. * Fully synthesizable, easy implementation to a FPGA or ASIC. ## Parameters |name |description | |:-----------|:----------------------| |FFT_LENGTH |FFT transform length, 2^n | |FFT_DW |FFT operand data bit width | |FFT_N |log2(FFT_LENGTH) | |PL_DEPTH |pipline depth (0 - 3) | ## I/O |name |direction |bit width |description | |:----------------|:-----------|:---------------|:------------------| |clk |in |1 |clock singal. | |rst |in |1 |active high synchronous reset signal. | |autorun |in |1 |FFT is run automatically if input buffer has filled.| |run |in |1 |trigger to start FFT processing.| |fin |in |1 |trigger to finish output and start next FFT frame.| |ifft |in |1 |inverse FFT if asserted. | |done |out |1 |assert by the R2FFT when there is valid data to output.| |status |out |3 |status of the R2FFT. 0:IDLE/1:INPUT_STREAM/2:FULL_BUFFER/3:RUN_FFT/4:DONE| |bfpexp |out |8 |exponent part of FFT results by block floating point scaling. signed number. output = dmadr * 2^bfpexp. | |sact_istream |in |1 |input data bus active. | |sdw_istream_real |in |FFT_DW |input data of real part. signed number.| |sdw_istream_imag |in |FFT_DW |input data of imaginary part. signed number.| |dmaact |in |1 |dma bus active. | |dmaa |in |FFT_N |dma bus address. | |dmadr_real |out |FFT_DW |dma read data. output of real part. signed number.| |dmadr_imag |out |FFT_DW |dma read data. output of imaginary part. signed number.| |twact |out |1 |twiddle rom bus active. | |twa |out |FFT_N-2 |twiddle rom address. | |twdr_cos |in |FFT_DW |twiddle rom read data. return (1<<(FFT_DW-1)) \* cos(2\*PI\*twa/FFT_LENGTH), unsinged number.| |ract_ram0 |out |1 |dual port ram0 read bus active. | |ra_ram0 |out |FFT_N-1 |dual port ram0 read address. | |rdr_ram0 |in |FFT_DW*2 |dual port ram0 read data. | |wact_ram0 |out |1 |dual port ram0 write bus active. | |wa_ram0 |out |FFT_N-1 |dual port ram0 write address. | |wdw_ram0 |out |FFT_DW*2 |dual port ram0 write data. | |ract_ram1 |out |1 |dual port ram1 read bus active. | |ra_ram1 |out |FFT_N-1 |dual port ram1 read address. | |rdr_ram1 |in |FFT_DW*2 |dual port ram1 read data. | |wact_ram1 |out |1 |dual port ram1 write bus active. | |wa_ram1 |out |FFT_N-1 |dual port ram1 write bus address. | |wdw_ram1 |out |FFT_DW*2 |dual port ram1 write data. | ## Block Diagram ![block diagram](doc/diagram/testbenchStructure.png) ### input data bus ![input data bus](doc/diagram/inputTiming.png) ### output data bus ![dma bus](doc/diagram/dmaTiming.png) ### dual port ram bus ![ram bus](doc/diagram/ramTiming.png) ### twiddle rom bus ![rom bus](doc/diagram/twromTiming.png) ## Implementation Example * 16-bit 1024 point FFT with 2 dual port ram and 1 twiddle rom. >Family : Cyclone IV E Device : EP4CE22F17C6 Timing Models : Final Total logic elements : 1,455 / 22,320 ( 7 % ) Total combinational functions : 1,297 / 22,320 ( 6 % ) Dedicated logic registers : 594 / 22,320 ( 3 % ) Total registers : 594 Total pins : 51 / 154 ( 33 % ) Total virtual pins : 0 Total memory bits : 36,918 / 608,256 ( 6 % ) Embedded Multiplier 9-bit elements : 6 / 132 ( 5 % ) * Slow 1200mV 85C Model Fmax Summary | Fmax | Restricted Fmax | Clock Name | Note | |:-----------|:----------------|:-----------|:-----| | 110.05 MHz | 110.05 MHz | clk | | ## Testbench * example of FFT and IFFT ![bench](doc/sim_wave.png)

近期下载者

相关文件


收藏者