# what really are: Microcontroller (uC), System on Chip (SoC), and Digital Signal Processor (DSP)?

The actual question is at the end. But reading that alone might not show you why am I confused. I wrote this post starting with some definitions, assumptions, and speculations and then asking the actual question.

I always think that I know the difference but when I get a question like: "if I put a transceiver with a uC, is that now an SoC?" I go all jumbled up and I don't know how to answer. I recall once I was told that a uC is essentially an SoC. But what proof do I have? But arduino is not on a single chip! I can take out the Atmeg processor off the "board" anytime!

When I check online I get all kinds of answers that confirm or contradicts what I just said directly or indirectly. This is always confusing to me and I blame none-other than marketing people who use these terms loosely and sometimes interchangeably, and the people who follow their lead.

So I decided to look for the fundamental meaning of these three terms: uC, SoC, and DSP. Because for example, when I get confused about voltages in circuits, I always go back to physics fundamentals, ground is not really zero it is just a "reference" and voltages are not "absolute", they a "relatives". This always points me to the right direction. But there is no base to go to when talking about uC. "micro" "controller" is a controller so small that it is in the micro meter scale. But we don't have the nanocontroller term, do we? So this way of thinking wouldn't help.

What I am trying to answer are the following is:

• uC is a processing unit with other peripherals and memory with it for general use, right?
• SoC is a full "system" on a "chip". So whatever system you put on a single chip, is an SoC, right?
• DSP is a processing unit for specific use, mainly mathematical operations, right?

Now

• Does that mean that everything in a uC they are all required to be in one chip? because if yes, then uC is in fact a SoC. Maybe a small one, but it is. What about arduino. Probably uC "can" be an SoC if it is on a single chip, but doesn't have to (I am heavily using arduino as an example here).

• So arduino is a uC, if I take all of its components and put them in another board and I add XBEE to the mix for example. It is still a uC, right? So when do we say that now it is an SoC? Only when the same stuff are put in a single chip rather than collected in a board?

Till now I think that the above questions somehow answer themselves, but I just want to confirm so I can move on. When I try to think "fundamentally", chip or board "can" be the same, it is just wires connecting the different components. and at this point, what do you define a component? Is it a single transistor or a circuit like an ADC? But I don't want to go there.

The next question is what this post is truly about:

