Fix on unpacked structs

This commit is contained in:
Nick Brereton 2026-06-17 13:05:08 -04:00
parent 4c5e104825
commit ed4c340d42
2 changed files with 10 additions and 1 deletions

View File

@ -9661,7 +9661,8 @@ class WidthVisitor final : public VNVisitor {
continue;
} else if (const AstNodeUOrStructDType* const adtypep
= VN_CAST(dtypep, NodeUOrStructDType)) {
bits *= adtypep->width();
bits *= adtypep->isStreamableFixedAggregate() ? adtypep->widthStream()
: adtypep->width();
break;
} else if (const AstBasicDType* const adtypep = VN_CAST(dtypep, BasicDType)) {
bits *= adtypep->width();

View File

@ -122,6 +122,7 @@ module t;
logic [15:0] packed_union_bits;
logic [11:0] narrow_bits;
logic [19:0] simple_streaml_src;
logic [$bits(simple_t)-1:0] simple_bits_from_bits;
byte byte_array_out[2];
assign {>>{simple_cont_out}} = 20'habcde;
@ -138,6 +139,13 @@ module t;
`checkh(simple_bits, 20'h54321);
simple = '{8'h12, 4'ha, '{4'hb, 4'hc}};
`checkh($bits(simple_t), 20);
`checkh($bits(array_t), 32);
`checkh($bits(nested_t), 36);
`checkh($bits(struct_array_t), 56);
`checkh($bits(simple_array), 40);
simple_bits_from_bits = {>>{simple}};
`checkh(simple_bits_from_bits, 20'h12abc);
simple_bits = {>>{simple}};
`checkh(simple_bits, 20'h12abc);
/* verilator lint_off WIDTHEXPAND */