Vivado联合modelsim仿真时modelsim进行异步FIFO仿真
1.生成fifo IP核如图所示,8位数据输入,深度1024,8位数据输出
2.编写testbench代码,进行仿真测试程序如下
module fifo_test_tb;
reg Rst;
reg Clk_wr;
reg Wr_en;
reg [7:0] Data_in;
reg Clk_rd;
reg Rd_en;
wire [7:0] Data_out;
wire Full;
wire Empty;
initial Clk_wr=0;
always #(wrclk_period/2) Clk_wr=~Clk_wr; initial Clk_rd=0; always #(
rdclk_period/2) Clk_rd=~Clk_rd;
initial
begin
Rst=0;
#22;
Rst=1;
#17;
Rst=0;
end
integer i;
initial begin
Data_in = 0;
Rd_en = 0;
Wr_en = 0;
#(`wrclk_period*20 + 1);
for (i=0;i <= 255 ;i = i + 1)begin
Wr_en = 1;
Data_in = i + 1024;
#`wrclk_period;
end
Wr_en = 0;
#(`rdclk_period*20);
for (i=0;i <= 255 ;i = i + 1)begin
Rd_en = 1;
#`rdclk_period;
end
Rd_en = 0;
#(`rdclk_period*20);
$stop;
end
fifo_test u0(
.Rst(Rst),
.Clk_wr(Clk_wr),
.Wr_en(Wr_en),
.Data_in(Data_in),
.Clk_rd(Clk_rd),
.Rd_en(Rd_en),
.Data_out(Data_out),
.Full(Full),
.Empty(Empty)
);
endmodule
3.仿真结果如下,在50M时钟下写入256个数据再用100M时钟读取出来结果正确。
仿真目的:能够直观的看到不同速率下数据的传递,解决一些跨时钟域问题。接下来要用fifo解决系统速率100M,AD/50M数据采集情形下,将AD采样一帧数据中最大值发送到上位机的问题。暂时解决办法为利用时钟相位偏移直接用100M采50M的方法,但是存在不稳定的问题。需要改为用fifo的方案。
需要的可以下载测试学习。
链接:https://pan.baidu.com/s/1HfS_geLZNRduJ-4G_TAlJg
提取码:1234