Как эмулировать отображение $ с помощью Verilog Macros?

Я хочу создать макрос с несколькими параметрами, как $display.

Мой код выглядит так, но он не работает.

               `define format_macro(A) \
                      $write("%s", $sformatf(A)); \

Вот как я назвал format_macro.

               `format_macro("variable = %d", variable)

Как я могу это сделать?

3 ответа

Решение

Я хочу создать макрос с несколькими параметрами, как $ display.

Ты не можешь Verilog и SystemVerilog не поддерживают вариационные макросы.

Вот обходной путь, если ваша цель - использовать это для форматирования строк или вывода, и вы хотите избежать необходимости набирать $sformat повсюду. Вы можете определить макрос для одного аргумента и объединить этот аргумент с $sformat, Предостережение при этом заключается в том, что при использовании макроса необходимо заключить аргумент в скобки.

Обратите внимание () для $sformatf не являются частью макроса:

`define format_macro(A) \
        $write("%s", $sformatf A ); \

Тогда вы можете сделать это:

  `format_macro(("a = %d", a))
  `format_macro(("a = %d, b = %d", a, b))

Кстати, здесь есть отличный скринкаст, который показывает, как настроить обмен сообщениями в UVM. В нем автор показывает эту методику макросов, а также некоторые другие полезные советы, если вы используете UVM.

Вы передаете 2 аргумента вашему макросу, "variable = %d" а также variableмакрос имеет только 1 вход. Читая вопрос, это может быть не несколько аргументов, которые вы хотите, а переменное число.

Для статического списка либо есть настройка макроса для форматирования текста:

`define say(n) $display("cowsay : %s", n);

initial begin
  `say("Moo")
end
=>cowsay : moo

Или сначала создайте строку и передайте в качестве одного аргумента.

`define say(n) $display("%s", n);

string msg;

initial begin 
  $sformat(msg, "variable is : %d", 3);
  `say(msg)
end
=>variable is :           3

SystemVerilog теперь поддерживает необязательные макропараметры, которые позволяют вам создавать умный ключ, как это: http://ionipti.blogspot.com/2012/08/systemverilog-variable-argument-display.html

Это позволяет вам изменить формат сообщения в макросе (добавьте "ОШИБКА", или, возможно, номер файла и строки, или что-то еще, что вам нравится), что вы не можете сделать с вышеупомянутым подходом, заключив все параметры в круглые скобки.

Другие вопросы по тегам