Difference between revisions of "Return Stack"

From Land Boards Wiki
Jump to navigation Jump to search
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)

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