System verilog 如果“UVM编译失败”;abc_seq_项目m_tx&引用;不是“中的第一个可执行行”;任务运行阶段(uvm阶段);

System verilog 如果“UVM编译失败”;abc_seq_项目m_tx&引用;不是“中的第一个可执行行”;任务运行阶段(uvm阶段);,system-verilog,uvm,System Verilog,Uvm,我曾多次遇到这种情况 在用户定义的uvm驱动程序中,如果我在run_阶段使用下面的方法,它将失败 task run_phase(uvm_phase phase); #1; // It fail even if I put something like `uvm_info() instead of "#1". abc_seq_item m_tx; ... 类似的行为也可能发生在sequence类中 task body(); #1; ab

我曾多次遇到这种情况

在用户定义的uvm驱动程序中,如果我在run_阶段使用下面的方法,它将失败

task run_phase(uvm_phase phase);
    #1; // It fail even if I put something like `uvm_info() instead of "#1".
    abc_seq_item m_tx;
    ...
类似的行为也可能发生在sequence类中

task body();
    #1;
    abc_seq_item m_tx;
    ...
如果“abc_seq_item m m_tx”是任务中的第一个可执行文件,则将通过。
我可以知道原因吗?

这是Verilog的一条通用BNF规则,在任何程序代码块中,声明必须在任何语句之前。此规则适用于任何任务、函数、开始/结束、分叉/联接块。我不确定在LRM中是否有一个特定的地方用文字提到这一点,但它被编入了BNF中,在你寻找块_项目_声明中