dwi*_*kle 14 macros verilog system-verilog
我有一个预处理器宏,代表我的设计的分层路径.
例:
`define HPATH top.chip.block
Run Code Online (Sandbox Code Playgroud)
我需要构造一个保存值的字符串`HPATH,所以在我的例子中字符串应该相等top.chip.block.
有没有办法构建这样的字符串?
以下尝试都没有奏效:
string hpath;
hpath = "`HPATH"; // Results in hpath = "`HPATH"
hpath = \"``HPATH\"; // Doesn't compile
hpath = `HPATH; // Doesn't compile
Run Code Online (Sandbox Code Playgroud)
我希望hpath等同于执行此分配hpath = "top.chip.block",但通过使用`HPATH而不是再次指定路径.
我无法使用,%m因为我需要在我的顶级UVM环境中的字符串,而不是在模块中.
更多背景:我想这样做的原因是因为我在UVM类库中使用后门寄存器访问.后门API需要将hdl_path设置为设计中的块,作为字符串.我已经定义了分层路径,并且在指定hdl_paths时尝试重用它们,所以我没有定义两次相同的路径.我的测试平台将使用分层路径和字符串路径.
dwi*_*kle 22
在字符串文字中使用`define宏是不可能的.根据SystemVerilog LRM:
宏替换和参数替换不应出现在字符串文字中.
但是,可以通过使用带有参数的宏来构造字符串文字,并使用````在宏中包含引号.
再次,来自LRM:
"覆盖通常的词汇含义",表示扩展应包括引号,实际参数的替换和嵌入式宏的扩展.这允许从宏参数构造字符串文字.
这样可行:
`define STRINGIFY(x) `"x`"
`define HPATH top.chip.block
string hpath = `STRINGIFY(`HPATH);
$display(hpath); // Output: "top.chip.block"
Run Code Online (Sandbox Code Playgroud)
示例代码可以在这里运行:http://www.edaplayground.com/s/4/879
| 归档时间: |
|
| 查看次数: |
19699 次 |
| 最近记录: |