DSP和标准微控制器之间有什么区别?


84

我了解DSP已针对数字信号处理进行了优化,但是我不确定这对选择IC的任务有何影响。我使用微控制器所做的几乎所有事情都涉及数字信号的处理!

例如,让我们比较流行的Microchip dsPIC30或33 DSP及其其他16位产品PIC24通用微控制器。dsPIC和PIC可以配置为具有相同的内存和速度,它们具有相似的外围设备,相似的A / D功能,引脚数,电流消耗等。Digikey列表中唯一出现的主要区别是其位置。振荡器。我无法通过查看价格(或其他任何字段)来区分差异。

如果我想使用使用各种协议(I2C,SPI等)的几个外部传感器,请进行一些A / D转换,将一些数据存储在串行闪存中,响应一些按钮,然后将数据推出一个字符LCD和FT232(相当通用的嵌入式系统),我应该使用哪个芯片?看来DSP不会以任何方式落后于PIC,它提供了这种神秘的“ DSP引擎”。我的代码总是做数学运算,偶尔我需要浮点数或小数,但是我不知道使用DSP是否会受益。

在另一个供应商的DSP和微控制器之间进行更一般的比较同样有用。我只是将这些用作讨论的起点。

Answers:


64

老实说,如今两者之间的界线几乎消失了,有些处理器可以归为两者(例如,AD Blackfin)。

一般来说:

微控制器是带有中断子系统的整数数学处理器。有些可能具有硬件乘法单元,有些则没有,等等。重点是它们是为简单的数学设计的,主要用于控制其他设备。

DSP是为流信号处理而优化的处理器。它们通常具有特殊的指令,可以加快常见任务的速度,例如在单个指令中进行乘累加。它们通常还具有其他向量或SIMD指令。从历史上看,它们不是基于中断的系统,而是使用针对其目的进行了优化的非标准内存系统进行操作,从而使其难以编程。它们通常设计为在一个大循环中处理数据流。DSP可以设计为整数,定点或浮点处理器。

从历史上看,如果您想处理音频流,视频流,进行快速的电动机控制,那么任何需要高速处理数据流的事情都可以找DSP来解决。

如果要控制某些按钮,测量温度,运行字符LCD,控制正在处理事物的其他IC,则可以使用微控制器。

如今,您通常会找到通用微控制器类型的处理器,这些处理器具有内置的类似DSP的指令或具有处理流数据或其他DSP操作的片上协处理器。除特定行业外,您不会再看到使用纯DSP的东西了。

处理器市场比以往更加广阔和模糊。例如,我几乎不认为ARM cortex-A8 SoC是微控制器,但它可能符合标准定义,尤其是在PoP封装中。

编辑:弄清楚我什至要解释一下什至在应用处理器时代我何时/何地使用过DSP。

我设计的最新产品是对每个“区域”的X通道输入和X通道输出进行音频处理。该产品的预期用途意味着它经常会坐在那里做它的事情,处理音频通道数年之久,而没有任何人触摸它。音频处理包括各种声学滤波器和功能。该系统也是“热插拔”的,能够在一个盒子中添加一定数量的独立“区域”。总共有3种PCB设计(主板,背板和插件模块),背板支持4种插件模块。当我独自完成一个非常有趣的项目时,我必须进行系统设计,原理图,PCB布局和固件。

现在,我可以用一个笨拙的ARM内核完成全部工作,我只需要在每个区域的24位定点编号上使用大约50MIPS的DSP工作即可。但是因为我知道该系统将运行很长时间,并且知道绝对不要单击或弹出或类似的东西,这一点至关重要。我选择用每个区域一个低功耗DSP和一个扮演系统管理角色的PIC微控制器来实现它。这样,即使uC功能之一崩溃了,也许在其以太网端口上发生了DDOS攻击,DSP也会欣喜若狂地继续前进,这很可能没人会知道。

因此,微控制器扮演了运行两行字符LCD,一些按钮,温度监控和风扇控制(每块板上还存在一些功率相当大的音频放大器)的角色,甚至通过以太网提供了AJAX风格的网页。它还通过串行连接管理DSP。

因此,即使在我本可以使用单个ARM内核完成所有工作的时代,该设计也要求使用专用的信号处理IC。

我遇到过DSP的其他领域:

*高端音频-高端接收器和音乐会品质的混音和处理设备

*雷达处理-我还在低端应用程序中使用了ARM内核。

*声纳处理

*实时计算机视觉

在大多数情况下,音频/视频/类似空间的低端和中端已由应用处理器接管,这些处理器将通用CPU与用于不同应用的协同处理卸载引擎结合在一起。


