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.