UVM/SV:类声明的语法错误

问题描述

我在我的一个代码中遇到了以下问题。

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 上的命名约定。