fft代码
module fft(
input wire clk,
input wire [15:0] din,
input wire last,
input wire s_axis_data_tvalid,
output wire [22:0] m_axis_data_tdata_r,
output wire [22:0] m_axis_data_tdata_i,
output wire [7:0] index
);
wire [31:0]s_axis_data_tdata;
wire [7:0]s_axis_config_tdata = {7'b0,1'b1};//NO need run time change length!
wire s_axis_config_tvalid = 1;
wire s_axis_config_tready ;
wire s_axis_data_tready ;
//wire s_axis_data_tlast = 0;
//wire s_axis_data_tvalid = 1 ;
//wire [7:0] index;
wire m_axis_data_tvalid;
wire m_axis_data_tready = 1;
wire m_axis_data_tlast=0;
wire event_frame_started;
wire event_tlast_unexpected;
wire event_tlast_missing;
wire event_status_channel_halt;
wire event_data_in_channel_halt;
wire event_data_out_channel_halt;
wire [47:0] m_axis_data_tdata;
assign s_axis_data_tdata = {16'b0,din};
// assign m_axis_data_tdata_r = m_axis_data_tdata[15:0];
// assign m_axis_data_tdata_i = m_axis_data_tdata[31:16];
assign m_axis_data_tdata_r = m_axis_data_tdata[22:0];
assign m_axis_data_tdata_i = m_axis_data_tdata[46:24];
xfft_0 fft_test (
.aclk(clk), // input wire aclk
.s_axis_config_tdata(s_axis_config_tdata), // input wire [7 : 0] s_axis_config_tdata
.s_axis_config_tvalid(s_axis_config_tvalid), // input wire s_axis_config_tvalid
.s_axis_config_tready(s_axis_config_tready), // output wire s_axis_config_tready
.s_axis_data_tdata(s_axis_data_tdata), // input wire [31 : 0] s_axis_data_tdata
.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid
.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready
.s_axis_data_tlast(last), // input wire s_axis_data_tlast
// .m_axis_data_tdata(m_axis_data_tdata), // output wire [31 : 0] m_axis_data_tdata
.m_axis_data_tdata(m_axis_data_tdata), // output wire [47 : 0] m_axis_data_tdata
.m_axis_data_tuser(index), // output wire [7 : 0] m_axis_data_tuser
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tready(m_axis_data_tready), // input wire m_axis_data_tready
.m_axis_data_tlast(m_axis_data_tlast), // output wire m_axis_data_tlast
.event_frame_started(event_frame_started), // output wire event_frame_started
.event_tlast_unexpected(event_tlast_unexpected), // output wire event_tlast_unexpected
.event_tlast_missing(event_tlast_missing), // output wire event_tlast_missing
.event_status_channel_halt(event_status_channel_halt), // output wire event_status_channel_halt
.event_data_in_channel_halt(event_data_in_channel_halt), // output wire event_data_in_channel_halt
.event_data_out_channel_halt(event_data_out_channel_halt) // output wire event_data_out_channel_halt
);
endmodule
tb代码
module tb_fft();
reg clk;
reg [15:0] din;
reg [15:0] stimulus[1:32];//32位
integer count;
integer i;
integer file;
wire [15:0] data_real;
wire [15:0] data_imag;
wire [7:0] index;
reg last;
reg s_axis_data_tvalid;
initial begin
clk = 0;
din = 0;
count = 0;
last = 0;
s_axis_data_tvalid = 0;
#10;
$readmemb("C:/Users/hp/OneDrive/桌面/FFT/data_before_fft.txt", stimulus);
file = $fopen("C:/Users/hp/OneDrive/桌面/FFT/data_before_fft.txt", "w");
#10;
for(i = 1;i<=32;i = i+1)begin
s_axis_data_tvalid = 1;
din = stimulus[i];
#4;
end
last = 1;
s_axis_data_tvalid = 0;
din = 16'b0;
end
always # 2 clk = ~clk;
always @(posedge clk) begin
$fwrite(file,"%h\n", data_real); //data_o为需要保存的信号数据
if(count > 2500)
$fclose(file);
count = count + 1;
end
fft fft_test(
.clk(clk),
.din(din),
.last(last),
.s_axis_data_tvalid(s_axis_data_tvalid),
.m_axis_data_tdata_r(data_real),
.m_axis_data_tdata_i(data_imag),
.index(index)
);
endmodule
xfft_0 your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_config_tdata(s_axis_config_tdata), // input wire [7 : 0] s_axis_config_tdata
.s_axis_config_tvalid(s_axis_config_tvalid), // input wire s_axis_config_tvalid
.s_axis_config_tready(s_axis_config_tready), // output wire s_axis_config_tready
.s_axis_data_tdata(s_axis_data_tdata), // input wire [31 : 0] s_axis_data_tdata
.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid
.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready
.s_axis_data_tlast(s_axis_data_tlast), // input wire s_axis_data_tlast
.m_axis_data_tdata(m_axis_data_tdata), // output wire [31 : 0] m_axis_data_tdata
.m_axis_data_tuser(m_axis_data_tuser), // output wire [7 : 0] m_axis_data_tuser
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tready(m_axis_data_tready), // input wire m_axis_data_tready
.m_axis_data_tlast(m_axis_data_tlast), // output wire m_axis_data_tlast
.event_frame_started(event_frame_started), // output wire event_frame_started
.event_tlast_unexpected(event_tlast_unexpected), // output wire event_tlast_unexpected
.event_tlast_missing(event_tlast_missing), // output wire event_tlast_missing
.event_status_channel_halt(event_status_channel_halt), // output wire event_status_channel_halt
.event_data_in_channel_halt(event_data_in_channel_halt), // output wire event_data_in_channel_halt
.event_data_out_channel_halt(event_data_out_channel_halt) // output wire event_data_out_channel_halt
);
你把 xfft_0 ip 的 xfft_0 .veo 文件贴出来
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!