连接阶段内的OVM声明

时间:2016-08-29 14:49:20

标签: system-verilog verification

我正在寻找有关特定系统故障/ OVM行为的解释/文档。

我有一个连接阶段的课程。在连接阶段,我试图声明一个ovm_object,虽然我遇到了一些问题。当我这样做时:

virtual function void connect();
    super.connect();

    `ifdef SOMETHING_ENABLE
        ovm_object some_object;
    `endif
endfunction : connect

我收到语法错误,说下面的verilog源有一个语法错误:“file.sv”令牌是'some_object',它指向我的代码行,声明为some_object。

虽然,当我用“开头”和“结束”换行时,我没有收到任何错误:

virtual function void connect();
    super.connect();

    `ifdef SOMETHING_ENABLE
    begin
        ovm_object some_object;
    end
    `endif
endfunction : connect

这是为什么?有人可以指出这方面的文档,和/或解释我为什么会看到编译器的这种行为吗?

1 个答案:

答案 0 :(得分:3)

BNF for SystemVerilog要求声明出现在块中的任何过程语句之前(这来自Verilog根源于Pascal编程语言)。如果您查看功能的BNF(第A.2.6节),您会看到 {tf_item_declaration} 位于 {function_statement_or_null} 之前。

在第二个示例中,虽然没有语法错误,但您将无法在块之外引用some_object。因此,在致电super.connect();之前请说明您的声明。