Sliding Register Window

The SpartanMC uses 16 addressable registers which are stored in a 1k FPGA BlockRAM. To fully utilize this memory block a sliding window technique is applied. Registers 0 to 3 are used as global registers, Register 8 to 11 are locales and Register 4 to 7 are the input window which equals the registers 12 to 15 of the calling method. Thus, up to four parameters can be passed to the called function without using external memory. Since each shift of the register window consumes eight positions in the block memory, a total of 127 call levels exist.
Typically register 11 is reserved for the return address of the subroutines or ISRs.