我想知道系统verilog是否能够动态更改变量名称。例如,我有以下代码:
var1 = 1;
var2 = 2;
var3 = 3;
我想做以下检查
if(var1 == 1)
$display("var1 matched");
if(var2 == 2)
$display("var2 matched");
if(var3 == 3)
$display("var3 matched");
所以在上面的例子中,如果我有'n'个变量,我将进行'n'检查。
因此,我正在寻找一种可行的方法:
for(int i=0; i<=3;i++)
if($sformatf("var%0d", i) == i) //here the variable name changes on the fly
$display("var%0d matched", i);
我尝试了上面的代码并且没有出现任何错误,但它没有按预期运行。
我也试过像这样的字符串连接
for(int i=0; i<=3;i++)
if({var,$sformatf("%0d", i)} == i)
$display("var%0d matched", i);
令人惊讶的是,这也没有给出任何错误。但它是比较我和我因此总是通过。
有人能告诉我系统verilog中是否有可以使用的东西?
由于
答案 0 :(得分:0)
我刚检查了与此相关的LRM部分,但找不到任何表明它受支持的参考。您看到的行为是由于您在&#34; cond_predicate&#34;中使用了$ sformatf函数。表达条件&#34; if&#34;言。
答案 1 :(得分:0)
请参阅IEEE1800-2012规范第22.5.1节。您可以使用带``的宏来从参数构造标识符。
`define dyn_var(x) var``x
for(int i=1; i<=3;i++)
if(`dyn_var(i) == i)
$display("var%0d matched", i);