实现 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_enrd_en 脉冲。

对于初学者,我会尝试将 wr_en 保持在您想要执行写入的 clk 周期数的简单水平。此外,为避免 initialalways 块之间的竞争条件,请将 clk 生成部分作为 initial 块的一部分,并确保 wr_enrd_en 信号在 clk.

in 活动(通常是下降)边缘发生变化