System verilog 使用虚拟接口变量赋值语句

System verilog 使用虚拟接口变量赋值语句,system-verilog,uvm,System Verilog,Uvm,我想使用assign语句将模块变量连接到虚拟接口中的端口 我创建了一个接口,并在顶部模块的config_db中将其设置为虚拟接口。我通过另一个模块中的config_db获得了虚拟接口,并尝试将另一个模块中的端口连接到虚拟接口中的端口 //Below is the sample code interface intf(); //Interface int values; endinterface module another_module(); //Ano

我想使用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块。
虚拟接口
是一种系统verilog测试台概念。 因此,它们不能混合在一起

您必须澄清,为什么在此内容中确实需要
虚拟
界面。它们是不可合成的。您正在编写测试台模块吗?在一般情况下,您应该使用常规接口来连接模块

但是,在您的示例中,您可以使用
始终@*
执行分配:

always @* val = u_intf.values;

请格式化你的帖子并问一个问题。嗨,塞奇,这样可以吗?ThanksHi serge,如果我使用always_comb val=u_intf.values;,是否有效?在always_comb中使用虚拟接口有效吗?谢谢,萨默什