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
函数;它必须在另一个函数中调用。
我创建自己的宏文件:
`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
函数;它必须在另一个函数中调用。