UVM 序列主体任务给出未知的编译错误
UVM sequence body task gives unknown compilation error
我有以下代码块,其中触发了语法错误:
virtual task body();
forever begin
my_transaction m_req;
// Blocking wait for a transaction request:
p_sequencer.m_request_fifo.get(m_req);
// Generate response based on "req_kind" value:
if ( m_req.req_kind == REQ ) begin
`uvm_do_with(req, {req_kind == REQ;} )
end
else begin
`uvm_do_with(req, {req_kind == NO_REQ;} )
end
end
endtask
我收到以下错误消息:
Error-[SE] Syntax error
Following verilog source has syntax error :
"./src/my_transaction.sv", 77: token is ')'
if ( m_req.req_kind == REQ ) begin
^
如果我如下注释 if 和 else 行,此代码块将正常编译:
virtual task body();
forever begin
my_transaction m_req;
// Blocking wait for a transaction request:
p_sequencer.m_request_fifo.get(m_req);
// Generate response based on "req_kind" value:
//if ( m_req.req_kind == REQ ) begin
`uvm_do_with(req, {req_kind == REQ;} )
//end
//else begin
`uvm_do_with(req, {req_kind == NO_REQ;} )
//end
end
endtask
我试着评论这一行:
my_transaction m_req;
以及预期由于未定义的 m_req
标识符而引发错误。但是代码实际上可以编译!
req_kind的定义是:
class my_transaction extends uvm_sequence_item;
typedef enum {REQ, NO_REQ} req_kind_e;
rand req_kind_e req_kind;
...
...
...
并且class my_transaction
在存在编译错误的文件中类型转发:
typedef class my_transaction ;
有问题的代码块是序列库中的一个序列,其中 m_request_fifo
是从属定序器中用于检索序列的端口。
我正在将此文件与其他文件一起编译。编译器错误消息是否具有误导性?我可以查找代码中的哪些其他位置来了解问题的根源?
可能是什么问题?
uvm_sequence
class声明的源代码是:
virtual class uvm_sequence #(
type REQ = uvm_sequence_item,
type RSP = REQ
) extends uvm_sequence_base
REQ
是一个 类型参数 。您将它用于其他用途是 wrong/confusing 您的编译器。
我有以下代码块,其中触发了语法错误:
virtual task body();
forever begin
my_transaction m_req;
// Blocking wait for a transaction request:
p_sequencer.m_request_fifo.get(m_req);
// Generate response based on "req_kind" value:
if ( m_req.req_kind == REQ ) begin
`uvm_do_with(req, {req_kind == REQ;} )
end
else begin
`uvm_do_with(req, {req_kind == NO_REQ;} )
end
end
endtask
我收到以下错误消息:
Error-[SE] Syntax error
Following verilog source has syntax error :
"./src/my_transaction.sv", 77: token is ')'
if ( m_req.req_kind == REQ ) begin
^
如果我如下注释 if 和 else 行,此代码块将正常编译:
virtual task body();
forever begin
my_transaction m_req;
// Blocking wait for a transaction request:
p_sequencer.m_request_fifo.get(m_req);
// Generate response based on "req_kind" value:
//if ( m_req.req_kind == REQ ) begin
`uvm_do_with(req, {req_kind == REQ;} )
//end
//else begin
`uvm_do_with(req, {req_kind == NO_REQ;} )
//end
end
endtask
我试着评论这一行:
my_transaction m_req;
以及预期由于未定义的 m_req
标识符而引发错误。但是代码实际上可以编译!
req_kind的定义是:
class my_transaction extends uvm_sequence_item;
typedef enum {REQ, NO_REQ} req_kind_e;
rand req_kind_e req_kind;
...
...
...
并且class my_transaction
在存在编译错误的文件中类型转发:
typedef class my_transaction ;
有问题的代码块是序列库中的一个序列,其中 m_request_fifo
是从属定序器中用于检索序列的端口。
我正在将此文件与其他文件一起编译。编译器错误消息是否具有误导性?我可以查找代码中的哪些其他位置来了解问题的根源?
可能是什么问题?
uvm_sequence
class声明的源代码是:
virtual class uvm_sequence #(
type REQ = uvm_sequence_item,
type RSP = REQ
) extends uvm_sequence_base
REQ
是一个 类型参数 。您将它用于其他用途是 wrong/confusing 您的编译器。