如何在 systemVerilog 测试台中的时钟沿之前或之后安排信号

问题描述 投票:0回答:1

我一直想知道如何在 systemVerilog 测试平台上正确计时被测设备的输入信号驱动时间,例如,这里是带有输入 clk 和 rst 信号的简单顺序待测试器件的测试平台的摘录:

always #1 clk = ~clk;
initial begin 
    clk = 0;
    rst = 1;
    @(posedge clk);
    @(posedge clk);
    rst = 0;
    #50 $finish;
end

我必须使用 @(thoughtge clk) 两次以确保第一个信号被 dut 读取,否则使用单个 @(thoughtge clk) 设备无法重置并且其输出在模拟期间保持 X,另一个解决方法是使用 @(negedge clk) 来计时 rst 的降低。

尽管所描述的解决方法看起来很老套,而且不是正确的做事方式,但我一直在阅读 IEEE 标准 1800-2017 第 4 章中模拟时隙不同区域中事件的调度,并尝试了不同的变体阻塞和非阻塞分配都无济于事。

所以我想问如何(如果可能的话)安排在时钟边缘之后和之前的信号驱动。

simulation system-verilog test-bench
1个回答
0
投票

断言复位超过一个时钟周期是完全正常的,特别是如果不是每个逻辑都与复位信号相关联的话。

您应该对测试平台信号使用非阻塞分配,以避免 DUT 中出现竞争。同样的规则适用于您设计中的信号。

© www.soinside.com 2019 - 2024. All rights reserved.