SystemVerilog:如何断言模块内部的信号



我是Verilog的新手(当然也包括SystemVerilog)。我有一个RTL模块来测试它的功能。我试图使用断言来做到这一点,而不是应用刺激然后观察它,以便我的模块可以重用。

无论如何,我的断言看起来像这样:

always @(posedge start_test)
  if (read == 1'b1 && test_type == 3'b001 && read_enable_pulse == 1'b0)
    assert property(read_test)
        $display("@%0dn read fail injection passed",$time)
      else ("@%0dn read fail injection passed",$time);
property read_test;
  @(posedge tckg) start_test |-> ##8 ((test_done == 1'b1) && (test_pass == 1'b0));
endproperty

在这种情况下,我有一个模块内部的read_enable_pulse信号和

我想从测试台级别看到它而不绑定(我不完全知道如何)它。

我试图把testbenchmodule.mymodule.read_enable_pulseread_enable_pulse的地方去通过层次结构,但它似乎不工作。

有人知道怎么做吗?

既然您已经在testbenchmodule(我假设这是您编写断言的地方),请尝试引用mymodule.read_enable_pulse。这应该可以工作,因为Verilog中允许分层路径。

如果这不起作用(由于模拟器的限制),那么几乎所有的模拟器都提供了可用于监视内部信号的系统功能。例如,《Cadence》拥有$nc_mirror,而《Mentor》拥有$init_signal_spy

查看您的模拟器手册以获取更多信息。

最新更新