Getting Started

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

Introduction to the Terasic DE10-Nano

The Terasic DE10-Nano development board, based on an Intel® SoC FPGA, provides a reconfigurable hardware design platform for makers, IoT developers and educators. Featuring two GPIO expansion headers, an Arduino* header, high-speed DDR3 memory, an HDMI* port and ethernet networking, the board provides a robust and feature rich platform to create many exciting IoT applications.

Developers and makers are invited to discover the performance of a low-power embedded processor integrated with the flexibility of programmable logic. Divided into two distinct parts, the Intel® Cyclone® FPGA SoC device is made of a hard processor system (HPS) and a Field Programmable Gate Array (FPGA). While the HPS is a general purpose processor (based on a dual-core ARM Cortex-A9* processor), the FPGA is a parallel processing engine on which you can create custom hardware to accelerate fixed function algorithms or for extending the I/O capabilities of the device.

Terasic DE10-Nano Kit Contents

image.png

The Terasic DE10-Nano kit should come with 7 items:

The Altera Cyclone V SE 5CSEBA6U23I7

The Altera Cyclone V SE 5CSEBA6U23I7 is a high-performance System-on-Chip (SoC) FPGA designed for low-power, cost-sensitive embedded applications. It integrates a dual-core ARM Cortex-A9 MPCore processor with CoreSight, operating at up to 800 MHz, alongside an FPGA fabric featuring 110,000 logic elements (LEs). Built on TSMC’s 28 nm low-power process technology, it offers up to 13.59 Mb of embedded memory through M10K and MLAB blocks, and supports advanced I/O capabilities, including PCIe, USB, and DDR3 memory interfaces. The device is housed in a 672-pin UBGA package (23x23 mm) and provides flexible programmable interconnects for customized designs, making it ideal for applications in digital signal processing, hardware acceleration, and embedded systems requiring robust performance and energy efficiency.