AAP: A reference Harvard architecture for embedded compiler development

by Jeremy Bennett


An Altruistic Processor (AAP) is an architecture specification designed for experimenting with compiler back end implementation. In particular it has features that are common within small deeply embedded systems. It is also designed to be easy to use in demonstrations and for education/training, with hardware and simulator implementations as well as the tool chain and standard libraries.

aapThe design is based on no processor in particular, although as an open hardware design, it is inspired by the OpenRISC and RISC-V projects.  There are features drawn from a wide range of processors developed over the past 30 years.  Indeed the branch-and-link operation goes back even further, to the IBM 360.

A particular objective is to improve LLVM for deeply embedded systems.  At present the official LLVM distribution has only one of its 12 officially supported architectures, the MSP360, that is not a 32- or 64-bit design.  But even the MSP430 is a RISC architecture, with a uniform address space, and its LLVM implementation still has experimental status.

Once the entire AAP tool chain is complete, we plan to submit it for adoption in the official LLVM distribution.

Features

These are the key features of the AAP design.

Next steps

Today we publish the outline architecture specification as Embecosm Application Note 13.  Over the coming weeks we will be releasing a simulator for the architecture and all the components for the full LLVM tool chain.  We’ll be talking about those components here.  Our final goal is to release a FPGA hardware implementation.

When we are satisfied that the tool chain components are of high quality, we will be submitting them upstream.  However they’ll be freely available before then on the Embecosm GitHub pages.