我已经从Xilinx核心生成器为FIFO生成了核心IP。我在模拟设计时遇到了一些错误。
在刺激中,我的时钟开启每个#1,写入标志也设置为#1,然后是din,再次写入标志在#1处未设置。读取标志后跟相同的事情
问题是: 1.完整标志的设置早于数据填充FIFO。 2.读取不会从第一个指针开始,而是从第4个读指针开始。
有什么建议吗?
initial begin
clk = 0;
rst = 0;
rst = 1;
#1 rst = 0;
wr_en = 0;
rd_en = 0;
for (i=0; i<1024; i=i+1) begin : wr_loop
#1 wr_en = 1;
din <= i;//$urandom_range(5,14);
#1 wr_en = 0;
end
for (j=0; j<1024; j=j+1) begin : rd_loop
#1 rd_en = 1'b1;
#1 rd_en = 1'b0;
end
#900000 $finish;
end
always #1 clk = ~clk;
模拟图像链接:(满足标志应在1024个条目后提升)
答案 0 :(得分:0)
我认为你有时间问题。如果这是与clk
上升沿同步的FIFO,则可能无法正确锁定wr_en
或rd_en
个脉冲。
对于初学者,我会尝试将wr_en
设置为您想要执行写入的clk
周期数。另外,为了避免initial
和always
块之间的竞争条件,请clk
阻止initial
生成wr_en
块,并确保rd_en
和{{1}信号在 in 活跃(通常是下降)的clk
边缘发生变化。