本节将介绍Xilinx公司的高级综合(High Level Synthesis,HLS)工具,包括HLS的特性、调度和绑定,以及提取控制逻辑和I/O端口。
高级综合(HLS)工具是Xilinx公司推出的最新一代的FPGA设计工具,其设计流程如图4.31所示。HLS工具的出现,使得可以直接使用C/C++语言对数字信号处理算法进行建模,然后通过Xilinx提供的HLS工具将其转换为RTL级的代码/IP核等嵌入设计中。通过HLS工具,一方面减少了传统上使用HDL语言对算法建模的难度,提高了建模和验证模型的速度;另一方面,读者可以探索在使用不同策略的情况下,算法在FPGA内实现时所消耗的逻辑资源和实现性能等问题。
图4.31 高级综合(HLS)工具的设计流程
HLS工具对C模型的处理包括调度和绑定,对于下面使用C语言描述的例子:
其调度和绑定过程如图4.32所示。
图4.32 HLS的调度和绑定过程
从图4.32中可知,在调度阶段,HLS工具调度下面的操作:
(1)第一个时钟周期内,执行乘法和第一个加法操作。
(2)在第二个时钟周期内,执行第二个加法操作,以及产生输出。
对于这个例子的初始绑定阶段,HLS使用组合逻辑构成的乘法器(Mul)实现乘法操作,使用组合逻辑构成的加法器/减法器(AddSub)实现所有的加法操作。
在目标绑定阶段,HLS使用DSP48资源实现所有的乘法和一个加法操作。前面已经介绍过,DSP48资源是FPGA内提供的一个可用的计算模块,它实现了高性能和高效率之间的权衡。
对于下面的C语言例子,提取控制逻辑和I/O端口的过程如图4.33所示。
图4.33 HLS工具提取控制逻辑和I/O端口的过程
对于该例子而言,它在for循环中执行操作,函数的两个参数是数组。当调度代码时,最终的设计在for循环内执行3次运算。HLS工具从C代码中自动提取控制逻辑,然后在RTL设计中创建FSM,用于给这些操作安排执行的顺序。HLS工具实现将顶层函数参数作为最终RTL设计的端口,将标量类型的char类型变量映射到8位数据总线端口,数组参数(如输入和输出)包含一个完整的数据集。
在高级综合中,默认将数组综合为块RAM,但是有其他可能的选择,如FIFO、分布式RAM和独立的寄存器。当在顶层函数中使用数组作为参数时,HLS假设BRAM在顶层函数的外部,并且自动创建端口(如数据端口、地址端口和任何所要求的芯片使能或写使能信号)访问该设计外的某个BRAM。
FSM起始于状态C0。在下一个时钟周期,它进入到状态C1,然后依次是C2和C3。它返回到状态C1(C2,C3),在返回状态C0之前,总计是3次。
注:下面的 “{}” 控制C代码for循环内的控制结构。完整的状态顺序是C0、{C1,C2,C3}、{C1,C2,C3}、{C1,C2,C3},然后返回C0。