IOP16 Constants Unit

From Land Boards Wiki
Jump to navigation Jump to search

Constants ROM with Address Counter

A Constants ROM can be used to store strings. This is useful for printing strings to the VDU and UART.

  • Constants ROM
    • 256-byte (max)
    • Null-terminated strings
    • ROM "assembler" creates .MIF file and Symbol table
  • 8-bit Address Counter
    • Loadable with start address
    • Auto-increment address

Programming

  • Single address from the IOP Peripheral spave
  • Load transfer start address (W)
  • Read Data (R)

Hook-up

  • Add to Top Level VHDL code

Pins

  • None - all internal

Signals

-- Decodes/Strobes
...
  signal w_ldConAdr				:	std_logic;
  signal w_rdConAdr				:	std_logic;
...
-- Interfaces
...
signal w_ConstsData			:	std_logic_vector(7 downto 0);

VHDL Instance

  • Add this entity instance code to the IOP16 top file
-- Constants Unit
CONST_UNIT : entity work.ConstantsUnit
port map (	
  i_clock     => i_clk,       -- 50 MHz clock
  i_dataIn    => w_periphOut, -- Data from IOP CPU
  i_ldStr     => w_ldConAdr,  -- Write load address strobe
  i_rdStr     => w_rdConAdr,  -- Strobe to read data from ROM
  o_constData => w_ConstsData -- Data from ROM
);

Hook-up Strobes/Read Mux

  • Strobes
-- Add Strobes/Selects
..
  w_ldConAdr <= '1' when (w_periphAdr=x"0E") and (w_periphWr = '1') else '0';
  w_rdConAdr <= '1' when (w_periphAdr=x"0E") and (w_periphRd = '1') else '0';
...
  • Add to Read Mux
-- Peripheral bus read mux
  w_periphIn <=	...
    w_ConstsData when w_periphAdr = x"0E" else -- Read Constants ROM
...

Constants Compiler

  • Program - pyConstants_cpu_001.py
    • Python 3
    • Prompts for input file
  • Creates two output files
    • Cross reference list of LABEL, address
    • .MIF file with ROM contents
      • Load ROM file by double-clickjng ConstantsROM_256B below ConstantsUnit
  • Input file is CSV
    • Header line - ['LABEL','STRING']

Constants Subroutine

  • Routine handles constants
  • Sets constants address
  • Reads from constants ROM
  • Writes to VDU
PRSTR	IOW	0X01	0X0E	LOAD CONSTANTS ADDRESS
PRSTR2	IOR	0X01	0X0E	READ CHAR (NEXT)
	CMP	0X01	0X00	IS END OF STRING?
	BNE	SKIPPS		NOT END OF STRING
	RTS			RETURN IF END
SKIPPS	JSR	WR2VDU		PRINT TO VDU
	JMP	PRSTR2		LOOP UNTIL NULL TERM

Resources

  • Logic Cells: 74
  • Registers: 46
  • Memory Bits: 2048
  • M9Ks: 1