实现 xilinx fifo 核心时的仿真错误
simulation errors in implementing xilinx fifo core
我已经从 Xilinx 核心生成器为 FIFO 生成了一个核心 IP。我在模拟设计时遇到了一些错误。
在刺激中,我的时钟在每个 #1 时打开,写标志也设置为 #1,然后是 din,再次在 #1 取消设置写标志。随后是带有读取标志的相同内容
问题是:
1. Full flag 设置早于数据被 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;
模拟图像link:(完整标志应在 1024 个条目后升起)
我认为您遇到了时间问题。如果这是与 clk
上升沿同步的 FIFO,它可能无法正确锁存您的 wr_en
或 rd_en
脉冲。
对于初学者,我会尝试将 wr_en
保持在您想要执行写入的 clk
周期数的简单水平。此外,为避免 initial
和 always
块之间的竞争条件,请将 clk
生成部分作为 initial
块的一部分,并确保 wr_en
和 rd_en
信号在 clk
.
的 in 活动(通常是下降)边缘发生变化
我已经从 Xilinx 核心生成器为 FIFO 生成了一个核心 IP。我在模拟设计时遇到了一些错误。
在刺激中,我的时钟在每个 #1 时打开,写标志也设置为 #1,然后是 din,再次在 #1 取消设置写标志。随后是带有读取标志的相同内容
问题是: 1. Full flag 设置早于数据被 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;
模拟图像link:(完整标志应在 1024 个条目后升起)
我认为您遇到了时间问题。如果这是与 clk
上升沿同步的 FIFO,它可能无法正确锁存您的 wr_en
或 rd_en
脉冲。
对于初学者,我会尝试将 wr_en
保持在您想要执行写入的 clk
周期数的简单水平。此外,为避免 initial
和 always
块之间的竞争条件,请将 clk
生成部分作为 initial
块的一部分,并确保 wr_en
和 rd_en
信号在 clk
.