小编wis*_*key的帖子

在systemverilog中正确使用"禁用fork"

我有类似于跟随伪代码的东西:

for (lets say 10 iterations)
begin
// Do some configuration changes
    fork
        begin
        ///apply input to design
        end
        begin
        while (1)
        /// at particular point update expected status / values
        end
        begin
        while (1)
        /// read status and verify with expected values
        end
    join_any
end
Run Code Online (Sandbox Code Playgroud)

从代码:只有输入的应用程序可以解除fork,因为其他2个线程正在工作while(1)我想在每次迭代之间禁用所有线程,即一旦应用了一个输入流 - 禁用所有生成的线程,直到下一次迭代开始(使用新配置)

所以我修改了上面的代码

 ....
 join_any
 disable_fork
 end
Run Code Online (Sandbox Code Playgroud)

然而,这似乎也禁用了循环以及类似的东西,我不明白,但效果是测试被挂起.有人可以解释一下原因和解决方案吗?

verification system-verilog

6
推荐指数
1
解决办法
3万
查看次数

如何在SystemVerilog程序块中监视信号

我正在尝试使用SystemVerilog了解有关测试平台的一些内容.但是我似乎无法找到监视程序块内部DUT信号的方法

考虑以下示例.信号'dummy'是DUT的输出并输入到程序块.现在我需要在程序块中监视'dummy'以在'dummy'具有特定值时引发标记'test'.

在一般模块驱动的测试平台中,我只想写@(虚拟),但程序下不允许使用块.我怎么做到这一点?

verilog system-verilog

3
推荐指数
1
解决办法
2805
查看次数

我可以从字符串派生一个寄存器名称(在 regmodel 中可用)

我有一个简单的序列

 regmodel.REGx.write (...)
Run Code Online (Sandbox Code Playgroud)

让我们考虑一下我在 regmodel viz 下有 8 个寄存器。REG0, REG1, REG2,....,REG7 我想通过 number 作为测试加参数,比如 +NUM=4

使用 $sformat 或 $psprintf,我可以创建具有正确寄存器名称的字符串变量,例如

  if ($value$plusargs ("NUM=%0d", num))
    $display ("Testcase passed %0d num", num);
  else
    num   = 0;
  $sformat (regName, "REG%0d", num);
Run Code Online (Sandbox Code Playgroud)

现在我有 regName 但我不能使用以下内容:

   regmodel.regName.write (...)
Run Code Online (Sandbox Code Playgroud)

regName 是字符串类型,regmodel 没有任何寄存器名称 regName,还有其他方法可以实现吗?我正在查看 get_name、get_full_name 但在这种情况下这些无济于事。

现在我可以有 if - else 8 次或 case 语句,但是对于大量寄存器来说真的很不方便。

system-verilog uvm

3
推荐指数
1
解决办法
2507
查看次数

如何在systemverilog断言中使用整个运算符

这是一个规范:如果信号a被置位,那么它必须被置位直到信号b被置位然后它应该在下一个时钟边沿取消置位.我正在阅读LRM的16.9.9(以及http://www.testbench.in/AS_06_SEQUENCES.html)和我理解的方式,上面提到的规范可以写成

   property a2b_notA;
        @(posedge clk) ($rose (a) ##0 (a throughout b)) |=> (~a);
   endproperty
   a_a2b_notA: assert property (a2b_notA);
Run Code Online (Sandbox Code Playgroud)

然而,这在启动后第二个时钟边沿立即失败,我无法弄清楚原因.

assertions system-verilog system-verilog-assertions

2
推荐指数
1
解决办法
8300
查看次数