(TODO)
可以!荔枝糖(Tang EG4S20,高云GW2A)+树莓派5 这个组合非常适合你现在这条语音链路:FPGA专门做硬件定点DSP,树莓派5负责上层控制、编码、日志、算法调度。
一句话分工:FPGA = 硬实时信号流水线(IIR、Notch、AGC、RMS、VAD、DRC、多通道同步采样);Pi5 = 主机,Speex编码、保存、上位机交互、参数下发 优势:FPGA是硬件流水线,延迟极低、没有Linux调度抖动;Pi5不用扛繁重实时滤波,只做高层业务。
一、荔枝糖EG4S20能力(适配你的音频DSP)
- GW2A,有硬件DSP乘法单元(MAC),专门做定点乘加,天生适合Biquad IIR、Notch、RMS、限幅DRC;
- 资源:20K LUT、硬件乘法器、片上SRAM + SDRAM,跑80Hz高通、2k/3k陷波、AGC、RMS/VAD、Limiter轻轻松松;
- 适合:定点Q15音频(正好就是你前面学的这套),FPGA音频几乎全部定点;
- 短板:复杂AEC、ANS、STOI/PESQ这种大算法不适合直接塞Verilog,资源和开发量巨大;AEC一般交给Pi5或者软核。
二、两种主流硬件架构(推荐方案优先看方案1)
方案1:FPGA在采集链路中间(最贴合你现在的麦克风项目,推荐)
MEMS麦(PDM)/模拟麦+ADC → FPGA
FPGA内部硬件流水线:
PDM抽取 → 80Hz IIR高通 → 2k+3k Notch陷波 → RMS/VAD → AGC → DRC/Limiter → FIFO
FPGA ↔(I2S / SPI) ↔ 树莓派5
Pi5收到处理好的16bit PCM → Speex编码、存文件、上传、SNR计算
播放反向: Pi5输出PCM → FPGA → EQ、DRC → I2S输出给MAX98357功放 → 喇叭 ✅ 好处:
- 滤波、VAD、AGC全部硬件流水线,延迟稳定、极低,不受Linux抢占干扰;
- Pi5只接收处理干净后的PCM,CPU压力很小;
- 可以做多麦同步波束成形(FPGA做同步采样,这个是单片机/Pico很难做到的)。 👉 通信接口二选一:
- I2S:音频流,适合连续PCM,简单;
- SPI:带寄存器,Pi5可以下发IIR系数、阈值、AGC参数(动态改滤波器)。
方案2:Pi5出原始PCM,发给FPGA做DSP处理(适合验证)
Pi5用I2S读ADC原始PCM → SPI/I2S传给FPGA → FPGA硬件滤波 → 回传给Pi5。 缺点:多一次传输,延迟变大,不适合AEC、低延迟免提。
❌ 不推荐:FPGA跑软核RISC-V,然后软核软件跑DSP;那就失去FPGA硬件流水线的意义,不如直接Pico。
三、和你之前的方案对比
- 纯Pi5:DSP是软件,Linux调度抖动,延迟不稳定,AEC容易发散;
- 纯Pico2:算力有限,多阶IIR、多通道吃力;
- 荔枝糖FPGA + Pi5:各取所长
- FPGA:硬实时、定点MAC、同步采样、低延迟、滤波/AGC/VAD/DRC;
- Pi5:跑Speex、日志、SNR计算、控制界面、文件存储、网络上传。
四、开发流程(你可以按这个顺序上手)
- 在Matlab/Python算出滤波器系数(80Hz高通、2k/3k Notch),量化成Q15定点;
- Verilog写Biquad IIR模块(复用一套,例化多个)、RMS计算、VAD、AGC;全部定点;
- FPGA做I2S收发 + FIFO,做跨时钟域隔离(音频时钟和FPGA系统时钟不同);
- 写SPI寄存器接口:Pi5可以动态下发新的滤波器系数、阈值;
- 调通链路:先直通(不滤波),再逐个加IIR、Notch,用Pi5抓PCM看频谱验证效果;
- 进阶:FPGA输出RMS、SNR标志给Pi5,Pi5只做上层业务。
五、坑点(非常关键)
- FPGA音频必须定点Q15,浮点实现非常耗资源,不推荐;
- 跨时钟域:音频I2S时钟(16k fs)和FPGA主时钟(50M)不一样,一定要用异步FIFO;
- 系数动态更新:改IIR系数的时候,要避免中间状态突变带来爆音;
- 荔枝糖EG4S20没有内置ADC,麦克风ADC/PDM麦外设要外接;
- 分工边界别乱:简单固定滤波、VAD、AGC放FPGA;复杂自适应AEC、降噪、PESQ留给Pi5。
六、极简分工表
| 模块 | 放哪里 | 理由 |
|---|---|---|
| PDM抽取、IIR高通、Notch陷波、RMS、VAD、AGC、DRC/Limiter | FPGA(硬件流水线) | 低延迟、硬实时、定点MAC优势 |
| Speex编码、SNR计算、日志、文件保存、参数下发、UI | Pi5 | 软件灵活,适合复杂控制、浮点分析 |
| AEC自适应回声消除 | Pi5(优先) | 自适应迭代算法,Verilog写起来巨麻烦 |
如果你想要,我给你:
- 一份Verilog的Q15 Biquad IIR(80Hz高通)模板;
- 或者整套I2S+FIFO的顶层框架。