今天下午将项目又推荐了一些,对之前的代码进行了下改进,使得代码更具扩展性与可维护性吧。
项目中引入了simple dual port ram,功能是对FFT处理后的数据进行转置,即按列将数据再送入FFT进行运算。
代码完全通过IP核自带控制信号进行激励与控制,使得代码的扩展性得到了加强。这里通过fft_dv来控制ram的写使能与读使能。
主模块:
module fft2d_16_top(
input clk,
input rst_n,
input fifo_wr_en,
input [63:0] srio_wr_data,
output [31:0] srio_rd_data_re,
output [31:0] srio_rd_data_im,
output [31:0] test_re,
output [31:0] test_im,
output test_fft_rfd,
output test_fft_dv,
output [4:0] test_state,
output wire [63:0] test_count,
/*move*/
output reg[7:0] ram1_addra,
output reg[7:0] ram1_addrb,
output reg[31:0] ram1_dina_re,
output reg[31:0] ram1_dina_im,
output reg ram1_ena,
output reg ram1_enb
);
parameter S_IDLE = 5'h0,
S_FFT_START = 5'h1,
S_FFT_DATA = 5'h2,
S_FFT_START2 = 5'h3;
wire [4:0] s_state;
/*FFT 参数*/
reg fft_start;//input
reg fft_fwd_inv;
reg fft_fwd_inv_we;
wire fft_rfd;//output
wire fft_dv;
wire [3:0] fft_xn_index;
wire [31:0] fft_xn_re;
wire [31:0] fft_xn_im;
wire [3:0] fft_xk_index;
wire [31:0] fft_xk_re;
wire [31:0] fft_xk_im;
wire [4:0] fft_xk_re_ex;
wire [4:0] fft_xk_im_ex;
/*fifo recv*/
reg fifo_rd_en;
wire fifo_recv_full;
wire fifo_recv_alempty;
wire [7:0] fifo_data_count;
AddrConGen addrConGen (
.clk(clk),
.rst_n(rst_n),
.fifo_recv_full(fifo_recv_full),
.fifo_data_count(fifo_data_count),
.fft_dv(fft_dv),
.s_state(s_state),
.count(test_count)
);
fifo_i64_o64 recv_fifo (
.clk(clk), // input clk
.r