EightThirtyTwo is an experimental CPU core with 8-bit instruction words and 32-bit registers.
The main design goals are modest logic footprint and minimum possible use of BlockRAM – which is achieved by (a) aiming to maximise code density, and (b) having the register file implemented as logic rather than BlockRAM.
In order to maximise code density, the instruction words are only 1-byte long, with only three bits devoted to the operand. This allows one of eight general purpose registers to be selected, while a ninth “tmp” register provides an implicit second operand.
There is optional support for dual threads, and the CPU offers full load/store alignment, build-time switchable endian-ness and 32 x 32 to 64 bit multiplication.
The project is hosted on GitHub in two parts:
- The CPU and toolchain, and
- Some demo projects which pull in the CPU as a submodule.
I have blogged about the creation of this CPU, so for those interested in reading about the process, this page serves as a sort of index.
- Part 1 – A Whole New ISA?
- Part 2 – Choosing the Instruction Set
- Part 3 – Nailing down the instruction set
- Part 4 – How to avoid writing an assembler
- Part 5 – Assembly language is all very well…
- Part 6 – Evolving the ISA…
- Part 7 – Some real-life code…
- Part 8 – Hello World! In hardware!
- Part 9 – INTER-handling-RUPTS
- Part 10 – Two threads are better than one
- Part 11 – We have printf()
- Part 12 – Good news… and bad news
- Part 13 – That’s more like it!
- Part 14 – Efficient sign extension
- Part 15 – Time to stop being lazy!
- Part 16 – Assembling is the easy bit!
- Part 17 – Mitigating Hazards
- Part 18 – Threading Revisited
- Part 19 – References and a design flaw
- Part 20 – Endian matters, linker libraries and constructors.
- Part 21 – Further adventures with JTAG
- Part 22 – The Totally Unscientific Code Density Competition
- Part 23 – Bug fixes and a new instruction