What is a System-on-Chip (SOC) ?

A system on a chip (SOC) is an integrated circuit (IC) that integrates all components of a computer or other electronic system into a single chip. It may contain digital, analog, mixed-signal, and often radio-frequency functions—all on a single chip substrate.

How is this different from a microcontroller ?

Microcontrollers typically have under 100 kB of RAM (often just a few kilobytes) and often really are single-chip-systems, whereas the term SoC is typically used for more powerful processors, capable of running software such as the desktop versions of Windows and Linux, which need external memory chips (flash, RAM) to be useful, and which are used with various external peripherals.

What is an SoC made of ?

Most SoCs contain :

  • Microcontroller/Microprocessor/Digital Signal Processor (DSP) core – multiprocessor SoCs (MPSoC) have more than one processor core
  • Memory blocks including a selection of ROM, RAM, EEPROM and Flash memory
  • Timing sources like PLLs, control for external oscillator, clock generation modules
  • Peripherals like Watchdog timers, counters, Keypad Controller, PWM, etc
  • External interfaces such as USB, HDMI, JTAG, UART, uSDHC
  • Analog components like ADC and DAC
  • Power Management Units, Low Power Control modules

Modern SoCs have many processor cores and module IPs (eg: USB, SATA, Protocol IP's, DMA). The processors and the several IPs are connected together using a fabric of some sort. For example, SoC's that use ARM processors would probably have CoreLink Network Interconnect as the fabric.

Why do most chips have programmable registers ?

Designing and producing chips take a lot of time and effort and companies want to avoid re-spins and include more functionality. The best way to do both is by making the registers programmable so that the same chip can be used in a variety of ways by configuring it appropriately.

So an SoC contains both hardware and software ?

Yes, the hardware part consits of the registers, while the software is the code that gets written into these registers.

How is it verified ?

Verification of huge chips (> 80 mm2 in 28 nm!) with dozens of cores and hundreds of IP's is a mind-numbing task. So, you may wonder - how do these engineers do it ? Well, the answer is that no-one starts building from scratch. For instance, if some-one wanted to develop a C++ program, the best place to start would be from Qt, which is an application framework. In a similar way, SoC's are usually verified using legacy, flexible testbench structures that have been in use and improved upon over many years and have the ability to re-use a lot of the verification components. Such testbenches also have the flexibility to plug in Verification IP's (Intellectual Property) to aid in faster completion of projects. Such IP's are bought or licensed by these semiconductors firms and used in their testbench structures to verify specific design elements. An example would be Synopsys's AMBA VIPs, to verify AXI/AHB protocols used within the design.

What other techniques are employed in verification ?

Traditionally, engineers have employed simulation acceleration, emulation and/or an FPGA prototype to verify and debug both hardware and software for SoC designs prior to tapeout. With high capacity and fast compilation time, acceleration and emulation are powerful technologies that provide wide visibility into systems. Both technologies, however, operate slowly, on the order of MHz, which may be significantly slower – up to 100× slower – than the SoC’s operating frequency. Acceleration and emulation boxes are also very large and expensive at $1M+.