Verilog Delta循环模拟,当灵敏度列表中的两个输入同时改变,并且逻辑由这两个输入调节时会发生什么
我有一段代码如下:Verilog Delta循环模拟,当灵敏度列表中的两个输入同时改变,并且逻辑由这两个输入调节时会发生什么,verilog,Verilog,我有一段代码如下: always_ff @(posedge X or posedge ~Y) begin if (~Y) Z <= '0; else Z <= 1'b1;
always_ff @(posedge X or posedge ~Y)
begin
if (~Y) Z <= '0;
else Z <= 1'b1;
end
始终\u ff@(posedge X或posedge~Y)
开始
如果在Verilog等事件驱动模拟中(~Y)Z,则不存在“同时更改”这样的事情,一个必须在另一个之前,有时顺序是未定义的
您的问题很可能只需要灵敏度列表中的一个posedge
,这是合成工具所必需的 嗨,Dave,感谢您快速回答,用于合成:这将被合成为一个异步复位触发器,~Y作为复位,X作为时钟。在硅中,如果这两者同时发生变化,这将使触发器处于亚稳态。但根据您的上述评论,在模拟中,Z的值将是不可预测/随机的?有时可能是0,有时可能是1。如果X和Y具有可预测的更改顺序,那么Z是可预测的。如果不是这样,那么Z是不可预测的。不可预测性与随机性不同。在硬件中,也会出现竞争条件/计时错误。如果异步复位寄存器要可靠工作,复位和时钟不得同时改变。(就像在D输入和时钟同时改变的情况下有一个竞争条件)你的“经典”异步复位触发器的例子根本不是一个触发器。这里没有时钟。@Kavin,谢谢你指出,这是我这边的失误,我无法编辑这个问题,你可以这样理解:`总是_ff@(posedge clk或posedge rst)
always_ff @(posedge rst)
begin
if (rst) Z <= '0;
else Z <= 1'b1;
end