mcx16 is a free 16-bit microcontroller written in VHDL. It was inspired by PicoBlaze, written by Ken Chapman at Xilinx. mcx16 is tested on Xilinx FPGAs, though the core VHDL should be portable. Some of mcx16’s features:
- 16-bit addresses, data, port addresses and ports
- Can use 1 (non-pipelined) or 2 (pipelined) clocks per instruction
- 74MHz (74 MIPS) on a Spartan 3 XC3S200AN-4 non-pipelined, and 119 MHz when pipelined (59 MIPS), using 110/114 slices (area optimized, 16 registers, 32 deep stack, 512 word program, distributed stack)
- 107 MHz (107 MIPS) on a Spartan 6 XC6SLX9-2 non-pipelined, and 166 MHz when pipelined (83 MIPS), using 46/41 slices
- Pipelining, register count (1 – 256), stack depth (1 – 65536), and program memory size (1 – 65536 instructions) are all user-set generics
- Cross-platform assembler
- Optional JTAG loader using Kris Chaplin’s technique and cross-platform Xilinx tools
You can view the documentation alone, or download the complete package. Enjoy!
An example of mcx16 built on the Avnet Spartan-6 LX9 MicroBoard is also available:
2013-06-06: Release 1e, added Kintex 7 support
2012-08-23: Release 1c, added barrel shifter, optional JTAG cable speed
2011-12-23: Updated packages and documentation with Virtex 4 support
2011-11-24: Updated packages with newer mcx16uart.vhd (changed while loop to a for loop to avoid implementation errors)
2011-11-23: Updated mcx16s6mb.zip with corrected mcx16s6mb.vhd (a stray process label was removed).