使用虚接口变量赋值语句
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;
我想使用 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;