在移动通信领域,GSM标准的语音编解码器(Vocoder)是数字信号处理(DSP)的典型应用场景。传统基于通用处理器的软件实现方式往往面临实时性不足和功耗过高的问题。我们团队设计了一款专用于GSM语音编解码的16位定点DSP核心,通过FPGA实现硬件加速,显著提升了处理效率。
这个设计的核心创新点在于:
提示:在FPGA上实现DSP核心时,算法特性与硬件架构的匹配度直接影响最终性能。我们的设计特别关注了VSELP算法中大量出现的乘累加(L_mac)运算,为其设计了专用优化方案。
我们的DSP核心采用哈佛架构,将存储器与运算单元分离以提升数据吞吐率。如图1所示,系统主要分为两大模块:
存储器部分
运算部分
流水线深度选择
我们采用两级流水线设计:
这种设计特别针对VSELP算法中92%的L_mac运算都是递归运算(aₙ = aₙ₋₁ + b×c)的特点。通过将加法器输出直接反馈到输入寄存器,实现了单周期递归运算。
并行度控制
考虑到算法并行度和FPGA资源限制,我们采用选择性并行策略:
表2展示了各功能单元在Altera FLEX10KE FPGA上的实现结果:
| 功能单元 | 流水级数 | 延迟(ns) | 逻辑单元(LC) |
|---|---|---|---|
| L_mult | 2 | 26 | 581 |
| L_add | 1 | 23.9 | 65 |
| L_mac | 1 | 27.2 | 97 |
| L_shr | 1 | 21.6 | 147 |
乘法器设计
采用Booth编码的二级流水线结构:
加法器优化
使用超前进位(CLA)结构,关键路径延迟控制在24ns以内。针对递归运算特点,增加了专用旁路通路。
bank冲突避免策略
通过分析算法访存模式,我们设计了特殊的存储映射:
这种安排确保了95%以上的存储器访问都可以无冲突并行执行。
在EPF10K200EGC599-1器件上的实现结果:
表3展示了VSELP主要函数的实测性能:
| 函数 | 执行时间(μs) | L_mult调用次数 |
|---|---|---|
| openLoopLagSearch | 1018.81 | 26209 |
| sfrmAnalysis | 1098.66 | 15724 |
| Aflat | 1053.13 | 16373 |
| 整帧处理 | 7585.6 | 121244 |
实测表明,最坏情况下单帧处理时间为7.5856ms,远低于GSM要求的20ms时限。这意味着该核心可以轻松处理实时双声道编解码。
时序收敛问题
在初期实现时,我们遇到时钟频率无法达到目标的问题。通过以下措施最终实现36.36MHz:
功耗优化
实测发现动态功耗主要集中在存储器访问:
问题1:递归运算结果错误
症状:L_mac连续运算后结果漂移
解决方法:
问题2:存储数据损坏
症状:偶尔读取到错误系数
解决方法:
虽然本设计针对GSM语音编解码优化,但其架构也适用于其他领域:
通过替换ROM中的系数表和微调功能单元,我们已成功将其应用于G.729语音编解码,处理能力提升40%。这证明了该架构的良好可扩展性。
在Altera Cyclone IV E系列上的移植经验表明,只需调整存储器控制器和I/O配置,该设计可以轻松迁移到其他FPGA平台。最新的实现版本在Cyclone 10 LP上时钟频率可达42MHz,功耗降低35%。