Hello
I have dynamic array and variable:
typedef bit [7:0][7:0] slice_t;
slice_t slice;
slice_t pkt [];
I’m trying to form array receiving signals from interface:
if (vi.ixgpad.val) begin
slice = vi.ixgpad.data;
pkt = {pkt, vi.ixgpad.data};
$displayh(vi.ixgpad.data);
$displayh(slice);
$displayh(pkt);
end
But I get strange result:
# d555555555555555
# d555555555555555
# {00 00 00 00 00 00 00 55} {00 00 00 00 00 00 00 55} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 08}
# a970517e6c0fe0a9
# a970517e6c0fe0a9
# {00 00 00 00 00 00 00 55} {00 00 00 00 00 00 00 55} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 a9} {00 00 00 00 00 00 00 7e} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 00} {00 00 00 00 00 00 00 08} {00 00 00 00 00 00 00 08}
However, if I concatenate array with variable, I get expected result:
@(posedge vi.iclk);
if (vi.ixgpad.val) begin
slice = vi.ixgpad.data;
pkt = {pkt, slice};
$displayh(vi.ixgpad.data);
$displayh(slice);
$displayh(pkt);
end
# d555555555555555
# d555555555555555
# {d5 55 55 55 55 55 55 55}
# a970517e6c0fe0a9
# a970517e6c0fe0a9
# {d5 55 55 55 55 55 55 55} {a9 70 51 7e 6c 0f e0 a9}
Could you help me understand why this happening?
Interface description just in case:
interface Intf_xgpad #(
parameter WIDTH = 8
)();
logic sop;
logic eop;
logic val;
logic [WIDTH-1:0][7:0] data;
logic [$clog2(WIDTH)-1:0] pad;
modport direct (input sop, eop, val, data, pad);
modport inverse (output sop, eop, val, data, pad);
endinterface: Intf_xgpad