In order to be C programmable, an ASIP architecture must obviously support at least most of the C language features. The C language defines data structures and variables, pointers, and operators. There is no imperative to support the full C specification and implementing operators such as Boolean operators (And, Or, Xor, Not), or multiplication, is not absolutely necessary. One can restrict itself to the subset of C that he thinks is relevant. Also, there is usually no need to support a fully compliant IEEE754 floating point ALU, and this is altogether absent of most embedded designs.

However, the silicon area required to support most other C features is becoming very small, particularly when using the most recent process nodes (from 90nm and beyond). In fact, even supporting all C language features (to the exception of floating point support), can be considered as a good trade-off for the much increased flexibility of the ASIP. Indeed, from a system perspective, adding a simple ALU and some generic purpose registers might be enough to run basic control code and take algorithmic decisions, and avoid integrating an additional control processor next to the ASIP.

In detail, supporting basic C features will usually require:

 

  • a handful of generic registers to hold temporary data
  • a simple ALU for basic calculations. This ALU might only support additions and subtractions, but is handy to support also Boolean operations, binary shifts, and comparisons
  • some (even if very small) amount of memory to allow register spilling and storing data structures

It is clear there is wide array of C subsets that can be supported, ranging from very restricted (e.g. only +/- ALU) to very complete (including floating-point support).