Typedef with a class that generate simulation error : # ** Fatal: (vsim-8451) [...] Virtual interface resolution cannot find a matching instance for

Hello,

I’m using Xilinx VIP (AXI4lite master) to test a DUT. I had an error message:

** Fatal: (vsim-8451) D:/app/iao/Xilinx/Vivado/2018.1/data/xilinx_vip/hdl/axi_vip_pkg.sv(6655): Virtual interface resolution cannot find a matching instance for ‘virtual axi_vip_if #(.C_AXI_PROTOCOL(0), .C_AXI_ADDR_WIDTH(32), .C_AXI_WDATA_WIDTH(64), .C_AXI_RDATA_WIDTH(64), .C_AXI_WID_WIDTH(16), .C_AXI_RID_WIDTH(16), .C_AXI_AWUSER_WIDTH(0), .C_AXI_WUSER_WIDTH(0), .C_AXI_BUSER_WIDTH(0), .C_AXI_ARUSER_WIDTH(0), .C_AXI_RUSER_WIDTH(0), .C_AXI_SUPPORTS_NARROW(1), .C_AXI_HAS_BURST(1), .C_AXI_HAS_LOCK(1), .C_AXI_HAS_CACHE(1), .C_AXI_HAS_REGION(1), .C_AXI_HAS_PROT(1), .C_AXI_HAS_QOS(1), .C_AXI_HAS_WSTRB(1), .C_AXI_HAS_BRESP(1), .C_AXI_HAS_RRESP(1), .C_AXI_HAS_ARESETN(1))’.

Error loading design

And I discover that the source of message was the presence of this unused piece of code :

typedef axi_mst_agent #(
.C_AXI_PROTOCOL (AXI4_MASTER_VIP_PROTOCOL),
.C_AXI_ADDR_WIDTH (AXI4_MASTER_VIP_ADDR_WIDTH),
.C_AXI_WDATA_WIDTH (AXI4_MASTER_VIP_DATA_WIDTH),
.C_AXI_RDATA_WIDTH (AXI4_MASTER_VIP_DATA_WIDTH),
.C_AXI_WID_WIDTH (AXI4_MASTER_VIP_ID_WIDTH),
.C_AXI_RID_WIDTH (AXI4_MASTER_VIP_ID_WIDTH),
.C_AXI_AWUSER_WIDTH (AXI4_MASTER_VIP_AWUSER_WIDTH),
.C_AXI_WUSER_WIDTH (AXI4_MASTER_VIP_WUSER_WIDTH),
.C_AXI_BUSER_WIDTH (AXI4_MASTER_VIP_BUSER_WIDTH),
.C_AXI_ARUSER_WIDTH (AXI4_MASTER_VIP_ARUSER_WIDTH),
.C_AXI_RUSER_WIDTH (AXI4_MASTER_VIP_RUSER_WIDTH),
.C_AXI_SUPPORTS_NARROW (AXI4_MASTER_VIP_SUPPORTS_NARROW),
.C_AXI_HAS_BURST (AXI4_MASTER_VIP_HAS_BURST),
.C_AXI_HAS_LOCK (AXI4_MASTER_VIP_HAS_LOCK),
.C_AXI_HAS_CACHE (AXI4_MASTER_VIP_HAS_CACHE),
.C_AXI_HAS_REGION (AXI4_MASTER_VIP_HAS_REGION),
.C_AXI_HAS_PROT (AXI4_MASTER_VIP_HAS_PROT),
.C_AXI_HAS_QOS (AXI4_MASTER_VIP_HAS_QOS),
.C_AXI_HAS_WSTRB (AXI4_MASTER_VIP_HAS_WSTRB),
.C_AXI_HAS_BRESP (AXI4_MASTER_VIP_HAS_BRESP),
.C_AXI_HAS_RRESP (AXI4_MASTER_VIP_HAS_RRESP),
.C_AXI_HAS_ARESETN (AXI4_MASTER_VIP_HAS_ARESETN)
) T_AGENT_AXI4_MASTER_VIP;

please note that “T_AGENT_AXI4_MASTER_VIP” is unused. When this piece of code is removed,simulation is fine.

to my comprehension, this typedef does nothing as axi_mst_agent is a class and there is no “new” about it. But it seems that I’m wrong as it generates an error.

Does anyone can explain what can do this “typedef” ?

In reply to iostrym:

A typedef of a parameterized generic class creates class creates a specialization of that class. Specialization may cause code to get generated and executed (i.e. static variable initializations), even if never constructed.

Different tools have different ways of suppressing error if you can guarantee they will not effect your simulation. Please check your user manual for suppressing errors.