同段代码 在 test bench和在工程模块中结果不一样

2020-02-02 11:08发布

本帖最后由 pingis58 于 2015-3-17 17:43 编辑

如题 ,测试功能:  判断信号变化,计数。
  百思不得其解,求高手解答。

在test bench 中的代码如下:
always @(posedge Bus2IP_Clk) begin
                if(m_axi_mm2s_arready&m_axi_mm2s_arvalid)begin
                        m_axi_mm2s_rvalid = 1;  //已在 初始化模块中初始化 为0   
                end                                          //把= 改为 <= 则 仿真结果  test bench和uut中的计数就一致了
                else if(sendok) begin
                        m_axi_mm2s_rvalid = 0;
                end                 
        end
        reg        [4:0] testnum;
        always @(posedge Bus2IP_Clk) begin
                if(m_axi_mm2s_rvalid)begin     //已在 初始化模块中初始化 为 0
                        testnum <= testnum + 1;
                end         
        end


在项目工程中,但被test bench 以uut实例化调用的代码     其中除 testc   其他值均从test bench中传入
always @(posedge Bus2IP_Clk)
        begin
                if( Bus2IP_Resetn == 1'b0 )
                begin
                        testc <= 0;
                end
                else if(m_axi_mm2s_rvalid)
                begin
                        testc <= testc +1;
                end        
        end
仿真图为:


在test bench 中 计数会提前一个周期计数,如果把如果把= 改为 <= 则 仿真结果,两边计数就一致了

求解释!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
YingziSeek
1楼-- · 2020-02-02 15:34
 精彩回答 2  元偷偷看……
littbi
2楼-- · 2020-02-02 18:32
阻塞赋值和非阻塞赋值的差别,第一个的值直接给了m_axi_mm2s_rvalid,不用等待上升沿,所以提前了一个周期

一周热门 更多>