目录
Interface synthesis Overview
如上图所示,对于蓝色区域的C语言代码,在下方vivado生成的接口信息中,包含了代码中的四个参数in1、in2、in3以及return,这些被称为port-level interface protocol。而列表中还包含了几个我们在代码中看不见的接口参数(vivado根据接口类型自动生成的),分别是ap_start、ap_done、ap_idle、ap_ready(下面会讲分别是什么),这些参数被称为block-level interface protocol。(interface protocol表示接口协议)
Block-level Interface protocol
block-level interface protocol只能作用于函数或者函数的返回值
三种可用的protocol(协议)
- ap_ctrl_hs (最常用的一种)
- ap_ctrl_none
- ap_ctrl_chain
ap_ctrl_hs vs. ap_ctrl_none
从上图的接口信息中我们可以看到,ap_ctrl_hs会生成相应的block-level 的接口信号,而ap_ctrl_none则不会生成。
block-level接口参数介绍
- ap_start:高电位表示该模块已经可以开始处理数据(进入工作状态)
- ap_idle:高电位表示该模块当前为空闲状态
- ap_ready:高电位表示该模块当前可以接收新的数据
- ap_done:高电位表示该模块操作已完成(与ap_ready同步)
信号 | 说明 |
---|---|
ap_start | 该信号控制模块执行,逻辑为1时设计开始运行。 它应保持逻辑1直到相应的输出握手ap_ready被置位。当ap_ready变高时,决定了是否继续保持ap_start置位并执行其他事物或设置ap_start为逻辑0,当前事务的结束时允许设计暂停。 如果在ap_ready为逻辑1 之前ap_start被置为低,设计有可能没有把所有输入端口读完,并可能拖延下一个输入读取操作。 |
ap_ready | 这个输出信号表明设计已经准备好接受新数据 当准备好接受新的输入时,ap_ready 信号设置为逻辑1。表明所有为这次事物的输入读已经完成。 如果设计不是流水线操作,直到下一次事物才开始执行新的读。 这个信号是用来决定何时在端口上用新的值,决定是否用一个ap_start输入信号来启动一个新的事务。 如果ap_start信号没有被设置为高,当设计在当前事务完成中所有的操作,这个信号变为低电平。 |
ap_done | 这个信号表明设计在当前的事务中完成所有的操作。输出逻辑1表明设计已经完成了这个事务的所有操作。因为在事务结束时,该信号为逻辑1还表示ap_return端口上的数据是有效的。 不是所有的函数都有函数返回值,因此并非所有的RTL设计都有一个ap_return端口 |
ap_idle | 这个信号表示设计正在操作或闲置状态(无操作)。 输出端口上用逻辑1表明是空闲状态。一旦设计开始运行,该信号为低电平。 该信号为高电平时,设计完成操作,未进行任何进一步的操作。 |
由上图中的仿真波形我们可以看到,当模块的rst信号置地以后,ap_start信号被拉高,同时ap_idle信号拉低,表示现在模块已经进入工作状态。当ap_start信号为低电位时,表示模块当前正在处理数据,同时ap_done也为低电位。当当前的数据处理完成后,ap_ready电位拉高,表示可以接受下一波数据。同时ap_done信号也被拉高,表示当前数据处理完成。
port-level interface protocol
对于输入形参
一共有两种接口
接口 | 说明 |
---|---|
ap_none | 默认类型,该类型不止用任何I/O转换协议,对应于HDL中的wire类型 |
ap_stable | 只用于输入信号,其具体实现方式仍为ap_none。它用于向Vivado HLS的综合器表明该信号在两次复位之间值是不变的。 |
对于双向的参数(in-out)(ap_ovld)
对于双向参数,只有一种对应的接口,即为(ap_ovld)。下面是它对应不同参数时的具体作用。
对应参数 | 说明 |
---|---|
输入信号 | 其效果与ap_none是一样的 |
输出信号 | 其效果与ap_vld是一样的 |
双向(in-out)信号 | 输入使用ap_none处理,输出使用ap_vld处理 |
其他接口信号
接口信号 | 说明 |
---|---|
ap_vld | 在数据端口port_name的基础上创建一个额外的数据有效信号指示< port_name >_vld |
ap_ack | 在数据端口port_name的基础上创建一个额外的应答信号指示< port_name >_ack |
ap_hs | 使用该类型,则会同时创建额外的数据有效信号和应答信号,其效果相当于ap_vld与ap_ack之和 |