dimensions.sv 3.11 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
`define DUMP_DIM(typ, dim) \
        $display("    $size      %0d", $size     (typ, dim)); \
        $display("    $left      %0d", $left     (typ, dim)); \
        $display("    $right     %0d", $right    (typ, dim)); \
        $display("    $high      %0d", $high     (typ, dim)); \
        $display("    $low       %0d", $low      (typ, dim)); \
        $display("    $increment %0d", $increment(typ, dim));

`define EXHAUST(typ) \
    $display(`"Dumping info for typ`"); \
    $display("  $dimensions %0d", $dimensions(typ)); \
    $display("  $unpacked_dimensions %0d", $unpacked_dimensions(typ)); \
    $display("  $bits %0d", $bits(typ)); \
    $display("  1st dimension"); \
    `DUMP_DIM(typ, 1) \
    $display("  2nd dimension"); \
    `DUMP_DIM(typ, 2)
18 19 20 21

module top;
    typedef logic [16:1] Word;
    Word Ram[0:9];
22 23
    typedef logic [1:16] WordFlip;
    WordFlip RamFlip[9:0];
24
    type(Ram) RamPair [2];
25
    integer ints [3:0];
26
    integer ints_rev [0:3];
27 28
    typedef struct packed { logic x, y, z; } T;
    logic [$size(T)-1:0] foo;
29 30
    typedef byte unpacked_t [3];
    unpacked_t unpacked;
31 32 33 34 35 36
    initial begin
        $display($size(Word));
        $display($size(Ram,2));
        $display($size(Ram[0]));
        $display($bits(foo));

37 38 39 40
        $display("bits %0d", $bits("AB"));
        $display("bits %0d", $bits("A"));
        $display("bits %0d", $bits(""));

41 42 43 44 45 46 47
        $display("args %b", $size(RamPair, 1));
        $display("args %b", $size(RamPair, 1'b1));
        $display("args %b", $size(RamPair, '1));
        $display("args %b", $size(RamPair, 'o1));
        $display("args %b", $size(RamPair, 1'h1));
        $display("args %b", $size(RamPair, 1'd1));
        $display("args %b", $size(RamPair, 1'dx));
48 49
        $display("args %b", $size(RamPair, '0));
        $display("args %b", $size(RamPair, 'x));
50 51
        $display("args %b", $size(RamPair, $bits(integer) - 31));
        $display("args %b", $size(integer, $bits(integer) - 31));
52

53
        `EXHAUST(Ram);
54 55 56
        `EXHAUST(Ram[0]);
        `EXHAUST($unsigned(Ram[0]));
        `EXHAUST($signed(Ram[0]));
57 58
        `EXHAUST(Ram[0+:2]);
        `EXHAUST(Ram[1+:2]);
59 60
        `EXHAUST(Ram[2-:2]);
        `EXHAUST(Ram[3-:2]);
61
        `EXHAUST(Ram[0][2-:1]);
62 63 64 65 66 67 68 69 70 71 72 73 74
        `EXHAUST(Ram[0][2-:2]);

        `EXHAUST(RamFlip);
        `EXHAUST(RamFlip[0]);
        `EXHAUST($unsigned(RamFlip[0]));
        `EXHAUST($signed(RamFlip[0]));
        `EXHAUST(RamFlip[0+:2]);
        `EXHAUST(RamFlip[1+:2]);
        `EXHAUST(RamFlip[2-:2]);
        `EXHAUST(RamFlip[3-:2]);
        `EXHAUST(RamFlip[0][2-:1]);
        `EXHAUST(RamFlip[0][2-:2]);

75 76
        `EXHAUST(RamPair);
        `EXHAUST(RamPair[0]);
77 78 79 80
        `EXHAUST(Word);
        `EXHAUST(integer);
        `EXHAUST(byte);
        `EXHAUST(ints);
81
        `EXHAUST(ints_rev);
82 83
        `EXHAUST(unpacked_t);
        `EXHAUST(unpacked);
84 85 86 87
        `EXHAUST(type(foo[3:0]));
        `EXHAUST(type(ints[2][3:0]));
        `EXHAUST(type(ints[1:0]));
        `EXHAUST(type(ints_rev[0:1]));
88 89
        `EXHAUST(type(ints[2:1]));
        `EXHAUST(type(ints_rev[1:2]));
90 91 92 93 94

        `EXHAUST(int)
        `EXHAUST(shortint)
        `EXHAUST(longint)
        `EXHAUST(time)
95 96
    end
endmodule