UVM - 错误 - :靠近“(”:语法错误,意外的'(',期待IDENTIFIER或'='

UVM - Error - :near "(": syntax error, unexpected '(', expecting IDENTIFIER or '='

我创建自己的宏文件:

`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(condition, msg)\
   assert (condition) else\
`uvm_fatal("FATAL ERROR", msg)

`define add_rand(mem_type, mem) \
  begin \
   case (mem_type) \
     "int": add_rand_int(mem); \
     "bit": add_rand_bit(mem); \
     default: `uvm_fatal("FATAL ERROR", "type is not supported") \
    endcase\
  end

`endif  //MY_MACROS_SV

我收到以下错误:

** at ..\sv\tx_transaction.sv(21):靠近“(”:语法错误,意外的“(”,需要 IDENTIFIER 或“=”。

tx_transaction.sv 中的第 21 行:

  add_rand_macro();

add_rand 是在 base_transaction 中定义的函数(tx_transaction 扩展它):

class base_transaction extends uvm_sequence_item();

   int rand_int_list [];   
   bit rand_bit_list [];


   bit [31:0] data [$];

   //add to list functions
   function void add_rand_int(int mem);
      rand_int_list.push_back(mem);      
   endfunction: add_rand_int
   ......
endclass: base_transaction

tx_transaction的代码:

class tx_transaction extends base_transaction;
   bit [15:0]  data_xi;
   bit [15:0]  data_xq;
   int mem_int;  //TODO- delete

   //uvm_object_utils\
   `uvm_object_utils(tx_transaction)

   //constructor
   function new(string name = "tx_transaction");
      super.new(name);
   endfunction: new

   function void add_rand_macro();
      `add_rand("int", mem_int)
   endfunction: add_rand_macro

   add_rand_macro();

   //TODO - DELETE
   function void foo();
      $display("rand mem int: %d", mem_int);
   endfunction: foo

endclass: tx_transaction

由于宏扩展为 case 语句,因此必须从 class:

中的函数内部调用它
function ...

    ...
   `add_rand("int", mem_int)   
    ...

endfunction

更新:确保使用分号结束 function 语句:

function void add_rand_macro();
    `add_rand("int", mem_int)
endfunction

更新:您不能在 class 的正文中调用 add_rand_macro 函数;它必须在另一个函数中调用。