System verilog 如何在systemverilog中处理与软件包的接口

System verilog 如何在systemverilog中处理与软件包的接口,system-verilog,System Verilog,这些天我正在创建一个简单的uvm tb,我遇到了一个界面使用问题。这是我的密码 在/my_proj/tb_uvm/intf/my_if.svh文件中:(接口定义) 我需要在/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 我试图在

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

在/my_proj/tb_uvm/intf/my_if.svh文件中:(接口定义)

我需要在/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”不允许在“包”内使用接口。

错误消息的意思是:不允许在包内声明接口

虚拟接口是一个特殊的概念。它的行为类似于类变量,但
接口
的定义和实例化类似于模块


只需将您的接口声明移到
包之外

错误消息的意思是:不允许您在包内声明接口

虚拟接口是一个特殊的概念。它的行为类似于类变量,但
接口
的定义和实例化类似于模块


只需将您的接口声明移到
包之外

Hi Dave,如果我想在当前sv文件中引用此接口,并且此sv文件包含在包中,我如何处理它?(我的意思是如何在包外声明接口?)。然后重试编译,但失败,出现以下错误:错误-[SV-UIOT]未定义的接口或类型../agent/my_driver.svh,10 my_if,“m_vif”前向引用接口的定义“my_if”丢失或“my_if”是未定义的用户类型的名称。噢,如果我将include语句移到包定义之前,它就会工作。现在,虽然弹出下一个错误,但该错误已消失。我将从我这边进一步看一看。。无论如何,非常感谢!嗨,Dave,如果我想在当前sv文件中引用这个接口,并且这个sv文件包含在包中,我如何处理它?(我的意思是如何在包外声明接口?)。然后重试编译,但失败,出现以下错误:错误-[SV-UIOT]未定义的接口或类型../agent/my_driver.svh,10 my_if,“m_vif”前向引用接口的定义“my_if”丢失或“my_if”是未定义的用户类型的名称。噢,如果我将include语句移到包定义之前,它就会工作。现在,虽然弹出下一个错误,但该错误已消失。我将从我这边进一步看一看。。无论如何,非常感谢!
package my_agt_pkg;
    import uvm_pkg::*;

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