【问题标题】:Using assign inside $test$plusargs in systemverilog在 systemverilog 的 $test$plusargs 中使用 assign
【发布时间】:2020-07-11 08:34:55
【问题描述】:

在我的代码中,我想为我的所有测试使用 assign 语句进行一些连接,除了我在测试列表中添加了运行时参数“HB_CONN_DISABLE”的一个测试。当我编写如下代码时,出现以下错误

  if (!$test$plusargs("HB_CONN_DISABLE"))  
  begin
  assign iol.hb_valid_in = dp_if_tx_inject.hb_bar_val_in;
  assign iol.hb_in = dp_if_tx_inject.heartbeat_in;
  end

 Error-[V2KGEUV] Unknown or bad value for genvar
 -I-:/nfs/hd/disks/mgr_0240/...............soc_post.sv, 543
 Instance/Generate block name: iolc_tb
-I-:  Elaboration time unknown or bad value encountered for generate if-statement 
-I-:  condition expression.
-I-:  Please make sure it is elaboration time constant.

我也尝试了类似下面的方法,但在这种情况下它无法识别此行中的 hb_bar_param if(hb_bar_param==0) 可能是因为到那时参数还没有获得值

  initial begin
  if ($test$plusargs("HB_BAR_TI_CONN_DISABLE"))  
  begin
  parameter hb_bar_param=1;
  end
  else
  begin
  parameter hb_bar_param=0;
  end
  end

 if(hb_bar_param==0)
 begin
 assign statements......
 end

我也尝试过使用像下面这样的三元运算符的赋值

 assign iol.hb_valid_in = ($test$plusargs("...somthing..")) ? (... some value ...) : (... some other value ...);

但在这种情况下,如果 testplus args 为假,我仍然会分配一些东西,但对我来说,要求是如果 testplus args 存在,我根本不想分配,请帮我解决这个问题

基本上,除了我添加了 testplus args 的一个测试之外,我的所有测试都需要以下代码。这是非法的还是有任何方法可以做到这一点。

 assign iol.hb_valid_in = dp_if_tx_inject.hb_bar_val_in;
 assign iol.hb_in = dp_if_tx_inject.heartbeat_in;

【问题讨论】:

  • 嗨,我刚刚在问题的末尾添加了两个分配语句。所以基本上你的意思是我无法根据 testplusarg 决定分配是否发生?

标签: verilog system-verilog uvm


【解决方案1】:

parameter 是在运行程序之前定义的编译时间(精化时间)构造。

在您的情况下,模块代码中的第一级成员 if 语句是 generate 构造,这也是编译时的事情。

Plusargs 在您运行时传递给已编译的模型,$test$plusargs 是在运行时执行的动态函数。因此它不能用于修改生成的部分。

assign 是连续分配,用于分配连线。因此,总是必须分配 lhs。因此,你想要不赋值的东西是用这个语句是不可能的。

但是,如果您将hb_valid_in 声明为reglogic,您可以创建如下的latch 语句:

always @*
   if (!$test$plusargs("HB_CONN_DISABLE"))
      iol.hb_valid_in = some_value;

因此,仅当条件为真时,它才会将“some_value”分配给“hb_valid_in”。否则不会。

这一切都假设您创建了一个不可综合的测试台模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多