接口综合lab4:实现AXI4接口
概述
这个练习说明了在I/O端口中指定AXI4总线接口,这个练习除了增加AXI4接口外还展示了如何创建一个用接口和逻辑指令一起优化的设计。
步骤1:创建和打开工程
1.在先前的lab中用VivadoHLS命令提示符,更改为lab4目录
2.键入vivado_hls -f run_hls.tcl 来创建新的Vivado HLS工程
3.键入vivado_hls -p axi_interfaces_prj 来打开vivado HLS 用户界面工程
4.打开源代码如图84
此设计用的是和Lab3一样的源代码,并在设计重命名axi_interfaces
步骤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并右击打开DirectivesEditor对话框
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. 选择enableloop rewinding(使能重复循环)
IV. 点击OK
当设计顶层是循环,你可以用选择流水线重复,这个通知vivadoHLS 在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
5:综合设计
当报告打开,只有RTL端口为AXI4 Slave Lite的接口出现在接口摘要
6:选择从工具栏导出RTL(Export RTL),或者解决方案(Solution)菜单来创建IP包
7:保持格式选择项为IP Catalog点击OK
您可以在solution2/impl文件夹中看见IP包如图88,因为你用vivado IP Catalog格式,这个包在ip文件夹中
Ip文件夹包括了drivers 子文件夹,如图88
当你在设计中添加了AXI4-Lite接口时,IP封装过程还创建软件驱动程序文件,使外部模块,通常一个CPU,以控制该块(启动,停止,设置端口值,检查中断状态)。
8:双击xaxi_interfaces_hw.h文件在信息窗口中打开
这显示了地址访问和控制的块级接口信号例如,设置控制寄存器从0到1,将使能ap_start端口,另外设定位7将使能自动重启动,使设计将在每个事务结束时自动重新启动。
其余C驱动程序文件是用来整合AXI4-Slave-Lite接口控制嵌入在CPU或微控制器上运行的代码,并包含在IP封装中。
结论在本教程中,您学习:
•有哪些块级I / O协议,以及如何控制它们。
•如何指定和应用端口级的I / O协议。
•如何指定阵列端口RAM和FIFO的接口。
•如何划分的RAM和FIFO接口为子端口。
•如何使用两个I / O指令和优化指令来创建AXI4接口的优化设计。