使用字符串的系统Verilog宏

时间:2016-07-20 15:42:01

标签: macros system-verilog uvm

我想创建一个系统verilog宏并将一个字符串变量传递给它。 我已经阅读了另一个使用define to define a string and pass that STRING_NAME的帖子,但我需要以下内容。

`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)

我没有尝试过此代码,但我知道您可以将string变量传递给macro。 这就是我使用STRINGIFY(REG_PATH)

的原因

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我发现了这个问题。由于宏是编译时功能,因此不会对字符串进行运行时转换。我需要做的就是传递对象而不是字符串,因为我想传递的东西看起来像一个字符串,但它确实是一个对象。 `define mirror(x)x.mirror_task()将对象添加到对象类中的镜像任务。