enum.sv 2.55 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
typedef enum {
    A_1, A_2, A_3
} EnumA;

typedef enum {
    B_1 = 2, B_2 = 1, B_3 = 3
} EnumB;

typedef enum {
    C_1 = 20, C_2 = 0, C_3 = 19
} EnumC;

typedef enum {
    D_1 = 'h10, D_2, D_3
} EnumD;

typedef enum {
    E_1, E_2 = 'h10, E_3, E_4, E_5 = 'b10, E_6
} EnumE;

21 22 23 24 25 26 27 28
typedef enum logic {
    F_1, F_2
} EnumF;

typedef enum [0:0] {
    G_1, G_2
} EnumG;

29 30 31 32 33
typedef logic [3:0] Foo_t;
typedef enum Foo_t {
    H_1 = 'b1, H_2 = 'b0
} EnumH;

34 35 36 37
typedef enum int {
    I_1, I_2
} EnumI;

38 39 40 41 42 43 44 45
typedef enum int {
    J_1, J_2, J_3
} EnumJ;

typedef enum int {
    Z_1, Z_2, Z_3
} EnumZ;

46 47 48 49 50 51 52 53 54 55 56 57
typedef enum int {
    K_A,
    K_B = 10,
    K_C[3],
    K_D[3] = 20,
    K_E[4:6],
    K_F[4:6] = 30,
    K_G[6:4],
    K_H[6:4] = 40,
    K_I[3:3] = 50
} EnumK;

58 59
`define PRINT(name, val) \
    dummy``name = name``_``val; \
60
    $display(`"name %h %h %0d %0d`", \
61
        name``_``val, dummy``name, $bits(name``_``val), $bits(dummy``name));
62 63 64 65 66 67 68

module top;
    EnumA dummyA;
    EnumB dummyB;
    EnumC dummyC;
    EnumD dummyD;
    EnumE dummyE;
69 70
    EnumF dummyF;
    EnumG dummyG;
71
    EnumH dummyH;
72
    EnumI dummyI;
73
    EnumK dummyK;
74 75 76

    initial begin

77 78 79 80 81 82 83 84 85 86 87
        `PRINT(A, 1)
        `PRINT(A, 2)
        `PRINT(A, 3)

        `PRINT(B, 1)
        `PRINT(B, 2)
        `PRINT(B, 3)

        `PRINT(C, 1)
        `PRINT(C, 2)
        `PRINT(C, 3)
88

89 90 91
        `PRINT(D, 1)
        `PRINT(D, 2)
        `PRINT(D, 3)
92

93 94 95 96 97 98
        `PRINT(E, 1)
        `PRINT(E, 2)
        `PRINT(E, 3)
        `PRINT(E, 4)
        `PRINT(E, 5)
        `PRINT(E, 6)
99

100 101
        `PRINT(F, 1)
        `PRINT(F, 2)
102

103 104
        `PRINT(G, 1)
        `PRINT(G, 2)
105

106 107
        `PRINT(H, 1)
        `PRINT(H, 2)
108

109 110
        `PRINT(I, 1)
        `PRINT(I, 2)
111

112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
        `PRINT(K, A)
        `PRINT(K, B)
        `PRINT(K, C0)
        `PRINT(K, C1)
        `PRINT(K, C2)
        `PRINT(K, D0)
        `PRINT(K, D1)
        `PRINT(K, D2)
        `PRINT(K, E4)
        `PRINT(K, E5)
        `PRINT(K, E6)
        `PRINT(K, F4)
        `PRINT(K, F5)
        `PRINT(K, F6)
        `PRINT(K, G6)
        `PRINT(K, G5)
        `PRINT(K, G4)
        `PRINT(K, H6)
        `PRINT(K, H5)
        `PRINT(K, H4)
        `PRINT(K, I3)

134
    end
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

    parameter USE_J = 1;
    generate
        if (USE_J) begin
            EnumJ dummyJ;
            initial begin
                `PRINT(J, 1)
                `PRINT(J, 2)
                `PRINT(J, 3)
            end
        end
        else begin
            EnumZ dummyZ;
            initial begin
                `PRINT(Z, 1)
                `PRINT(Z, 2)
                `PRINT(Z, 3)
            end
        end
    endgenerate

156
endmodule