HLS学习(一)接口管理

来源:UG902 第一章 第五节  Managing Interfaces

接口不仅涉及到数据的输入输出效率,还涉及到生成IP之后,如何进行和PS的连接等问题,所以这个地方还是要仔细做个笔记。

#include "sum_io.h"
dout_t sum_io(din_t in1, din_t in2, dio_t *sum) {
dout_t temp;
*sum = in1 + in2 + *sum;
temp = in1 + in2;
return temp;
}

该代码主要包括:

两个传值参数

一个Read-write指针参数 sum

一个函数 return

综合之后的结果:

HLS学习(一)接口管理_第1张图片

 按照三种颜色对应三种不同类型的端口:

黄色 时钟和复位

红色 Block-Level interface protocol ,默认为ap-ctrl;该协议的作用:These ports control when the block can start processing data (ap_start), indicate when it is ready to accept new inputs (ap_ready) and indicate if the design is idle (ap_idle) or has completed operation (ap_done).

绿色 Port Level interface protocols,函数参数和函数返回综合出的端口,数据从这些端口输入输出模块;

分类:

函数传值和指针时,默认不会综合出端口级别的握手协议,只会综合出一个数据端口;

输出指针默认综合出一个output valid signal来表示输出数据可用可读。对于输出端口如果没有协议,就很难知道什么时候输出数据可用了。比如输出为sum_o,那么也会综合出一个sum_o_ap_vld.端口

当函数有返回值时,会综合出一个ap_return值来提供返回值,这代表着函数的一次执行完成, Block-Level的ap_done就生效,这就代表着ap_return生效可以被读出。

这里注意:函数返回值不可以是指针~

HLS学习(一)接口管理_第2张图片

上图 表示了函数参数类型,以及对应的可以被综合成的端口协议 port-level 。

对于 Port-Level Interface Protocols:

1. AXI4 Interfaces的解释:

  • AXI4 interfaces 包括三种接口;
  • AXI4-Stream interface:支持输入或者输出参数,不能是INOUT参数
  • AXI4-Lite interface:除了数组,可以为任何参数指定,
  • AXI4 master interface:只可以为数组或者制作参数指定或者C++引用参数

2. No I/O Protocol

ap_none 和ap_stable用来指定该端口没有端口协议;

3. Wire Handshakes

4. Memory Interfaces

数组参数会默认综合为ap_memory interface,这是一个标准的block RAM interface 同时包括 data, address, chip-enable and write-enable ports,这几个端口。ap_memory 可以实现为单端口或者双端口,如果双端口可以减少interval,会自动实现为双端口。如果用RESOURCE directive指定数组为单端口block RAM,那么该端口为单端口,如果综合为双端口,但是实际并没性能的提升,那么HLS还会把它综合成单端口。

关于BRAM的解释要看UG998,一个BRAM,一般要么是18k 要么是36k bits. 然后用BRAM的总数量×18k bits或者36k bits就是BRAM的总容量。

然后是结构体的接口综合

如何制定interface mode on ports,HLS学习(一)接口管理_第3张图片

P96详细介绍了各个参数的作用。 对于register表示所有传值的数据都会采样, depth表示会有多少采样或者输出会保存多少数据。

你可能感兴趣的:(FPGA)