接口综合lab2:接口I/O协议
概述
这个实验解释了怎么指定具体的端口I/O协议。
1.在lab1中用Vivado HLS命令提示符,更改为lab2目录,如图64
2.键入vivado_hls-f run_hls.tcl 来创建新的VivadoHLS工程
Figure 64: Setup for Interface SynthesisLab 2
3. 键入vivado_hls -padders_io_prj 来打开vivado HLS 用户界面工程
4. 打开源代码如图65
Figure 65: C Code for Interface Synthesis Lab 2
本练习的源代码是与lab1类似。出于同样的原因使用简单的代码,它有助于聚焦在接口的行为,而不是核心逻辑。
这一次,代码没有一个函数的返回,取代函数输出的是通过指针参数* in_out1输出。这也提供了机会,探索双向(输入输出)端口的接口选项。
I/ O协议的类型,你可以通过接口综合添加到C函数的参数取决于参数类型。这些选项在Vivado高层次综合用户指南(UG902)有完整描述。
在本实施例中的指针参数既是输入和输出的功能。在RTL设计中,该参数被实现为单独的输入和输出端口。
对于图65所示的代码,每个函数参数可能的选项在下表中被描述
函数参数 |
I/O协议选择 |
In1 和 In2 |
按值传递的参数都可以用下面的I / O协议来实现 Ap_none:没有I/O协议,这个是默认的输入 Ap_stable:无I/O协议 Ap_ack:实现与相关的输出端口确认 Ap_val:实现与相关的输入有效端口 Ap_hs:实现了两个输入有效和输出端口确认。 |
In_out1 |
按引用传递的输出可以用下面的I/O协议实现 Ap_none:没有I/O协议,这个是默认的输入 Ap_stable:无I/O协议 Ap_ack:实现与相关的输出端口确认 Ap_val:实现与相关输出的有效端口,这个是默认的输出 ap_ovld:实现与相关输出有效端口,(任何INOUT端口的输入部分没有有效的端口) ap_hs:实现所有输入有效端口和输出响应端口 •ap_fifo:FIFO接口与相关输出写入,输入FIFO满端口 •ap_bus:Vivado HLS总线接口协议
|
在实验1中应用的端口指令实际上不是必需的,因为AP_NONE是使用这些C参数的默认I/ O协议。在这个练习中给出了指令,以避免处理任何默认或不是默认的I / O端口协议的行为。
在本练习中,您将实现一系列的I / O协议。
步骤2:端口具体的I/O协议
1. 保证能在信息窗口中看见C源代码
2. 激活指令选项卡(Directives tab)并选择输入参数in1(input argument in1),如图66
Figure 66: AddingPort I/O Protocols
3. 右击并选择插入指令(Insert Directives)
4. 当指令编辑窗口打开,使指令下来框为INTERFACE
a. 保持目标是默认值,这次,指令被存储在directives.tcl文件中。
b. 从模式下来菜单选择ap_val
c. 点击OK
5. 选择参数 in2 ,添加一个接口指令指定I/O协议为ap_ack
6. 选择参数in_out1并添加一个接口指令I/0协议为ap_hs
7. 在资源管理器窗口中,扩展约束文件夹,并双击打开directives.tcl文件,如图67
Figure 67: Directives for Lab 2
8. 综合设计
9. 当文件打开时,查看接口概述,如图68
Figure 68: Interface summary for Lab 2
设计有时钟和复位
默认块级I/O协议信号是存在的
端口in1被以数据端口而实现,并伴随输入有效信号
数据在in1端口上,仅读。当端口in1_ap_vld为有效高。
端口in2被综合为数据端口,并与输出响应信号相关联。
当端口in2被读时,端口in2_ap_ack将被置高
inout_i定义为inout1参数的输入部分,与输入有效端口inout1_i_ap_val相关联,并且输出响应端口inout1_i_ap_ack
•inout1参数输出部分定义为inout_o,与输出有效端口inout1_o_ap_val相关联,并输入响应端口inout1_o_ap_ack.
10. 退出vivado HLS GUI 并且返回命令提示口