你手里有一块FPGA开发板,想让它播放一首歌。不是放个"嘀"的提示音,而是让扬声器真正发出人声和旋律。整件事的技术链路其实只有三段:ADC把模拟信号变成数字,解码把压缩格式还原成PCM,DAC把数字信号变回模拟。下面逐步拆开。
第一步:ADC采样与数据搬运
模拟音频进入ADC后,按奈奎斯特定理,采样率至少是最高频率的2倍。CD音质44.1kHz/16bit,每秒要搬运约88KB数据。FPGA的强项是并行:用双端口FIFO做位宽转换,把ADC输出的窄数据流攒够再送后续模块,防止溢出。如果板子带PS端(比如ZYNQ),可以走AXI DMA让ARM核批量搬数据,PL端只负责采样时序和FIFO管理,压力小很多。
第二步:解码
播放MP3或AAC时,解码是计算最重的环节。工程上通常把乘加运算映射到DSP Slice(DSP48单元),吞吐率远高于纯LUT实现。如果PL端资源紧张,解码可以交给外部MCU或PS端ARM核跑,FPGA只管DMA搬运和DAC时序控制。未压缩的WAV/PCM文件可以跳过解码,数据直接经FIFO送到DAC。
第三步:DAC与模拟输出
PCM数据送进DAC,FPGA需要控制DAC时钟(一般取256倍采样率),通过I2S串行或SPI并行接口逐帧喂数据。输出端加一级抗镜像有源滤波器,把阶梯波还原成平滑的模拟音频。
整条链路里,跨时钟域(CDC)最易翻车:ADC采样时钟、DSP工作时钟、DAC时钟各不相干,处理不好就爆音、丢字。搞清楚每个信号属于哪个时钟域,用双触发器同步器或格雷码FIFO做跨域,是系统稳定跑的前提。
不一定。资源紧张时,解码跑在PS端(ZYNQ的ARM核)或外部MCU上,FPGA只负责DMA搬运和DAC时序。但如果是低延迟场景——实时混音、多通道音频矩阵——解码放PL端用DSP48硬算,延迟能压到微秒级,纯软件方案做不到。
建议先做WAV/PCM直放:跳过解码,重点练ADC→FIFO→DAC完整链路和CDC设计。跑通后再上MP3解码,用现成IP核改参数,把精力放在系统集成和ILA波形调试上,比从零写解码算法性价比高得多。
FPGA做音频,核心能力是并行时序控制和高速数据搬运。算法可以借IP,但时钟规划和数据通路必须自己攥在手里。
思考题:板子上ADC是8bit而DAC要求16bit,中间这级位宽转换你会怎么设计数据通路?
想从"看波形"进阶到"上板子跑通完整音频系统"?宸极教育实战课程覆盖Verilog基础到高速接口、DSP、企业级项目,21个实战项目全程带练,不是看视频,是跟着写、跟着调、跟着上板子。点击官网右下角客服窗口,告诉老师你的基础和目标,帮你匹配最合适的学习路径。
未经许可,禁止转载!
下一篇:没有了