UVM — создание моих собственных макросов

#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)