我在我的一个代码中面临以下问题:
Error-[SE]语法错误以下verilog源有语法错误:令牌"monitor"应该是有效类型。请申报为虚拟物品它是一个接口。监控m_monitor;
我有一个名为monitor.sv
的文件,我正在使用类监视器。我已经在另一个名为soc_uvm.svh
的文件中声明了这个类。
frommonitor.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
frompkg.sv
file
Package soc_uvm_pkg
`include soc_uvm.svh
endpackage
这个soc_env。SVH再次包含在pkg.sv文件中。
在我看来,在soc_uvm编译期间,monitor
类从soc_uvm_env
的范围中丢失了。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"在同一个包中,您可能需要import包所在的监视器。sv包含import pkg_where_mon_is::*;
或import pkg_where_mon_is::monitor;
。或包括"monitor.sv"放进你的包里。所以下面可以修复它。
package soc_uvm_package;
...
import pkg_where_mon_is::*; //Will import whole package
//or
import pkg_where_mon_is::monitor; //should import only class monitor from package
`include "soc_uvm.svh"
...
endpackage
只是一个附带的建议,我想看看一些命名约定的样式指南,就像这里的链接。