在systemverilog中使用assign inside$test$plusargs
在我的代码中,我想为所有测试使用assign语句进行一些连接,但有一个测试除外,我在测试列表中添加了一个运行时参数“HB_CONN_DISABLE”。当我按如下方式编码时,我得到以下错误在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
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确定是否发生了分配?