package PKG; typedef struct packed { int W; } F_t; localparam F_t F_v = '{ W: 64 }; endpackage module M0 #( parameter type T, parameter ID = "NONE" ); T v; initial $display("%s %0d %0d", ID, $bits(T), $bits(v)); endmodule module M1 #(parameter PKG::F_t F = PKG::F_v) (); typedef struct packed { logic [F.W-1:0] field; } local_t; local_t v; M0 #(.ID("A"), .T(local_t)) a(); M0 #(.ID("B"), .T(PKG::F_t)) b(); endmodule module top; typedef struct packed { byte W; } F_t; localparam F_t F = '{ W: 16 }; typedef struct packed { logic [F.W-1:0] field; } local_t; local_t v; M1 m1(); M0 #(.ID("C"), .T(local_t)) c(); M0 #(.ID("D"), .T(PKG::F_t)) d(); M0 #(.ID("E"), .T(F_t)) e(); endmodule