• Is a uC essentially an SoC? A special case of an SoC which one of its requirements being that the whole system is for general purpose use.
• uC is general purpose (according to internet) and DSP is mainly to mathematically process signals collected from the real world. But DSP is still a "processor" and a uC contains a "processor". Can I just put a DSP with a bunch or peripherals (let's say ADC and DAC since these are usually used with it) and call the mix a uC? or is that an SoC (since now the mix is not general purpose and hence we cannot call it uC but it is still an SoC)
• It doesn't really matter what you call it, 'a rose by any other name would smell as sweet!' SoC is a sales term, 'other people sell you the parts, but we sell you the whole system' is what it implies. uC generally is like a uP+memory, and often ADCs. A DSP is optimised for, would you beleive it, DSP, and invariably has a hardware multiplier, but often these days, program memory and sometimes ADCs/DACs, almost an SoC. But to a large extent, most of those could be described as the others. Don't sweat it, certainly don't hit people over it. – Neil_UK Oct 29 '16 at 13:43
• I know it's widely understood to use u and there's no real issue using it, but should you ever want to create a µ, pressing AltGr + M or ⌘ + M should do the trick. – Magic Smoke Oct 29 '16 at 16:29
• "micro" is historical baggage; "micro"controller comes from "micro"computer, which is distinguished from "mini"computers that were fridge sized, and ""computers that took up whole rooms. – user253751 Oct 30 '16 at 2:27

## 3 Answers

uC = a stand-alone processing chip: CPU, RAM, ROM, some peripherals.

DSP = processor chip (can be a separate CPU, nowadays mostly a uC) that is optimized for signal processing. Often has fast MAC (multiply-accumulate), saturating math, and multiple memory interfaces. To get the most out of it, you often need to be deeply aware of its peculiarities, like what kind of memory access can be done at the same time. (Hence often used with fine-tuned assembly libraries provided by the manufacturer.) Often not indetended to be used with large memories (16 bit address bus is often enough).

SOC = processor chip (mostly a CPU, maybe with some RAM for caching) that incorporates peripherals that used to be outside the main processor chip. This is by definition a moving target: the functions in todays specialized SOCs can be found in tomorrows mainstream chips. The current SOCs are mostly meant for running a Linux-level OS, and contain most things you would need on such a system, except for the RAM and ROM (although some ROM is often included, often to read an external FLASH).

Examples of peripherals that are common in todays SOCs (but are finding their way into uC's!): Ethernet ports, Ethernet switching fabric, USB incl. host & OTG, graphic engine(s), mpeg decoding, crypto engine, RAM & FLASH interfaces.

An Arduino is a board-level product, so it is by definition not a uC, DSP or SOC, although it can contain one. The basic Uno contains a uC.

A uC is not a SOC (although there could be bordeline cases): a uC is standalone, and (at the current level of technology) not meant to run Linux-level OSes. A SOC is not standalone (needs RAM and ROM).

The boundaries are not 100% thight and are shifting over time. De CPU's and memory interfaces of most current CPUs easily surpass yesterdays DSPs, even on their turf. But todays DSPs are faster, and/or cheaper or less power-hungry than more general-purpsoe CPUs when doing signal processing. It is a race between the manufacturers to make the most attractive chip using the latest state of technology and demand. At the moment this had lead to the above 3 sweet-spots (plus general-purpose micro-processors), but this will shift over time (DSPs are less popular than 10y ago, IMO because audio-level throughput is now easily achieved by a general-purpose CPU).

A specific type of chip that is becomming more common these days is the uC (or SOC) with some wireless interface. Check the ESP8266 and ESP32 for WiFi examples, and the RN2483 for LoraWan.

uC and DSPs have pretty straight forward definition.

A uC is a processing core that has the memory (volatile and non volatile) integrated internally. This compared to a microprocessor that will generally have some volatile memory inside but no non volatile.

A DSP is an off shoot of a uC. DSPs generally have really good analog sampling capabilities than a typical uC. DSPs also have better math capabilities than uC and come with lots of libraries such as FFT or autocorrelation to utilize those math capabilities.

SoC is more of a marketing wank term. SoC is a term that they try to use when a uC has pulled in enough functionality to make a single or near single chip solution. The term SoC tends to be found when the uC has integrated graphics processing and graphics drivers on board. Think of the ARM chips in cell phones. They incorporate the graphics.

• So are you saying that a DSP also contains an ADC for example? – himura Oct 29 '16 at 11:55
• @himura uC have ADCs but DSPs have really good ADCs. For example the Arduino is capable of up to about 10kHz sampling rate at 10 bit. The dsPIC33 which is a DSP is capable of 1.1MHz sampling rate at 10 bit. That's two orders of magnitude faster. – vini_i Oct 29 '16 at 12:01
• I thought DSP is just the processing unit without any ADC capabilities. But it seems more like a complete system now. Thanks – himura Oct 29 '16 at 12:05
• I think this answer is wrong. There are plenty of DSP chips that have no converters. The main difference between a DSP and a general purpose CPU is the memory architecture. DSPs have multiple memories that can be accessed in parallel. See en.wikipedia.org/wiki/Harvard_architecture – Hilmar Oct 29 '16 at 17:00
• @Hilmar can you please provide some references of DSPs without converters? I like this point – himura Oct 29 '16 at 18:30

What we call SOC generally have much more powerful processor core than uC does. Usually you can find ARM core there. Almost all "big" ARM processors, like Cortex A series, produced today are actually SOCs. To run large OS like Linux you need a lot of RAM so SOCs have external RAM controller supporting modern SDRAM chips. Small amount of built-in static RAM used only at boot phase to run boot loader and initialize peripherals and SDRAM controller.

uCs usually are complete all-in-one solutions with built-in static RAM (quite small amount). Small RAM and lacking of MMU prevents using big OSes on them. Today most of uCs have either 8 bit or 32 bit core. 16 bit uCs used in legacy applications only. The era of 32 bit uSc began with ARM M series cores. These cores are designed especially for uCs and have a very little in common with big ARMs except instructions set (ARM M uses THUMB instructions, a subset of ARM instruction set).

DSP term is about core architecture. DSPs have more than one ALU and have so called VLIW (very long instruction word) instruction sets. VLIW instruction is composed of a number of sub-instructions (about 4) targeted to different CPU subsystems. For example such a long instruction can contain an instruction to prefetch data from memory, an multiplication instruction to specialized multiplier-ALU, and an arithmetic instruction to general-purpose ALU.

You can use DSP as general purpose uC but main purpose is digital data processing (not only signals, but video too). Digital filters, media compression/decompression algorithms have benefit from DSP parallelized architecture.

Modern CPU cores usually have a sort os "DSP extensions" in form of vector instructions (you can perform the same arithmetic operation on a number of, about 8, operants). It's something different than DSPs VLIW instructions.

• "Almost all ARM processors produced today are actually SOCs" really? do you consider Cortex-M0 chips like the LPC810 SOCs?? – Wouter van Ooijen Oct 29 '16 at 17:29
• I have mentioned Cortex M series separately while talking about uCs. Cortex M are uCs obviously. – e_asphyx Oct 30 '16 at 16:49