AE18 - Clean Room Implementation of Microchip PIC18 Series

AE18 - Clean Room Implementation of Microchip PIC18 Series


Category: Processor

Created: August 07, 2003

Updated: January 27, 2020

Language: Verilog

Other project properties

Development Status: Beta

Additional info: Design done

WishBone compliant: Yes

WishBone version: n/a

License: LGPL


The AE18 is a clean room implementation of the Microchip PIC18 series CPU core using information from the PIC18C documentation from their website. It is cycle and instruction compatible to the PIC18 for most software commands. This is just a CPU core that is capable of moving and manipulating data to and from memory. It does not have any peripherals nor interrupt controllers although support for both high and low level interrupts are provided. Any peripherals and their respective registers should be mapped to the data memory space. It has a separate instruction and data bus.


- Harvard architecture with separate instruction and data bus.
- Wishbone compatible bus.
- Full 24bits instruction memory capable.
- Full 16bits data memory capable.
- Custom user peripheral/interrupt controllers.


- Tested in software simulation running C code compiled using SDCC 2.5 and GPUTILS 0.13.4.
- Simulated using both Icarus Verilog 0.8.2 and GPLCVER 2.11a.
- Simulation results verified against GPSIM 0.22.0.
- Synthesised for 25k gates @ 50 MHz on a Spartan3 with ISE.
- This initial revision of the design can definitely be further optimised.
- Drop me an email to inform me if you use this core in any of your projects.


- (GPUTILS - GNU PIC assembler and linker).
- (SDCC - PIC18 C compiler).
- (GPSIM - PIC Simulator)
- (PIC18C complete reference manual).
- (PIC18 wikipedia entry).
- (North Carolina State University class project).


Please test it extensively before using. Although every care has been taken to test this core, it is supplied WITHOUT WARRANTY of any kind. If you do find bugs, please feel free to report it using the bug tracker. In order to facilitate debugging, please include any code sequence that is necessary to reproduce the bug. Also, any other information that is necessary will be greatly appreciated.