Thursday, 22 June 2017

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)




Answer



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.



No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...