Hi I declared an array of interface in virtual sequencer, and I tried to assign value to is in vseq, here is what I do:
In virtual sqr:
virtual dft_chain_intf gpio_chain1_vi[3];
`cn_get_intf(virtual dft_chain_intf, "dft_pkg::dft_chain_intf", $sformatf("gpio_chain_vi[%0s]", "XX1"), gpio_chain1_vi[0])
`cn_get_intf(virtual dft_chain_intf, "dft_pkg::dft_chain_intf", $sformatf("gpio_chain_vi[%0s]", "XX2"), gpio_chain1_vi[1])
`cn_get_intf(virtual dft_chain_intf, "dft_pkg::dft_chain_intf", $sformatf("gpio_chain_vi[%0s]", "XX3"), gpio_chain1_vi[2])
and in the corresponding vsq, I did:
for (int ii =0; ii < 3; ii++) begin
fork
repeat (500) begin
bit data = $urandom_range(0,1);
p_sequencer.gpio_chain1_vi[ii].in <= data;
@(p_sequencer.gpio_chain1_vi[ii].drv_cb);
end
join_none
end
and I got: Error: uninitialized virtual interface object
So I did several experiment:
1, in vsq, instead of using for loop, I use p_sequencer.gpio_chain1_vi[0], p_sequencer.gpio_chain1_vi[1], p_sequencer.gpio_chain1_vi[2] and it works.
2, I change array definition to associative array, and it works.
But I am still very confused, why my original method doesn’t work, I simply declare an array of interfaces, and connect those to actual interfaces.
thanks