连接阶段内的 OVM 声明
OVM declarations inside connect phase
我正在寻找 explanation/documentation 特定的 systemverilog/OVM 行为。
我有一个带有连接阶段的 class。在连接阶段,我试图声明一个 ovm_object,尽管我遇到了一些问题。当我这样做时:
virtual function void connect();
super.connect();
`ifdef SOMETHING_ENABLE
ovm_object some_object;
`endif
endfunction : connect
我得到一个语法错误,说下面的 verilog 源有一个语法错误:"file.sv" token is 'some_object',它指向我声明为 [=30= 的代码行].
虽然,当我用 "begin" 和 "end" 包裹它时,我没有收到任何错误:
virtual function void connect();
super.connect();
`ifdef SOMETHING_ENABLE
begin
ovm_object some_object;
end
`endif
endfunction : connect
这是为什么?有人可以指出这方面的文档,and/or 解释为什么我看到编译器有这种行为吗?
SystemVerilog 的 BNF 要求声明出现在块中的任何过程语句之前(这来自 Pascal 编程语言中的 Verilog 根)。如果查看函数的 BNF(第 A.2.6 节),您会看到 {tf_item_declaration} 出现在 {function_statement_or_null} 之前.
在你的第二个例子中,虽然你没有语法错误,但你将无法在块外引用 some_object
。所以把你的声明放在调用 super.connect();
.
之前
我正在寻找 explanation/documentation 特定的 systemverilog/OVM 行为。
我有一个带有连接阶段的 class。在连接阶段,我试图声明一个 ovm_object,尽管我遇到了一些问题。当我这样做时:
virtual function void connect();
super.connect();
`ifdef SOMETHING_ENABLE
ovm_object some_object;
`endif
endfunction : connect
我得到一个语法错误,说下面的 verilog 源有一个语法错误:"file.sv" token is 'some_object',它指向我声明为 [=30= 的代码行].
虽然,当我用 "begin" 和 "end" 包裹它时,我没有收到任何错误:
virtual function void connect();
super.connect();
`ifdef SOMETHING_ENABLE
begin
ovm_object some_object;
end
`endif
endfunction : connect
这是为什么?有人可以指出这方面的文档,and/or 解释为什么我看到编译器有这种行为吗?
SystemVerilog 的 BNF 要求声明出现在块中的任何过程语句之前(这来自 Pascal 编程语言中的 Verilog 根)。如果查看函数的 BNF(第 A.2.6 节),您会看到 {tf_item_declaration} 出现在 {function_statement_or_null} 之前.
在你的第二个例子中,虽然你没有语法错误,但你将无法在块外引用 some_object
。所以把你的声明放在调用 super.connect();
.