2016-06-22 9 views
0

システムのVerilogに変数名を即座に変更できるかどうか疑問に思っていました。 「SystemVerilogのオンザフライで変数名を変更

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

配列を使用できます。 – toolic

答えて

0

は、私はちょうどこれに関連しているLRMのセクションをチェックし、それがサポートされていることを示す任意の参照を見つけることができませんでした。表示されている動作は、条件付き "if"ステートメントの "cond_predicate"式の中で$ sformatf関数を使用しているためです。

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); 
+0

お返事ありがとうございます。また、仕様への直接リンクを提供することも良い考えです – YakovL

関連する問題