`define DUMP_V(X) initial $display(`"V: X %b %0d %0d`", X, X, $bits(X));
`define DUMP_T(X) initial begin : \dump``X \
        localparam [X - 1:0] x = 1'sb1; \
        $display(`"T: X %0d %b`", X, x); \
    end

module mod;
    localparam integer LV1 = 1, LV2 = 2;
    parameter PT1 = 1;
    parameter integer PV1 = 100;
    parameter integer PV2 = PV1 + 3;
    parameter PT2 = 8;
    parameter [15:0] PV3 = 4;
    localparam LV3 = 5;
    localparam LT1 = 8, LT2 = 16;
    `DUMP_V(LV1) `DUMP_V(LV2) `DUMP_V(LV3)
    `DUMP_T(LT1) `DUMP_T(LT2)
    `DUMP_V(PV1) `DUMP_V(PV2) `DUMP_V(PV3)
    `DUMP_T(PT1) `DUMP_T(PT2)
endmodule

module top;
    mod m1();
    mod #(8, 7, 10, 4, 5) m2();
    mod #(9, 8, 11, 32, 6) m3();
endmodule