尽管当今的高性FPGA具有专用硬件来实现乘累加(MAC)等数字信号处理(DSP)算法基本构建模块,但设计人员还需要在寄存器传送级(RTL)上加速算法的实现。那么,如何才能从ANSI C++建模算法迅速转换到运行在FPGA硬件中的RTL呢?本文告诉你。
Stratix III FPGA芯片图。
StratixIV FPGA芯片图。
在本文第一部分的讨论中,我们知道了在目前的基于FPGA的图像处理设计流程,以C++等高级语言编写的算法函数模型必须采用手动方式编码为RTL。但手动建立RTL的方法不但耗时,而且容易出错,对后端布线延时问题非常敏感。因此我们必须考虑采用能够从ANSI C++建模算法迅速转换到运行在FPGA硬件中的RTL实现方法。在接下来的第二部分讨论中,我们就将讨论如何利用Catapult的ASIC功能和Altera加速库自动顺利实现这一设计过程。
为顺利实现这一非常耗时的过程,Catapult C高级综合设计过程首先对算法进行描述,然后选择目标技术。算法描述是纯粹的ANSI C++源代码,只对功能进行说明。并行和接口协议等硬件要求可通过约束在Catapult中实现,从而也指导了综合过程。
例如,下面的算法是一个基本有限冲击响应(FIR)滤波器,使用免费的Mentor Graphics Algorithmic C数据类型(加链接)来定义接口和内部位宽度。
C++算法并没有说明需要多少乘法器以及什么类型的乘法器来实现硬件。因此,系统规划人员不用在实施细节上花费太多精力就能够有效的建立算法。
下一步是确定目标技术和关键规范。在Catapult中,目标技术可以是ASIC或者FPGA,与源代码描述无关。Catapult C综合使用专用技术库特征参数来建立最佳运算库,例如加法器和乘法器等。这一特性描述过程收集器件专用资源详细的面积和时序信息,使Catapult能够建立技术预知计划,不会浪费HLS探察过程中RTL综合时间。其结果是快速的前端面积/性能估算,得到专用技术RTL输出。
指定好目标技术以及时钟频率后,设计人员可以使用自动高级综合技术自由地进行设计。由于自动过程比手动RTL编码快得多,设计人员能够关注更多的选项,综合考虑面积和性能,所实现的硬件完全满足设计目标要求。高级综合工具对目标技术非常清楚,根据时钟频率要求来选择合适的运算,在需要的地方增加系统级流水线,确保不会违反时钟频率约束。设计人员可以使用开环和环流水线等高级综合约束,研究从最短串联到全并联实现的多种微体系结构(对比图1和图2中的具体实现)。
图1:串联FIR实现。
图2:并联FIR实现。
在接下来的第三部分讨论中,我们将讨论如何选择调度所需要的运算以满足时钟频率约束,以及如何采用高级综合资源约束来减小后端走线延时,敬请留意。