【发布时间】: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