在systemverilog中使用assign inside$test$plusargs

在systemverilog中使用assign inside$test$plusargs,verilog,system-verilog,uvm,Verilog,System Verilog,Uvm,在我的代码中,我想为所有测试使用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

在我的代码中,我想为所有测试使用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==0),它无法识别此行中的hb_bar_param,可能是因为此时参数没有得到值

  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参数为false,我仍然会赋值,但对我来说,要求是如果testplus参数存在,我根本不想赋值,请帮助我解决这个问题

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

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

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

您案例中的
if
语句是模块代码中的第一级成员,它们是
generate
构造,这也是编译时的事情

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

分配
是一种连续分配,用于分配导线。因此,必须始终分配lhs。因此,您希望不分配某些内容,但使用此语句是不可能的

但是,如果您在
中将
hb\u valid\u声明为
reg
logic
,您只需创建一个如下所示的闩锁语句:

always @*
   if (!$test$plusargs("HB_CONN_DISABLE"))
      iol.hb_valid_in = some_value;
因此,仅当条件为true时,它才会将“some_value”指定给“hb_valid_in”。否则就不会


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

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