Difference between revisions of "IOP16 16-bit I/O CPU Design"

From Land Boards Wiki
Jump to navigation Jump to search
Line 7: Line 7:
 
[https://www.youtube.com/watch?v=ZtEJHF-pVU0&list=PLn__0BqzWEWNspQ0xkG5h-oSJ21EAet8H Video PlayList]
 
[https://www.youtube.com/watch?v=ZtEJHF-pVU0&list=PLn__0BqzWEWNspQ0xkG5h-oSJ21EAet8H Video PlayList]
  
== Features Set ==
+
= Features Set =
  
 
* 16-bit CPU
 
* 16-bit CPU
Line 30: Line 30:
 
<video type="youtube">9mVS9uzOa8s</video>
 
<video type="youtube">9mVS9uzOa8s</video>
  
== IOP16 Block Diagram ==
+
= IOP16 Block Diagram =
  
 
[[file:IOP16_Block-Diagram.png]]
 
[[file:IOP16_Block-Diagram.png]]
  
== Instruction Set ==
+
= Instruction Set =
  
 
* [[IOP16 Instructions Detail]]
 
* [[IOP16 Instructions Detail]]
  
== Assembler ==
+
= Assembler =
  
 
* [[IOP16 Assembler|Table driven Assembler]]
 
* [[IOP16 Assembler|Table driven Assembler]]
Line 45: Line 45:
 
*** MIF (Memory Initialization File) is Altera ROM initialization File
 
*** MIF (Memory Initialization File) is Altera ROM initialization File
  
== Hardware Requirements ==
+
= Hardware Requirements =
  
 
* Targeted at an FPGA implementation
 
* Targeted at an FPGA implementation
Line 51: Line 51:
 
** Coded in VHDL
 
** Coded in VHDL
  
=== Resources ===
+
== Resources ==
  
 
* Very small LUT/Memory footprint in FPGA
 
* Very small LUT/Memory footprint in FPGA
Line 59: Line 59:
 
*** Trade-off - SRAM could be replaced with logic cells (in theory)
 
*** Trade-off - SRAM could be replaced with logic cells (in theory)
  
=== Target Hardware ===
+
== Target Hardware ==
  
 
[[File:CycloneIV_Starter_Kit_P528-720px.jpg]]
 
[[File:CycloneIV_Starter_Kit_P528-720px.jpg]]
Line 72: Line 72:
 
<video type="youtube">02s5rlaEy4Q</video>
 
<video type="youtube">02s5rlaEy4Q</video>
  
== Peripheral Support ==
+
= Peripheral Support =
  
 
* [[IOP16 Peripheral Support|Extensive Peripheral Support]]
 
* [[IOP16 Peripheral Support|Extensive Peripheral Support]]
Line 80: Line 80:
 
* Write strobe (a couple of clocks wide)
 
* Write strobe (a couple of clocks wide)
  
== Code Examples ==
+
= Code Examples =
  
 
Here are some Code and FPGA build example applications
 
Here are some Code and FPGA build example applications
Line 86: Line 86:
 
* [https://github.com/douggilliland/Design_A_CPU Design a CPU Base Code] - GitHub
 
* [https://github.com/douggilliland/Design_A_CPU Design a CPU Base Code] - GitHub
  
=== Blink LED ===
+
== Blink LED ==
  
 
Almost minimal design = CPU + Timer + LED
 
Almost minimal design = CPU + Timer + LED
Line 93: Line 93:
 
* [https://github.com/douggilliland/IOP16/blob/main/IOP16_Code/testTimer/testTimer.csv testTimer Code]
 
* [https://github.com/douggilliland/IOP16/blob/main/IOP16_Code/testTimer/testTimer.csv testTimer Code]
  
=== ANSI Terminal ===
+
== ANSI Terminal ==
  
 
* [https://github.com/douggilliland/IOP16/tree/main/Higher_Level_Examples/ANSITerm2 ANSITerm2 FPGA]
 
* [https://github.com/douggilliland/IOP16/tree/main/Higher_Level_Examples/ANSITerm2 ANSITerm2 FPGA]
Line 99: Line 99:
 
* [https://hackaday.io/project/180415-ansi-terminal-in-an-fpga Hackaday ANSI Terminal in an FPGA]
 
* [https://hackaday.io/project/180415-ansi-terminal-in-an-fpga Hackaday ANSI Terminal in an FPGA]
  
=== Front Panel Loopback ===
+
== Front Panel Loopback ==
  
 
* [https://github.com/douggilliland/IOP16/tree/main/Higher_Level_Examples/Front%20Panel%20Examples/FrontPanel01_Test_LoopBack Front Panel Loopback FPGA]
 
* [https://github.com/douggilliland/IOP16/tree/main/Higher_Level_Examples/Front%20Panel%20Examples/FrontPanel01_Test_LoopBack Front Panel Loopback FPGA]
Line 105: Line 105:
 
* [https://hackaday.io/project/180199-8-bit-computer-front-panel Hackaday Front Panel]
 
* [https://hackaday.io/project/180199-8-bit-computer-front-panel Hackaday Front Panel]
  
== IOP16 Porting Guide ==
+
= IOP16 Porting Guide =
  
 
* [[IOP16 Porting Guide]]
 
* [[IOP16 Porting Guide]]
  
== External References ==
+
= External References =
  
 
* [https://hackaday.io/project/180452-small-cpu-in-vhdl Hackaday.io page].
 
* [https://hackaday.io/project/180452-small-cpu-in-vhdl Hackaday.io page].
 
* [https://www.youtube.com/watch?v=ZtEJHF-pVU0&list=PLn__0BqzWEWNspQ0xkG5h-oSJ21EAet8H YouTube Video Series].
 
* [https://www.youtube.com/watch?v=ZtEJHF-pVU0&list=PLn__0BqzWEWNspQ0xkG5h-oSJ21EAet8H YouTube Video Series].

Revision as of 19:19, 10 April 2022

Overview

This CPU is intended to be used as an I/O Processor. The CPU can be used as a Microcontroller replacement in many applications. It implemented in an FPGA. It is useful for offloading polled I/O or replacing CPUs in small applications. The majority of these applications deal with 8-bit data and that's where this CPU excels.

Video PlayList

Features Set

  • 16-bit CPU
  • Simple/consistent opcode bit fields
    • Instructions are always 16-bits wide
    • 4-bit opcode
      • Some "sub-instructions" allow more than 16 instructions
    • 4-bit register field (shared with address/offset)
    • 8-bit constant (shared with address/offset)
  • High enough Performance - 12.5 MIPS
    • 4 of 50 MHz FPGA clocks
  • Register File
    • 8 General Purpose registers
    • 3 constant value registers
    • Registers are 8-bits
  • 12-bit of Program address (up to 4K instructions)
  • Return Stack
    • 0 (none)
    • 1 deep (does not use SRAM)
    • Optionally deeper as build option

IOP16 Block Diagram

IOP16 Block-Diagram.png

Instruction Set

Assembler

  • Table driven Assembler
    • Input comes from a CSV file
    • Outputs .MIF and Listing files
      • MIF (Memory Initialization File) is Altera ROM initialization File

Hardware Requirements

  • Targeted at an FPGA implementation
    • The CPU could easily be run on pretty much any FPGA
    • Coded in VHDL

Resources

  • Very small LUT/Memory footprint in FPGA
  • Uses 271 logic cells in an Altera EP4 FPGA
  • Uses 76 registers in an Altera EP4 FPGA
  • Requires a minimum 1 of 1K SRAM blocks (depends on program size)
      • Trade-off - SRAM could be replaced with logic cells (in theory)

Target Hardware

CycloneIV Starter Kit P528-720px.jpg

Peripheral Support

  • Extensive Peripheral Support
  • 8-bit address (controls up to 256 peripherals)
  • 8-bit data
  • Read strobe (a couple of clocks wide)
  • Write strobe (a couple of clocks wide)

Code Examples

Here are some Code and FPGA build example applications

Blink LED

Almost minimal design = CPU + Timer + LED

ANSI Terminal

Front Panel Loopback

IOP16 Porting Guide

External References