问题描述
Error-[SE] 语法错误 以下 verilog 源有语法错误: 令牌“监视器”应该是有效类型。请声明它是虚拟的,如果 它是一个接口。监控 m_monitor;
我有一个名为 monitor.sv
的文件,我在其中使用 class monitor 。我已经在另一个名为 soc_uvm.svh
的文件中声明了该类。
来自monitor.sv
class monitor
//body contains lots of hierarical paths
endclass
来自soc_uvm.svh
class soc_uvm_env extends uvm_env
//DEclare
monitor m_monitor ;
endclass
来自 pkg.sv
文件
Package soc_uvm_pkg
`include soc_uvm.svh
endpackage
这个 soc_env.svh 再次包含在 pkg.sv 文件中。
解决方法
在我看来,monitor
的范围内缺少 soc_uvm_env
类,换句话说,在编译 soc_uvm.svh 期间,编译器无法解析 monitor
,因为它不知道那种类型。
我希望你有以下几点:
//monitor.sv
class monitor extends xy;
//Some stuff
endclass : monitor
//soc_uvm.svh
class soc_uvm_env extends uvm_env;
//Declaration
monitor m_monitor;
//Some other stuff
endclass : soc_uvm_env
//pkg.sv
package soc_uvm_package;
...
`include "monitor.sv" // <- Isn't this missing?
`include "soc_uvm.svh"
...
endpackage
如果您没有将文件“monitor.sv”包含在同一个包中,您可能需要导入包含 monitor.sv 的包import pkg_where_mon_is::*;
或 {{1} }.或者包含“monitor.sv”到您的包中。
所以以下可以解决它。
import pkg_where_mon_is::monitor;
只是一个附带建议,我会研究一些样式指南,例如此链接 here 上的命名约定。