如何在SystemVerilog测试台中于时钟沿前后调度驱动信号
SystemVerilog测试台中DUT输入信号的时序驱动规范问题
我一直想了解如何在SystemVerilog测试台中正确地对被测器件(DUT)的输入信号进行时序驱动,例如以下是一个带有clk和rst信号的简单时序DUT的测试台片段:
always #1 clk = ~clk; initial begin clk = 0; rst = 1; @(posedge clk); @(posedge clk); rst = 0; #50 $finish; end
我必须使用两次@(posedge clk)才能确保rst信号被DUT读取,否则仅用一次@(posedge clk)会导致器件复位失败,输出在整个仿真过程中保持为X;另一种临时解决方案是使用@(negedge clk)来时序化rst的拉低操作。
尽管这些临时方案可行,但感觉不够规范。我已研读IEEE std 1800-2017第4章中关于仿真时隙不同区域的事件调度内容,并尝试了阻塞赋值(blocking assignments)和非阻塞赋值(non blocking assignments)的多种变体,但均未解决问题。
因此我想请教:是否可以以及如何调度信号,使其恰好在时钟沿之后或之前被驱动。
内容的提问来源于stack exchange,提问作者Benjamín Panatt
相关产品推荐
相关产品推荐

