打印
[verilog]

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

[复制链接]
1222|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 中 计数会提前一个周期计数,如果把如果把= 改为 <= 则 仿真结果,两边计数就一致了

求解释!!

5.jpg (174.81 KB )

5.jpg

相关帖子

沙发
YingziSeek| | 2015-3-18 07:52 | 只看该作者

使用特权

评论回复
板凳
littbi| | 2017-12-17 11:17 | 只看该作者
阻塞赋值和非阻塞赋值的差别,第一个的值直接给了m_axi_mm2s_rvalid,不用等待上升沿,所以提前了一个周期

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

131

帖子

3

粉丝