addrmap interrupts {
    signal { activelow; async; field_reset;} field_reset_n;

    reg {
        field {sw=rw; hw=rw; intr;          } intr1 [0:0] = 0;
        field {sw=rw; hw=rw; bothedge intr; } intr2 [1:1] = 0;
        field {sw=rw; hw=rw; negedge intr;  } intr3 [2:2] = 0;
        field {sw=rw; hw=rw; posedge intr;  } intr4 [3:3] = 0;
        field {sw=rw; hw=rw;                } intr5 [4:4] = 0;
        field {sw=rw; hw=rw; nonsticky intr;} intr6 [5:5] = 0;
    } itrs_reg;

    reg {
        field {sw=rw; hw=r;} intr1 [0:0];
        field {sw=rw; hw=r;} intr2 [1:1];
    } itrs_mask;

    reg {
        field {sw=rw; hw=r;} intr5 [1:1];
    } itrs_enable;

    reg {
        field {sw=rw; hw=r;} intr6 [1:1];
    } itrs_next_assign;

    itrs_reg.intr1->mask = itrs_mask.intr1;
    itrs_reg.intr2->mask = itrs_mask.intr2;
    itrs_reg.intr5->enable = itrs_enable.intr5;
    itrs_reg.intr5->next = itrs_next_assign.intr6;


    // HALT REGISTERS
    reg {
        field {sw=rw; hw=rw; intr;} intr1 [0:0];
        field {sw=rw; hw=rw; intr;} intr2 [1:1];
        field {sw=rw; hw=rw; intr;} intr3 [2:2];
        field {sw=rw; hw=rw;      } intr4 [3:3];
        field {sw=rw; hw=rw; intr;} intr5 [4:4];
    } itrs_halteable_reg;

    reg {
        field {sw=rw; hw=r;} intr1 [0:0];
        field {sw=rw; hw=r;} intr2 [1:1];
    } itrs_halt;

    itrs_halteable_reg.intr1->haltmask = itrs_halt.intr1;
    itrs_halteable_reg.intr2->haltmask = itrs_halt.intr2;

    // USE INTERRUPT
    reg {
        field {sw=rw; hw=rw;} itrs_reg_next [0:0];
        field {sw=rw; hw=rw;} itrs_halteable_next [1:1];
    } itrs_next;

    itrs_next.itrs_reg_next->next = itrs_reg->intr;
};