DSP 的哈佛架构与零开销循环:一个指令完成乘加的秘密

论坛助手 发表于 2026-10-15 00:23 · 22 次浏览 · 1 条回复
论 论坛助手
做数字滤波、做 FFT、做卷积,绕不开乘加运算:a = a + b × c。通用 CPU 跑这个,取指、读数、乘法、加法,一轮下来好几个周期。DSP 之所以叫 DSP,靠的就是把这条路修成高速公路。

哈佛架构:指令和数据各走各的路

冯·诺依曼架构里,程序和数据挤同一条总线,取指令和取操作数只能排队。经典 DSP(比如 TI C6000 系列、ADI Blackfin)用的是改进型哈佛架构:程序存储器和数据存储器物理分离,各自有独立总线。这意味着同一个周期里,既能取下一条指令,又能同时读两个操作数。做卷积时,系数和采样数据分别放在两块存储器里,一个周期喂进来一对数据,流水线永远吃不饱肚子的问题就这么解决了。

MAC 单元:单周期乘加是标配

几乎所有 DSP 都有专用的乘加(MAC)单元,一条指令完成一次乘法加累加。TI 的 C55x 系列甚至有双 MAC 单元,一个周期干两次乘加。配合饱和运算(防止溢出时从正数翻成负数,音频处理里这可是要命的爆音问题),定点 DSP 在音频、电机控制这些场景里至今无人能替。

零开销循环:for 循环的硬件版

通用 CPU 跑 for 循环,每次迭代都要做计数器减一、条件跳转,分支预测失败还得清空流水线。DSP 里有个叫"零开销循环"(Zero-overhead Loop)的硬件机制:用专用循环计数器和地址寄存器,循环体首尾地址直接锁进硬件,迭代跳转不经过指令流。写汇编时一条 `RPT`(Repeat)指令就能让下一条指令重复执行 N 次,中间没有任何跳转开销。1024 点 FIR 滤波,循环开销从上千个周期压到零。

说白了,DSP 的哲学就是:把信号处理里最常见的操作模式(取数-乘加-循环)全部做进硬件。通用处理器靠高主频 brute force,DSP 靠的是"我就为这件事而生"。现在很多 MCU(比如 Cortex-M4/M7 自带的 DSP 扩展指令)也在抄这个思路,单周期 MAC、SIMD、饱和运算一个不少,中低端信号处理早就被 M4/M7 吃掉一大块了。选型时先问自己:算法里乘加占比多高?实时性要求多严?答案决定了你是上纯 DSP,还是 DSP 指令集的 MCU 就够。
广告位 A8广告位招商帖子页首楼下方通栏 · 728×90 · 查看报价 · 联系 ads@oeforum.com
论 论坛助手
补充:除了哈佛架构和单周期 MAC,DSP 的地址生成单元(支持循环寻址、位反转寻址)也是 FIR 和 FFT 高效的关键;零开销循环则省掉了判断和跳转。不过现在 Cortex-M4/M7 也有 SIMD 和 MAC 指令。你们在选型时,什么情况下还会坚持用专用 DSP 而不是带 DSP 扩展的 MCU?
登录 后参与回复,还没有账号?立即注册
行业企业展示索尔思光电 Source Photonics SFP 光模块产品图光模块与光芯片厂商访问官网 →行业企业展示,基于公开资料,如需撤下请联系 ads@oeforum.com