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

电器工程 数字信号处理器 微控制器 微芯片 图片
2022-01-01 23:19:06

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

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

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

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

4个回答

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

通常来说,一般来说:

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

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

从历史上看,如果您想处理音频流、视频流、进行快速电机控制,以及任何需要高速处理数据流的事情,您都会寻找 DSP。

如果你想控制一些按钮,测量温度,运行字符 LCD,控制其他正在处理事物的 IC,你会使用微控制器。

今天,您通常会发现通用微控制器类型的处理器,它们要么内置类似 DSP 的指令,要么带有片上协处理器来处理流数据或其他 DSP 操作。除了在特定行业之外,您再也看不到纯 DSP 的使用了。

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

编辑:我想我会补充一点来解释即使在应用处理器时代我何时/何地使用过 DSP。

我最近设计的一个产品是使用每个“区域”的 X 个输入通道和 X 个输出通道进行音频处理。该产品的预期用途意味着它经常会坐在那里做自己的事情,处理音频通道数年而没有任何人接触它。音频处理由各种声学滤波器和功能组成。该系统还具有“热插拔”功能,能够在一个盒子中添加一些独立的“区域”。总共有 3 个 PCB 设计(主板、背板和插件模块),背板支持 4 个插件模块。一个非常有趣的项目,因为我是一个人做的,我要做系统设计、原理图、PCB布局和固件。

现在我可以用一个笨重的 ARM 内核来完成所有的事情,我只需要大约 50MIPS 的 DSP 处理每个区域的 24 位定点数。但是因为我知道这个系统会运行很长时间,并且知道它永远不会点击或弹出或类似的东西是至关重要的。我选择使用每个区域的低功耗 DSP 和发挥系统管理作用的单个 PIC 微控制器来实现它。这样,即使其中一个 uC 功能崩溃了,可能是对它的以太网端口的 DDOS 攻击,DSP 也会很高兴地继续前进,而且很可能没有人知道。

因此,微控制器发挥了运行 2 行字符 LCD、一些按钮、温度监控和风扇控制的作用(每块板上还有一些相当高功率的音频放大器),甚至通过以太网提供 AJAX 风格的网页。它还通过串行连接管理 DSP。

因此,即使在我可以使用单个 ARM 内核来做所有事情的日子里,设计也需要专用的信号处理 IC。

我遇到 DSP 的其他领域:

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

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

*声纳处理

*实时计算机视觉

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

许多数字信号处理器包括“普通”处理器所没有的多种功能:

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

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

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

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

DSP与标准uController的最大区别在于uC所不具备的DSP的乘法累加功能(MAC)。如果您想要执行真正的数字信号处理数学,例如 FFT(一个示例),这很有价值。与在 DSP 的 MAC 上执行 FFT 相比,在标准微控制器中执行 FFT 需要很长时间。

处理 I2C 和串行信号与处理 DSP 中的波形不同。由于串行信号只是位碰撞,因此正在进行完全不同类型的处理。

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