尽管当今的高性能FPGA具有专用硬件来实现乘累加(MAC)等数字信号处理(DSP)算法基本构建模块,但设计人员还需要在寄存器传送级(RTL)上加速算法的实现。那么,如何才能从ANSI C++建模算法迅速转换到运行在FPGA硬件中的RTL呢?本文告诉你。
图5:Stratix III高级体系结构。
在本文第五部分的讨论中,我们介绍了Altera加速库函数以及如何使用这些加速库函数重新编写FIR源代码。在接下来的第六部分讨论中,我们将讨论固定走线延时时序问题以及加速库的按键式验证。
除了直接映射至Altera DSP模块以及其他的硬件特性之外,用户还可以利用加速库来解决比较难处理的后端时序问题,这些问题是由走线延时和拥塞造成的。如图5所示,时序失效的可能原因是DSP模块的进出走线。即使DSP模块输入和输出寄存器全部采用了流水线,也会发生这种情况。
Stratix III FPGA芯片图。
StratixIV FPGA芯片图。
加速库函数使用模板参数,为硬件映射运算输入输出增加其他的寄存器。这些额外的寄存器提供平衡走线延时的布局布线功能,从而解决了走线延时问题(图6)。这种方法相对于手动RTL编码的好处是它不需要重新进行设计。在RTL中实现这一功能可能需要对数据通路有限状态机(FSM)进行较大的改动。
图6: 使用增加的输入和输出寄存器来减小走线延时。
加速库的按键式验证
高级综合设计流程的一个关键要求是能够自动验证从非定时C++代码以及后RTL综合网表中生成的RTL。Catapult C自动验证流程不但对C++和RTL进行自动验证,而且还自动验证加速库C++模板函数和例化DSP宏的RTL。
从非定时纯C++开始,结合一组接口综合约束,可以自动建立SystemC验证结构,使C++源设计和测试台能够测试RTL和后RTL综合网表。这一自动生成的测试环境不但能够直接从C++测试台中采集输入激励和设计输出,而且生成了SystemC处理程序,在仿真平台上协同仿真RTL和C++。还对RTL仿真输出进行采集,自动对比C++源设计,以验证功能。
结论
具有专用DSP模块的高性能FPGA为实现大计算量的复杂算法提供了硬件平台,但是,设计人员仍然面临算法在硬件RTL上运行的挑战。Catapult C和Altera加速库相结合后,设计人员不但能够迅速实施算法,而且还可以直接访问Altera DSP模块,调整性能和时序,最终结果要优于其他C/C++综合技术。