2016-07-20 554 views
0

システムのVerilogマクロを作成し、文字列変数を渡したいと思います。 define to define a string and pass that STRING_NAMEを使用している別のスレッドを読みましたが、次のものが必要です。文字列を使用したVerilogマクロ

`define STRINGIFY(x) `"x`" 

私はREG_PATHをパラメータとして使用されているstringに変換することにしたいです。

`define mirror(REG_PATH) \ 
    $display(`STRINGIFY(REG_PATH)``other text); 

文字列変数を使用して文字列を渡したいとします。

string register_path = "my string" 
`mirror(register_path) 

私はこのコードを試していないが、私はあなたがmacrostring変数を渡すことができます知っています。 そのため、STRINGIFY(REG_PATH)を使用しています。

答えて

0

文字列がすでにマクロに渡されているため、要件を表示するだけであれば、ディスプレイには何の変換も必要なく直接使用できます。

define mirror(REG_PATH) \ 
    $display("%s ``other text",REG_PATH); 

string register_path = "my string"; 

initial 
    `mirror(register_path) 

また、文字列を直接連結することもできます。

`define mirror(REG_PATH) \ 
    {REG_PATH," other text"} 
initial 
    $display(`mirror(register_path)); 

オプション3

`define mirror(REG_PATH) \ 
$display("%s otherstring",$psprintf("%s",REG_PATH)); 
initial 
     `mirror(register_path) 

オプション4

`define mirror(REG_PATH) \ 
    $psprintf("%s",REG_PATH) 

initial 
begin 
    $display(`mirror(register_path)); 
end 
+0

$表示は例のためのものです。私はregister_path = "string"を割り当てたいが、これは$ displayに "string"と表示されない。 "register_path"と表示されます。 –

+0

psprintfを使用できます。 register_pathの内容が必要で、その値が実行時に設定されるためです。 '定義ミラー(REG_PATH) $ display("%s他​​の文字列 "、$ psprintf("%s "、REG_PATH)); –

+0

しかし、私が 'mirror(string_parameter)とstring_parameter =" My String "を呼び出すと、" My String "は$ディスプレイに表示されません。私は "string_parameter"と表示されます。 –

0

私はこれで問題を発見しました。マクロはコンパイル時の機能なので、文字列の実行時変換はありません。私が渡す必要があるのは文字列のように見えるが、それは正確にはオブジェクトであるため、文字列の代わりにオブジェクトを渡すだけです。 `define mirror(x)x.mirror_task()は、オブジェクトをオブジェクトクラスのミラータスクの前に付加します。

関連する問題