Introduction to System on a Chip (SoC)

Summary

If you have never worked with SoCs, this page will help you understand why an SoC like the DE10-Nano is quite different from a regular FPGA.

SoCs are Different From Standard FPGAs

On a standard Field Programmable Gate Array (FPGA) (Xilinx XC7A100T, Agilex 3 A3CZ135BB18AE7S), all peripherals are connected to various pins on the FPGA. However, on SoCs like that on the DE10-Nano, some peripherals are connected to pins on the FPGA and others are connected to the Hard Processor System (HPS). For example, in the block diagram below, the HDMI controller is connected to pins on the FPGA. To access these pins from the HPS, you need to build a system to wire those pins from the FPGA to a memory addressable region on the FPGA through the FPGA fabric and AXI bus. 

image.png

The HPS is etched in silicon and cannot be changed by programming unlike the FPGA, where one can change what the behavior and the logic being run. It is like someone carved out a section of silicon out of the FPGA and dropped an ARM Cortex A9 in and connected it to the FPGA.

I'm comfortable with basic FPGAs, I want to use the HPS, so how?!

When you start trying to learn this, you realize you're now a bit out of the hobbyist domain and are in the professional domain. What this means is:

How does the HPS interact with the SoC?

Imagine you have an FPGA-only board (like the nandland go) and a processor-only board (like an Arduino or raspberry pi). How would you interface them together if you wanted them to talk to each other? You would use one of the communication standards that both platforms understand so that they can talk to each other such as SPI, I2C, Ethernet, etc. This is usually available in hardware in Raspberry PI and/or Arduino and you don't need to implement them from scratch. However, you need to implement a design on the FPGA which supports one of these protocols and then they can communicate with each other.

On SoCs, they use a similar protocol which is called an Avalon Bus (on Altera) and AXI Bus (on Altera and Xilinx). This bus protocol allows for fast communication between the two. These bus architectures are very complicated that it takes a fair bit of study to learn these. Thankfully, Quartus comes with a tool called Platform Designer (previously called QSYS) which makes it easier to work with this without having to know too much about how the bus works.

Additional Resources


Revision #1
Created 31 August 2025 02:03:20 by Joshua Estes
Updated 31 August 2025 03:08:22 by Joshua Estes