addrmap enums {
    desc = 
        "This example demonstrates how enumerations are translated to Systemverilog, how enumerations are handled when the same enumeration is redefined in different scopes, and hence how enumerations can be re-used in the RTL that surrounds the register block.

        It is not mandatory to use enums in RTL when defining enums in SystemRDL. By providing the command-line argument `--no-enums` all I/O will be defined as flat wires.";

    enum first_enum {
        val_1 = 2'b10;
        val_2 = 2'b01;
    };

    enum second_enum {
        val_3 = 2'b10;
        val_4 = 2'b01;
    };

    reg {
        field {sw=rw; hw=rw;} f1 [1:0];
        field {sw=rw; hw=rw;} f2 [9:8];

        f1->encode = first_enum;
    } reg_a;

    reg {
        field {sw=rw; hw=rw;} f1 [1:0];
        field {sw=rw; hw=rw;} f2 [9:8];

        f1->encode = second_enum;
    } reg_b;

    enum third_enum {
        val_5 = 2'b10;
        val_6 = 2'b01;
    };

    regfile {
        enum fourth_enum {
            val_7 = 2'b10;
            val_8 = 2'b01;
        };

        reg {
            field {sw=rw; hw=rw;} f1 [1:0];
            field {sw=rw; hw=rw;} f2 [9:8];

            f1->encode = third_enum;
        } reg_c;

        reg {
            field {sw=rw; hw=rw;} f1 [1:0];
            field {sw=rw; hw=rw;} f2 [9:8];

            f1->encode = fourth_enum;
        } reg_d;
    } regfile_1;
};