syntax-error - UVM 序列体任务给出未知的编译错误

标签 syntax-error verilog system-verilog uvm

我有以下代码块,其中触发了语法错误:

 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 的声明源代码类是:

virtual class uvm_sequence #(
    type    REQ  =  uvm_sequence_item,
    type    RSP  =  REQ
) extends uvm_sequence_base
REQ是一个类型参数。您将其用于其他用途是错误的/混淆了您的编译器。

关于syntax-error - UVM 序列体任务给出未知的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63502244/

相关文章:

ruby-on-rails - 单行if-else语句,期望keyword_do

php - 试图获取PHP中非对象错误的属性

Verilog 双向握手示例

c++ - SystemVerilog DPI 将字符串从 C++ 返回到 verilog - 最后是 ASCII 字符?

java - 初始化的对象数组仍然出现空指针异常?

asp.net-mvc-3 - ASP.NET MVC Razor @model 语法错误

带同步复位的边沿触发 T 触发器的 Verilog 结构描述 (R)

verilog - 在 Verilog 中使用静态值

verilog - 如何在verilog中使用独特的语句?

verilog - 尝试使信号保持高电平 5 个时钟周期,然后保持低电平