#macros #verilog #system-verilog #uvm
#макросы #verilog #система-verilog #uvm
Вопрос:
Я хочу использовать следующий макрос в проекте uvm
//---------------------------------------------------------
// General macros which contain sequence repeate
// in many places.
//---------------------------------------------------------
`ifndef MY_MACROS_SV
`define MY_MACROS_SV
// MACRO: 'my_fatal_err
//
// calls uvm_fatal in case the assertion is not correct
`define my_fatal(id, msg )
assert (file_p != 0) else
`uvm_fatal("FATAL ERROR", "FILE OPENED FAILED")
`endif //MY_MACROS_SV
Я вызываю этот макрос из разных классов (sequenece, driver и т.д.) с помощью:
`my_fatal("FATAL ERROR", "FILE OPENED FAILED")
Когда я пытаюсь скомпилировать это, я получаю следующую ошибку:
# ** Error: (vlog-13069) ** while parsing file included at ./sv/girobo2_pkg.sv(4 )
# ** at .svmy_macros.sv(13): near "assert": syntax error, unexpected assert , expecting class.
Комментарии:
1. Вы не используете аргументы id и msg в своей функции
Ответ №1:
В многострочных макросах вам нужно экранировать новые строки обратной косой чертой:
`define my_fatal(id, msg )
assert (file_p != 0) else
`uvm_fatal("FATAL ERROR", "FILE OPENED FAILED")
Обратитесь к стандарту IEEE Std 1800-2012, раздел 22.5.1 `определение
В ответ на ваш (теперь удаленный) комментарий, я думаю, вы хотели использовать:
`uvm_fatal(id, msg)
Комментарии:
1. Я хотел `
uvm_fatal(condition, id, msg)