Я пытаюсь создать макрос в System Verilog, поэтому я могу использовать его в строке для печати.Как создать строку из макропроцессора с аргументами
Я создал STRINGIFY макрос:
`define STRINGIFY(x) `"x`"
как предложено здесь: How to create a string from a pre-processor macro
Однако макрос Я пытаюсь stringify принимает аргументы.
Рассмотрим следующий код:
`define STRINGIFY(x) `"x`"
`define HPATH(signal) top.chip.block.signal
string hpath = `STRINGIFY(`HPATH(wire));
$display(hpath); // Output: "`HPATH(wire)"
Я хочу выход быть "top.chip.block.wire"
вместо этого.
Обратите внимание, что макрос HPATH
принимает аргумент wire
.
Это пример кода запуска здесь: http://www.edaplayground.com/x/CKB
EDIT: Проблема заключается в том, что `STRINGIFY макрос останавливается расширением макроса внутри, когда макрос внутри имеет аргументы. Например:
`define STRINGIFY(x) `"x`"
`define HPATH top.chip.block
`define HPATH_SIGNAL(signal) top.chip.block.signal
$display(`"`HPATH`"); // correctly outputs "top.chip.block"
$display(`STRINGIFY(`HPATH)); // correctly outputs "top.chip.block"
$display(`"`HPATH_SIGNAL(sig)`"); // correctly outputs "top.chip.block.sig"
$display(`STRINGIFY(`HPATH_SIGNAL(sig))); // incorrectly outputs "`HPATH_SIGNAL(sig)"
Кажется, что `HPATH_SIGNAL (сиг) не решен, когда вложены внутри` STRINGIFY макро
Возникает вопрос: почему не HPATH_SIGNAL (сиг) расширила последний линия?
Вот пример кода запуска: http://www.edaplayground.com/x/RF2
Ну, я все еще хочу использовать макрос HPATH как иерархический путь (без кавычек). Я пересмотрю свой вопрос, так как я сужу проблему. –