Lightweight Microprogrammed Intel 8080 Compatible Core

Lightweight Microprogrammed Intel 8080 Compatible Core


Category: Processor

Created: October 24, 2007

Updated: January 27, 2020

Language: Verilog & VHDL

Other project properties

Development Status: Stable

Additional info: Design done, FPGA proven, Specification done

WishBone compliant: No

WishBone version: n/a

License: GPL


This is a simple, small microprogrammed Intel 8080 CPU binary compatible core.

There are already at least two other 8080-compatible cores in Opencores, both of them well proven. This one is different because it emphasizes area instead of cycle-count compatibility or speed.

I have tried to minimize logic size and complexity as much as possible, at the expense of speed. At about the same size as a Picoblaze on a Spartan 3 (204 LUTs + 1 BRAM), this is perhaps amongst the smallest 8-bit CPU cores available. On the other hand, it is rather slow in clock frequency and particularly in cycles per instruction (25 to 50% more clocks per instruction than the original, which is an awful lot! -- see the design notes). Besides, the 2 KBytes of dedicated fpga ram it does use may in some designs be more valuable than a large number of logic blocks.

The source is quite simple: a single file with some 1300 lines of straightforward, moderately commented VHDL code; plus a microcode source file from which the microcode table embedded into the vhdl was assembled. However, the simplicity may be deceptive; it can be argued that the complexity of the system has been moved from the RTL to the microcode...

A description of the circuit and its microcode is included in the design notes and the respective source files. The microcode assembler (a perl script) is included too, though it is not necessary if you just want to use the core and not modify it.

This is just a fun project I created to learn vhdl; my design goal was to get the simplest possible 8080-compatible core, at the smallest possible size, at any reasonable speed. And above all, at a minimum cost in development time -- so I could get something worthy done in the very limited time available.
Though I think I accomplished my goal, the resulting core is probably of little practical use: it is certainly no match for a picoblaze in its application niche, and it is not small enough to compensate for its lack of features (the smallest Nios II is only 2 or 3 times larger). And there are better 8080 cores around, as I said.

I am in debt with Scott A. Moore for his cpu8080 core. Though I have not used his code in this project, I studied it and did use much of the research and test material that he made available at this site.



- Available in both VHDL and Verilog versions (thanks to Moti Litochevski) -- identical circuit.
- Microcoded design, very simple circuit.
- Microcode source and assembler included, though the vhdl microcode table can be edited directly.
- Slower than original in clocks per instructions (about 25 to 50%, comparative table included in the design notes).
- 100% binary compatible to original 8080.
- Synchronized to positive clock edges only.
- Signal interface very simplified. Not all original status info available (no M1, for instance).
- Synchronous memory and i/o interface, with NO WAIT STATE ability.
- INTA procedure similar to original 8080, except it can use any instruction as int vector.
- Undefined/unused opcodes are NOPs.

Performance (standalone CPU, synthesis only):

Xilinx XST on Spartan 3 (-5 grade):

   204 LUTs plus 1 BRAM @ 80 MHz (optimized for area)
   228 LUTs plus 1 BRAM @ 100 MHz (optimized for speed)
   618 LUTs @ 53 MHz (optimized for area, no block ram)

Altera Quartus on Cyclone 2:

   369 LEs plus 4 M4Ks @ 67 MHz (balanced optimization)



The core has already executed some quite large pieces of original code in hardware, including the Microsoft Altair 4K Basic.
Interrupt response has been simulated and tested in real hardware.
The project includes a small SoC system built around the CPU core that can be useful as an usage example or as the starting point for a real application.

Besides, thanks to Moti Litochevski the project is now available in both Verilog and VHDL versions.

Compatibility to the original Intel 8080 has not yet been achieved at 100% -- the CY flag undocumented behavior for some logic instructions is slightly incompatible. This is an issue that can't be fixed without a lot of testing with original 8080 chips, or with very accurate simulators.

Please note that the documented behavior of the CPU is 100% compatible to the original; it's only the undocumented behavior of the original silicon that has not yet been fully replicated -- only almost.
We have set up some demos to showcase the core.

The development progress can be tracked in the development log.