1
也许另外一个补充。在具有大约80条I / O线和12条模拟输入的应用中,我们现在使用带有链接FPGA的单个微控制器来处理I / O流。这样的解决方案变得越来越普遍。我们正在使用以下系统:embeddedarm.com/products/board-detail.php? product = ts-7800,以加快开发速度并缩短上市时间,我必须说它运行良好(当然,这样的产品可能不适合具有较低售价/期望值的应用。)– Wouter Simons 33秒钟前
Wouter Simons 2010年

并非所有的微控制器都有中断。在关键任务应用中,它们从未使用过。例子:战斗机中使用的Viper控制器。
stevenvh 2011年

15

许多数字信号处理器包括“普通”处理器中未提供的各种功能:

  1. 从RAM中获取两个操作数时,以每对操作数一个周期的速率执行乘法累加的能力。
  2. 执行某种形式的“模”或“包装”寻址的能力,以便允许重复使用缓冲区,而不必使用手动代码来确保指针换行。例如,3205x有一个“缓冲区开始”和“缓冲区结束”寄存器。如果代码试图递增或递减指向“缓冲区开始”的指针寄存器,则处理器将使用“缓冲区结束”加载指针。3205x还具有反向传送模式,其中地址添加的传播会将MSB传送到LSB,反之亦然;如果N是2的幂,这将允许对N进行模寻址,尽管会以混乱的顺序存储东西。
  3. 指定一条指令执行“ n”次而无需重新获取的能力。一些处理器(例如8088)在一些指令中包含了此指令,但是许多DSP在许多指令中都允许使用此指令。
  4. 指定重复执行代码块的能力,最多可以执行n次,而无需分支。在每次获取代码之前,都要根据“循环结束”寄存器检查程序计数器。如果匹配,并且启用了循环,程序计数器将重新加载“循环启动”(否则将递增)。如果“循环计数”为零,则将禁用循环。否则,“循环计数”将减少。

请注意,许多DSP将具有单独的总线,以允许同时获取一个乘累加的两个操作数。我从未见过可以做到这一点的非DSP。虽然我不知道芯片必须“缺乏”才能成为DSP的任何功能,但允许进行双操作数提取所需的额外硅空间是未被用于其他用途的硅空间。


我熟悉乘法累加,但是模寻址和重复的无获取代码执行是我不熟悉的功能。
凯文·维米尔

1
您有很多不错的答案,并且同时处理新旧问题也很酷。如果不是欺诈检测算法和每日报告上限,我将仔细检查并回答所有答案。不过,希望有几天!继续努力!
凯文·维米尔

