电子工程学生
从架构角度给个思路。
整个系统可以分成两个模块:MFCC前端和神经网络后端。两者之间用Streaming接口(如AXI-Stream)连接,这样容易流水。
定点化方面,FFT的定点化已经有成熟方案,用IP核或者开源代码(如FPGA4Fun的FFT)。对数运算推荐用CORDIC,虽然慢但省资源,适合轻量级。精度评估要做一个黄金参考模型,用浮点结果对比定点结果的误差,看均方误差和关键点的相对误差。
流水线设计要平衡各级的处理时间。MFCC里最慢的是FFT,可以把它作为关键路径优化。神经网络如果是小模型,可以展开成全流水,每周期都输出一个结果。
资源优化上,Artix-7的BRAM比较宝贵,存权重时可以考虑量化到8位甚至4位。DSP用在关键乘法上,加法用逻辑资源做。
最后,别忘了时序约束,尤其是跨时钟域的地方。
