gpt4 book ai didi

macros - 如何从预处理器宏创建字符串

转载 作者:行者123 更新时间:2023-12-03 21:25:50 27 4
gpt4 key购买 nike

我有一个预处理器宏,它代表我设计的分层路径。

例子:

`define HPATH top.chip.block

我需要构造一个包含 `HPATH 值的字符串,所以在我的例子中,字符串应该等于 top.chip.block .

有没有办法构造这样一个字符串?

以下尝试均无效:
string hpath;
hpath = "`HPATH"; // Results in hpath = "`HPATH"
hpath = \"``HPATH\"; // Doesn't compile
hpath = `HPATH; // Doesn't compile

我要 hpath相当于做这个作业 hpath = "top.chip.block" , 但是通过使用 `HPATH而不是再次指定路径。

我不能使用 %m因为我需要顶级 UVM 环境中的字符串,而不是模块中的字符串。

更多背景知识:我想这样做的原因是因为我在 UVM 类库中使用了后门寄存器访问。后门 API 需要将 hdl_path 设置为设计中的 block ,作为字符串。我已经为分层路径定义了`defines,并在指定 hdl_paths 时尝试重用这些路径,因此我没有两次定义相同的路径。我的测试台将同时使用分层路径和字符串路径。

最佳答案

不能在字符串文字中使用 `define 宏。根据 SystemVerilog LRM:

Macro substitution and argument substitution shall not occur within string literals.



但是,可以使用带有参数的宏来构造字符串文字,并使用 ``"` 在宏中包含引号。

同样,来自 LRM:

An `" overrides the usual lexical meaning of " and indicates that the expansion shall include the quotation mark, substitution of actual arguments, and expansions of embedded macros. This allows string literals to be constructed from macro arguments.



所以这有效:
`define STRINGIFY(x) `"x`"
`define HPATH top.chip.block
string hpath = `STRINGIFY(`HPATH);
$display(hpath); // Output: "top.chip.block"

示例代码可以在这里运行: http://www.edaplayground.com/s/4/879

关于macros - 如何从预处理器宏创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com