@reemrevnivek:很高兴您发现我的回答很有用。如前所述,双取乘法累加设计是我在非DSP处理器上从未见过的功能。ARM在需要乘法累加和模寻址(对于256字节表使用有效地址,例如(R0 +(R1 >> 24))的操作方面做得很好,但是典型的ARM将需要四个指令来执行操作一个DSP执行一个周期。
supercat

MAC是三个操作数指令a <-a + b * c而不是两个。
Trismegistos

@Trismegistos:一个N项重复的MAC操作将涉及总共2N + 1个操作数。无需在每个项目之前获取累加器,然后再存储它。虽然具有非重复乘加的处理器可能具有三个操作数,但是重复MAC每个周期仅获取两个操作数。
超级猫

13

其他人没有提到的一件事是数字溢出的行为。在普通处理器中,这通常从最大值到最小值回绕。

对于DSP的使用,通常至少可以选择使用饱和度代替。也就是说,在溢出时,该值保持最大值,这将产生较小的失真并更好地模拟模拟电路的行为。


9

DSP与标准uController之间的最大区别是uC没有的DSP乘法累加功能(MAC)。如果您想执行真正的数字信号处理数学运算(例如FFT),这将非常有用(一个示例)。与在DSP的MAC上执行FFT相比,在标准的微控制器中执行FFT会花费很长时间。

处理I2C和串行信号与处理DSP中的波形不同。由于串行信号只是位撞击,因此进行的处理方式完全不同。

这是DSP论坛上的类似讨论:DSP与微处理器


我在DSP框图上看到了一个累加器,但不知道它做了什么。很高兴知道!我了解,当您发送ASCII数据时,I2C和串行与处理波形并不相同,但是某些外围设备(串行访问加速度计,外部A / D,GPS等)在其数据流中对波形进行编码。必须获取进入DSP!
Kevin Vermeer 2010年

3
数学上,大多数信号处理都包括将矩阵和/或向量相乘在一起。这样做的过程导致大量的答案= a b + c d + e * f类型计算。在没有MAC且需要执行大量指令的CPU上,使用MAC可以使速度提高许多倍。
马克

1
此评论完全错误。并非全部,但是许多MCU都包含具有MAC功能的硬件乘法器。这与DSP与MCU的区别无关。是的,与MCU相比,DSP更可能具有MAC,但是与该小功能相比,它们之间的根本差异要大得多。

2
如果将时钟倒退15年,几乎看不到具有此功能的MCU。如果您从DSP中删除MAC或等效功能,您是否可以诚实地说您拥有DSP?如果没有它或也有接近的东西,我当然不想买。当您进入哈佛大学与冯·诺依曼大学和内存访问时,架构有所不同,但是我给出了一个简单的答案,而没有进行详尽的解释。我认为您说“ Flat out WRONG”对您的评论太苛刻。欢迎您发布答案,讨论您认为需要涵盖的深度。
杰·阿特金森

@adrian:您的评论完全错误。如果MCU具有MAC功能,它将作为DSP销售。
约翰。

5

使DSP与众不同的是它们对算术运算(尤其是乘法)的优化,尽管如今,微控制器具有乘法和除法指令并不罕见。就DSP芯片进行信号处理而言,可能仍然存在优势,因为其中一些芯片支持定点数学运算(例如TI TMS320s“ IQ”库),而微芯片则更可能只包含整数单元。

就个人而言,当面临在设计两者之间进行选择时,我会尝试将应用程序分类为仅使用偶尔的模式更改逻辑来进行重复计算,还是仅在需要时执行简短的计算序列。前者是DSP,后者是微型芯片。

然后,当然,OMAP等有趣的东西兼具了两者。= P


1
我想我了解意图的差异(第二段),但是我不确定为什么当微控制器没有像DSP一样的数学能力而DSP却有像微控制器那样的外围设备时我会这么做。如我在OP中所述,dsPIC33和PIC24可以具有几乎相同的功能集和相同的价格。如果我错了,请纠正我,但是虽然DSP具有重复的处理功能,但我认为PIC24(或我看过的任何其他微型器件)在模式更改方面不比DSP有任何优势,例如双流水线或更快的FLASH。
Kevin Vermeer 2010年

@reemrevnivek:您是在说,为什么不总是选择DSP?
JustJeff 2010年

@JustJeff:是的,这就是我的意思。
Kevin Vermeer 2010年

1

MAC指令可以具有的另一个可能功能是自动增加指向被乘数的寄存器。我编写了一个使用(16位定点)Clarkspur内核的Zilog DSP。它是哈佛架构的一种变体,具有三个总线,可以同时访问三个内存区域:指令存储器,数据内存库1和数据内存库2。在一个内存库中有一个数据流,在另一个内存库中有一个系数,可以对每个MAC /指针增量操作使用一条单周期指令执行FIR滤波器。在C中,单个指令如下所示:

累加器+ = rambank1 [r1 ++] * rambank2 [r2 ++];

并且当然对于每个系数重复该指令。

前面也没有指出,DSP(至少是我使用的较旧的DSP)通常是RISC架构,并且设计成在一个周期(或相同数量的周期)中执行许多或大多数指令。这样就可以对确定性的中断响应进行编程(中断行变为活动状态并执行ISR中的第一条指令之间的固定时钟计数),而其他大多数处理器则根据可变的时钟周期数响应中断。指向多周期指令中的中断。固定的执行时间可消除重复输出中的多个时钟时间抖动。

与OP对Microchip Pic和DSPic的比较相比,据我了解,在引入DSPic时,它主要只是带有MAC指令和其他一些附加功能的Pic,这当然可以加快微控制器执行信号处理功能的速度,但是(由于缺少所讨论的任何其他功能),它可能正在推动将该术语称为DSP。MSP430也具有带有硬件MAC的版本,但没有人称其为DSP。

我回想起10到15年前的阅读,英特尔的主流处理器正在添加MAC和类似的指令来进行“本地”信号处理(而不是在1990年代音频生产中常见的带有专用DSP处理器的扩展卡上) 56k拨号PC总线调制解调器仅是A / D和D / A转换器,并且依靠主处理器来完成调制解调器信号的编码和解码功能,因此就需要在那里更高效地使用处理器。DSP类型的指令大大加快了诸如视频编辑/编码/解码以及音频记录/制作之类的媒体使用。


阳光下没有新事物。<g>早在C语言的早期,增量和减量运算符就被设计为直接转换为PDP上的单个硬件指令。
皮特·贝克尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.