Difference between revisions of "Return Stack"
Jump to navigation
Jump to search
Blwikiadmin (talk | contribs) |
Blwikiadmin (talk | contribs) |
||
Line 2: | Line 2: | ||
* Stack stores the return address | * Stack stores the return address | ||
− | ** Stores to stack on JSR | + | ** Stores to stack on JSR instruction |
− | ** Loads from stack with RTS | + | ** Loads from stack with RTS instruction |
* Last-In, First-Out (LIFO) | * Last-In, First-Out (LIFO) | ||
** [https://github.com/dominiksalvet/vhdl-collection/blob/master/rtl/lifo.vhdl VHDL code] | ** [https://github.com/dominiksalvet/vhdl-collection/blob/master/rtl/lifo.vhdl VHDL code] |
Revision as of 14:47, 19 April 2022
IOP-16 Stack
- Stack stores the return address
- Stores to stack on JSR instruction
- Loads from stack with RTS instruction
- Last-In, First-Out (LIFO)
- Sizes
- 0 (none)
- No JSRs or RTSs in code
- Can do JMPs
- 1 deep (does not need SRAM)
- 12-bit register
- Single deep calls
- Optionally deeper as build option (uses more registers)
- 0 (none)
Configuring Depth
- Set STACK_DEPTH_PASS to the max nesting depth of the subroutines in the top file
- The LIFO capacity is equal to 2^STACK_DEPTH_PASS
IOP16: ENTITY work.cpu_001 -- Need to pass down instruction RAM and stack sizes generic map ( INST_ROM_SIZE_PASS => 512, -- Small code size since program is "simple" STACK_DEPTH_PASS => 4 -- Subroutine depth (not nested) )
Resources
- STACK_DEPTH_PASS = 4
- ALMs: 54
- Registers: 158