使用虚接口变量赋值语句

assign statement using virtual interface variable

我想使用 assign 语句将模块变量连接到虚拟接口中的端口。

我创建了一个接口,并在我的顶级模块的 config_db 中将其设置为虚拟接口。我通过另一个模块中的 config_db 获得了虚拟接口,并尝试将另一个模块中的端口连接到虚拟接口中的端口

//Below is the sample code

  interface intf();   //Interface

       int values;

  endinterface

  module another_module();   //Another module

       virtual intf u_intf;

       int val;

       assign val = u_intf.values; //I am getting ERROR here

       initial begin
             uvm_config_db#(virtual intf)::get(null,"","assoc_array",u_intf);
       end

  endmodule

  module tb();           // Top TB

       intf u_intf();
       another_module u_another_module();

       initial begin
            uvm_config_db#(virtual intf)::set(uvm_root::get(),"","assoc_array",u_intf);
       end

  endmodule

标准不允许在assign语句中使用虚拟接口。 assign在verilog中用于连接不同的RTL块。 virtual interface 是系统verilog 测试平台的概念。 所以,不能混在一起。

你必须澄清,为什么你真的需要一个 virtual 接口在这个内容中。它们不可合成。你在写一个测试台模块吗?一般情况下,您应该使用常规接口来连接模块。

但是,在您的示例中,您可以使用 always @* 进行分配:

always @* val = u_intf.values;