Delta周期模拟,当灵敏度列表中的两个输入同时更改并且使用这两个输入调节逻辑时会发生什么

时间:2019-02-26 16:49:45

标签: verilog

我有一段代码:

always_ff @(posedge X or posedge ~Y)              
        begin                                                
         if (~Y)  Z <= '0;                                  
         else      Z <=  1'b1;                                  
        end   

X和Y都同时上升(〜Y下降)。 我以Z为1,但在模拟中Z为0。

因为当我们有异步RST Flop的经典代码时:

always_ff @(posedge rst)              
        begin                                                
         if (rst)  Z <= '0;                                  
         else      Z <=  1'b1;                                  
        end 

我们看到Z会在rst变为1时立即变为0。

(我认为正在发生的事情:当〜Y下降时,它不会触发此代码块的仿真。因此在增量周期仿真中它仍为先前的值0)

这里发生了什么,有人可以详细解释。

1 个答案:

答案 0 :(得分:1)

在诸如Verilog之类的事件驱动的模拟中,没有“同时更改”之类的东西,一个必须先于另一个,并且有时该顺序是不确定的。

您的问题很可能只需要灵敏度列表中的一个posedge,而这是综合工具所必需的。