步骤2:创建采用AXI4 流接口的一个优化设计
在这种设计最佳性能实现中,每个通道的数据将进行并行处理,每个通道以专用硬件实现。
理解的关键是如何最好地执行这种优化,是要认识到在输入和输出数组中的通道让他们自己成为循环分区。循环分区是Vivado HLS用户指南中有全面的解释(UG902,但基本上意味着每个数组元素,又存储在不同分区中。)
在本练习中,您指定的数组参数,以实现为AXI4流接口。如果该数组被划分成多个通道,你可以通过在并行设计中为每个端口元素实现相同的流接口。
最后,如果在I / O端口被配置为提供和利用通道数据时,for循环的局部展开可以为每个通道确保专用硬件处理。
首先,分区阵列:
1:保证C源代码在信息窗口中打开
2:在指令标签中,选择d_o并右击打开指令编辑对话框。
a. 选择上部Directives中的下拉菜单,并选择ARRAY_PARTITION
b. 点击Type的下拉菜单,并指定为cyclic分区
c. 在Factor对话框中,输入8,创建8个分区(这个结果在8个端口中)
d. 在指令编辑对话框中填充如图85,点击OK
3:在指令标签中,选择d_o并右击打开Directives Editor对话框
a. 激活上部Directives下拉菜单,选择INTERFACE
b. 点击Mode下拉菜单,指定axis接口
c. 点击OK
4:在指令标签中,选择d_i并重复上述步骤2和步骤3。
a. 应用cyclic分区并且Factor为8
b. 应用axis接口
5:下一步,对for循环进行局部展开和流水线操作。
a. 在指令标签中,选择For_Loop并且右击打开Directives Editor对话框
b. 激活上部的Directives下拉菜单,选择UNROLL
I. 选择因素8(factor 8)部分展开for循环,这等同于重写C代码以每一次循环迭代中执行8个循环体的复制(其中,新的循环仅在总执行用于四次迭代,而不是32)。
II. 点击OK
c. 在指令标签中,选择For_loop并右击打开Directives Editor对话框。
I. 激活上部的Directives下拉菜单,并选择PIPELINE
II. 保持间隔空白,让他默认为1
III. 选择enable loop rewinding(使能重复循环)
IV. 点击OK
当设计顶层是循环,你可以用选择流水线重复,这个通知vivado HLS 在RTL实现中,这个循环连续运行(与功能和功能重新启动周期没有结束)。
在执行了上述步骤,指令标签如图86。检查保证所有的选择都正确的应用。如果没有,双击指令重新打开Directives Editor
6.综合设计
当报告在信息窗口中打开,确认d_i和d_o被8个独立的AXI4流接口实现
7.在设计中的性能部分,确认每个时钟周期对for循环的处理样本(间隔1)以3延迟,并且设计有比实验3解决方案2,3,或4使用的资源更小(图83)。
阵列接口和部分for循环展开的循环分区允许执行该C代码在硬件上实现八个单独的通道。
步骤3:实现AXI4-Lite接口
在这个练习中,您可以把块级I/O协议端口组成简单的AXI4 Lite接口,AXI4 Lite接口容许这些块级控制信号被控制,由CPU访问
1:从工具栏中选择New Solution或者从工程(project menu)菜单来创建新的解决方案
2:设置默认,点击Finish,包括从solution1种复制存在的指令
3:保证C源代码在信息窗口中可见
4:在指令选项卡中,选择顶层函数axi_interface并且右击打开Directives Editor对话框。
a. 在对话框上部激活Directives下来菜单,并选择INTERFACE
b. 激活mode下拉菜单,并选择s_axilite.这指定了与函数返回(块级I / O端口)被实现为一个AXI4Lite接口相关联的端口。由于默认模式为函数的返回是ap_hs,这里需要指定该I / O协议。
c. 点击OK
指令标签显示如图87