端口协议和rtl的对应
一、ap_none协议
1.ap_none协议是free-run协议,其对应的是rtl中的wire类型;
2.ap_none协议最通用的场景是实现rtl设计的parameter功能,比如mode模式类型,或者width和height
这些参数,只不过parameter是参数,ap_none实现paramter是当作wire信号输出模块,这个是比较常见
的应用;
3.ap_none协议其实可以兼容ap_stable协议的参数功能,也就是说在复位期间参数改变,复位之后参数保持不变
4.ap_none作为信号,比如vs,hs,de这种时序信号,这个时候需要被hls的模块采样,那么你就需要注意,
一旦你将其作为普通的数据控制信号,那么你模块采样要求很高:
其一,你的hls模块需要通过组合逻辑路径去采样ap_none信号,为什么?因为ap_none信号是时刻可变的,你必须
时刻要把ap_none信号采集走,那么你的模块必须设计为组合逻辑,才能实现这个功能;
其二,你的hls模块需要实现II=1的设计,也就是说你每个clock都能把ap_none的数据采集走,也就是说如果
ap_none的输入每个时钟一个样本,你要采集走,那么你的模块设计的II=1是必要的,否则功能就错误了。
5.ap_none协议用于普通的数据,那么你这个模块就是数据驱动的设计,那么其实这个很难保证功能正确的,
因为这个hls工具没有采样边界了,这里说的采样边界,就是不知道什么时候开始采集,什么时候停止采集,那么这个
就要求你的逻辑设计要么是组合逻辑设计,要么是II=1的设计,否则就会出问题。
二、ap_stable协议
这个协议的用途不是很多,主要有两个用途:
1.用于复位期间改变的信号,常用于配置初始化寄存器参数,也就是实现rtl的paramter功能
2.ap_stable用于对数组进行修饰,以便在dataflow流程中优化数组的访问,提高II;
三、ap_vld
ap_vld就是带valid信号的协议,也就是valid + data模式
四、ap_ack
这个就是inpu_data + output_ap_ack模式,其中ap_ack作为应答,
表示数据被采集走了,输入端可以改变了。
五、ap_hs
ap_hs = ap_vld + ap_ack;
handshake握手协议。
六、ap_ovld
output_data + output_valid
七、ap_fifo
fifo接口,作为写FIFO接口或者读FIFO接口。
八、ap_bus
这个接口用的很少,一般为指针使用。
九、ap_memory & bram
用于访问ram的接口。可能双端口,可能单单口。
十、axis接口
数据流接口
十一、s_axilte接口
寄存器配置从接口,MCU或者CPU对hls ip模块进行配置。
hls ip模块是被动的,没有m_axilite接口,这个需要注意。
十二、m_axi
full总线访问,访问ddr,访问axi interconnect模块
