vivado后时序仿真遇到的奇怪问题

最近在做的项目,其中进行数据仿真的时候会遇到一些奇怪的问题或者自己犯一些错误,在此进行积累,希望能对自己有所警示,如对你也有所帮助,说明这篇文章还是有用的。

        在进行后时序仿真的时候,将复位信号置为高电平(此处低电平复位)后,必须多延几个时钟,否则会导致奇怪问题的发生,具体如下:

always @(posedge i_clk or negedge i_rst_n)
begin
    if(!i_rst_n)
    begin
        cnt <= 8'd0;
    end
    else
    begin
        if(CRC_en)
        begin
            cnt <= cnt + 1'd1;
        end
        else
        begin
            cnt <= 8'd0;
        end
    end
end

        该部分代码是CRC模块中的代码,重点关注其中的cnt信号,它在CRC_en使能的时候才进行计数。

initial 
begin
    #29;
    i_rst_n = 1;
    #25;
    for(i=0;i < 136;i = i+1)
    begin
        i_data = memb_crc_data[i];
        CRC_en = 1'd1;
        #10;
    end
    CRC_en = 1'd0;
end

always #5  i_clk = ! i_clk ;

        该图则是对应的tb文件中CRC_en的代码(时钟周期10ns),此时有意思的事情就来了:

        在后时序仿真图中可以看到i(tb里的计数器)和cnt计数器相差很多,然而在行为级仿真(下图)中可以看到两个信号相差没多少。

        本人在无意中将rst_n置1后的延时周期增加了,于是便正常了,见下两张图:

initial 
begin
    #29;
    i_rst_n = 1;
    #75;
    for(i=0;i < 136;i = i+1)
    begin
        i_data = memb_crc_data[i];
        CRC_en = 1'd1;
        #10;
    end
    CRC_en = 1'd0;
end

always #5  i_clk = ! i_clk ;

        推测可能是i_rst_n置1后需要一段时间信号才能稳定,因此影响到了CRC_en信号进而cnt信号没有正常进行计数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值