ARM System on Chip (ASIC version)

2022


This walkthough aims to introduce you to a simple ARM SoC and the hardware/software design flow.

This walkthough is one of a number which help to illustrate the principles of ARM SoC design:

While the first three versions include examples of custom interface hardware typical of a System-on-Chip design, the "Introductory" version(s) include non-specific input and output ports in the manner of a microcontroller system. While the use of custom interface hardware is likely to yield better results (if it doesn't yield better results you will probably be better off using a microcontroller rather than an SoC), the use of non-specific input and output ports can aid understanding and can offer a starting point for the design of custom interface hardware.


Overview of a Simple ARM SoC

A very simple ARM System on Chip has been designed:

The design includes four slaves:

  1. ROM
    16K bytes for program memory

  2. RAM
    256 bytes for data memory (including stack)

  3. Switch Interface
    Occupying three 32-bit memory locations

  4. Output Interface
    Occupying two 32-bit memory locations

Memory Map

Files

In order to build the ARM SoC, we need SystemVerilog files to model the hardware plus 'C' program files and other support files to build the software. Further files are required to support simulation:


Operation of the custom interface modules

SoC design is a blend of hardware design and software design including third-party components such as microprocessor cores and library software and custom components such as custom interfaces and application software. When looking at the custom components, there is often a trade-off to be made between undertaking a particular task in hardware or software. Some tasks may be easily carried out in hardware leading to simplified software while other tasks may be more easily carried out in software leading to simplified hardware.

In this example we have two custom interface modules which have been designed to integrate with the external world (in this case just switches, buttons and LEDs) and simplify the software:


Preparation

Compile C Program

Simulate ARM SoC


Change the program

The following actions should be possible without closing the simulation.

Change the amount of RAM

Update the linker script


At this stage you can experiment with other changes to the system but you should try to make only small changes between simulations to increase the chances of being able to debug the system.


Iain McNally
18-3-2022