如何在systemverilog中处理包的接口

时间:2018-05-16 17:58:24

标签: system-verilog

这些天我正在创建一个简单的uvm tb,我遇到了界面使用问题。这是我的代码。

/my_proj/tb_uvm/intf/my_if.svh文件中的

:(界面定义)

interface my_if (
    input iCLK,
    input iRSTb,
    inout data
);
clocking monitor_cb @(posedge iCLK);
    input iRSTb;
    input data;
endclocking
modport monitor_mp(
    clocking monitor_cb
); 
endinterface : my_if

我需要在/my_proj/tb_uvm/agent/my_driver.svh文件中实例化这个接口:

class my_driver extends uvm_driver;
    `uvm_component_utils(my_driver)
    virtual my_if m_vif;
    ...
endclass

我尝试在/ my_proj / tb_uvm / agent /下定义一个包文件(名为my_agt_pkg.sv),因为这个目录中有几个驱动程序/监视文件,包括我上面提到的my_driver.svh。

package my_agt_pkg;
    import uvm_pkg::*;

    `include "my_driver.svh"
    `include "../intf/my_if.svh"
     ....
endpackage

但由于以下错误,我编译失败。有人可以帮我解决这个问题吗?

在'endpackage'之前在包内找到'interface'。 内部'package'内的'interface'。

1 个答案:

答案 0 :(得分:2)

错误消息表示内容:您不得在包中声明接口

virtual interface是一个奇特的概念。它的行为类似于一个类变量,但interface被定义并像模块一样实例化。

只需将您的界面声明移到package

之外