Verilog中如何同时等待电平敏感事件和边沿敏感事件?
In Verilog, how to wait for level-sensitive and edge-sensitive events simultaneously?
在Verilog中编写测试台时,在"task"中我需要等待这样的事件发生,即:而signal_a是1'b1,signal_b 有 posedge。但是,不幸的是,我尝试了但没有找到好的解决方案:
@(tb_hready and posedge tb_hclk) ;//(1)
wait(tb_hready) @(posedge tb_hclk) ;//(2)
wait(tb_hready && posedge tb_hclk) ;//(3)
if(tb_hready) @(posedge tb_hclk) ;//(4)
(1)是语法错误;
(2) 语法不错,但是会先等tb_hready走高,然后再去posege即使tb_hready又低了; -- 这不是我想要的。
(3)是语法错误;
(4) 语法很好,但没有实现我想要的,似乎在这样的表达式中它没有 "wait" for tb_hready 到完全变高了。
我觉得这应该很容易,但我就是得不到我想要的东西,Google 也没什么帮助。有人有什么建议吗?谢谢~~
@(posedge tb_hclk iff tb_hready)
在Verilog中编写测试台时,在"task"中我需要等待这样的事件发生,即:而signal_a是1'b1,signal_b 有 posedge。但是,不幸的是,我尝试了但没有找到好的解决方案:
@(tb_hready and posedge tb_hclk) ;//(1)
wait(tb_hready) @(posedge tb_hclk) ;//(2)
wait(tb_hready && posedge tb_hclk) ;//(3)
if(tb_hready) @(posedge tb_hclk) ;//(4)
(1)是语法错误;
(2) 语法不错,但是会先等tb_hready走高,然后再去posege即使tb_hready又低了; -- 这不是我想要的。
(3)是语法错误;
(4) 语法很好,但没有实现我想要的,似乎在这样的表达式中它没有 "wait" for tb_hready 到完全变高了。
我觉得这应该很容易,但我就是得不到我想要的东西,Google 也没什么帮助。有人有什么建议吗?谢谢~~
@(posedge tb_hclk iff tb_hready)