Design Features
- Custom I/O Processor to drive Low Level I2C to/from Front Panel
- Read pushbuttons into 32-bit pushbutton value
- Write LEDs from 32-bit LEDs value
Front Panel Features
- 32 Pushbutton Switches
- 32 LEDs
- I2C interface (Two Wire interface - plus power and ground)
- Jumper selectable base address
- Occupies I2C addresses either 0x20-0x23 or 0x24-0x27
- Jumper Selectable I2C terminators
- I2C daisy-chain connector
- Interrupt line
- Can be configured to interrupt on button presses
- MCP23017 needs to be set to Open-Drain output - card has pull-up to Vcc
- Interrupt line
- 4 of MCP23017 16-bit I2C Port Expanders
- Half of each MCP23017 part goes to LEDs and half go to pushbuttons
- 3.3V or 5V operation
- Compatible form factor with RETRO-EP4CE15 and other cards
- 95x95mm
- 6-32 mounting holes
VHDL code
Controller to:
- Initialize the MCP23017 devices
- Read the pushbuttons
- Write the LEDs
Performance
- 400 KHz I2C interface
- Reads/Writes have 8 (bits/byte) x 3 (bytes) = 24 I2C clocks
- 4 read cycles, 4 write cycles in loop
- 24 (I2C clocks) x 8 cycles @ 2.5 uS/bit = 480 uS (max performance)
16-Bit IO Processor
Created a custom I/O Processor in VHDL code. Features:
- 16-bit Instruction
- 4-bit opcode
- Up to 16 of 8-bits registers
- Instruction set
- Program memory (12 bit PC) for up to 4K instructions
Custom Assembler
Wrote utilities in Python 3. Can write code in either a Higher Level Language or Assembly code.
Input files are CSV format. Columns are all predefined.
Output from the Assembler is an Altera MIF file which initializes the IOP EPROM.