Дилемма здесь заключается в том, что только один член профсоюза должен быть дополнен до размера другого члена.Но вы не можете иметь член структуры с шириной 0.Таким образом, ваш упакованный союз должен быть как минимум на 1 бит шире, чем самый большой член
parameter MAXSIZE = ($bits(pkt1Type_t) > $bits(pkt2Type_t)) ?
$bits(pkt1Type_t) : $bits(pkt2Type_t);
typedef struct packed {
logic [MAXSIZE-$bits(pkt1Type_t):0] padding;
pkt1Type_t pkt;
} pkt1TypePadded_t;
typedef struct packed {
logic [MAXSIZE-$bits(pkt2Type_t):0] padding;
pkt2Type_t pkt;
} pkt2TypePadded_t;
typedef union packed {
pkt1TypePadded_t pkt1;
pkt2TypePadded_t pkt2;
} pkt_t;
. Возможно, существуют более подходящие подходы к тому, что вы пытаетесь сделать (например, теговые объединения, конструкция let
, но сложная задача).не зная больше, что нужно с этим делать.