在SystemVerilog

时间:2016-06-22 17:42:42

标签: if-statement verilog system-verilog

我想知道系统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中是否有可以使用的东西?

由于

2 个答案:

答案 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);