尽管当今的高性能FPGA具有专用硬件来实现乘累加(MAC)等数字信号处理(DSP)算法基本构建模块,但设计人员还需要在寄存器传送级(RTL)上加速算法的实现。那么,如何才能从ANSI C++建模算法迅速转换到运行在FPGA硬件中的RTL呢?本文告诉你。
Stratix III FPGA芯片图。
StratixIV FPGA芯片图。
当今的高性能FPGA,如Altera的Stratix IV等器件,为设计工程师提供了可满足他们对新一代无线和视频算法计算需求的硬件平台。尽管这些器件具有专用硬件来实现乘累加(MAC)等数字信号处理(DSP)算法基本构建模块,但设计人员还需要在寄存器传送级(RTL)上加速算法的实现。
以前的设计流程含有C++等高级语言编写的算法函数模型,将其手动编码为RTL。手动建立RTL的方法不但耗时,而且容易出错,对后端布线延时问题非常敏感。Catapult高级C++综合被用于构建ASIC硬件子系统,例如无线、视频和图像处理领域非常复杂并且需要进行大量计算的应用。Catapult的ASIC功能和Altera加速库相结合,使设计人员能够从ANSI C++建模算法迅速转换到运行在FPGA硬件中的RTL。而且,这一设计流程还帮助设计人员直接从C++中找到FPGA DSP模块,使用高级综合约束,很容易解决后端时序问题。
使用高级综合开发DSP算法
在典型的DSP算法设计流程中,软件设计人员或者系统规划人员采用C++等高级语言对算法建模。在更高级的抽象层上,系统规划人员可以将精力集中在功能上,而不用担心实施细节,例如系统流水线,以及需要多少FPGA DSP模块才能满足性能要求等。算法功能可行后,建立完全符合面积和性能标准的规范,传送给RTL设计人员。
RTL设计人员确定实现这些规范所需要的资源类型和数量,决定采用哪些硬件资源,例如RAM、DSP模块和移位寄存器的数量等。由于RTL综合工具的推断功能不能充分利用专用硬件资源的所有工作模式,因此,很难有效地进行RTL编码。为解决这一问题,RTL设计人员一般在RTL代码中例化DSP宏,直接通过类/参数来配置DSP模块。但是,这要求硬件设计人员知道怎样实现这些模块和系统其他部分的接口。
在接下来的第二部分讨论中,我们将详细介绍如何顺利实现Catapult C高级综合设计过程,敬请留意。