一、介绍
下intel FPGA HLS接口主要是两大类接口
1、avalon mm接口–内存接口
1)avalon mm master接口
隐式mm接口、显式mm接口
2)avalon mm slave接口
2、avalon st接口–流接口
Avalon®接口规范
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_avalon_spec.pdf
例程
D:\intelFPGA\18.1\hls\examples\tutorials\interfaces
二、接口的作用和用途
Intel®FPGA中用于简化系统设计的简单连接模块,简单理解就是直接自动生成soc’连接的avalon总线的信号,不用自己要硬件描述语言去实现
三、接口使用
1、标量接口
参数a,b属于标量接口,会转换成ip信号
除了自己定义的接口会默认产生四个信号— start,busy,done,和stall 信号,我们称为默认接口,每个hls的ip都会有
表示对模块的调用和从模块返回的流接口
-start表示启动调用,并设置数据参数
- busy允许模块的反压
-done表示返回
-stall允许模块反压
其他看不到的信号
-管道,三态管道、中断、时钟、复位
2.Avalon®-MM接口
基于地址(内存映射)的协议,允许模块使用读/写请求进行通信
主接口
-用于针对特定地址的读/写传输
从接口
-接受和响应转移请求,主要应用在soc或者sopc的ip
互联处理对主地址请求的解码,用于实际的从接口、反压、时钟差异等
与时钟接口相关联
系统中HLS模块的内存映射
4、指针:隐式内存映射接口
在ip上面写指针参数会自动转换成mm接口,默认64位地址空间,数据位宽根据变量类型来固定比如int 32位
指针 波形
5、显示mm master接口
1)使用mm_master<>类显式声明Avalon-MM主机接口,可以自定义数据位宽、总线位宽以及删掉不必要的信号从而节省资源
用法: ihc::mm_master<datatype, /template arguments/>
2)IHC:mm_master类参数
其他属性包括read_write模式和在HLS编译器参考手册中描述的waitrequest
3)示例:
MM Master—波形
4)MM Master的寻址空间
拥有多个地址空间将创建多个MM Master
-允许在PD上同时进行多个控制
示例:
从接口
MM Slave模块 从模块
从寄存器
从存储器
MM Slave模块,用于soc或者sopc的ip设计
使用方法在设计ip前面再加上
hls_avalon_slave_compoent关键字
MM Slave寄存器参数,其实就是对应软件中的寄存器
可以独立于从模块使用
用于代替默认管道参数
适合较小的输入
使用方法
参数前面加上hls_avalon_slave_register_argument关键字
从存储器参数,对应参数上面的指针,对应软件要访问的内存,最终在ip内部会生成一块小内存用于软件访问
在模块内部的内存块中实现参数
-通过从接口访问
适用于指针参数
适用于较大的数组
可设置指定字节大小
从存储器—波形
最终接口的物理地址在生成的<component_name> _csr.h中可以看到,然后在软件中用指针映射过去操作,如下图
6、Avalon流接口(Avalon-ST)
流接口在通信上不经过内存总线,ip与ip和直接通信,用于视频图片处理比较合适
系统中的流式HLS模块
具有流接口的MM HLS模块
隐式流接口:标量函数参数成为hdl模块上的流水线输入端口
显式流接口
-使用ihc::stream_in<>和ihc::stream_out<>模板类
显式流式接口示例
显式流接口的读写操作
阻塞
如果接口无法保持,则阻塞调用read()和write()将暂停模块
-缓冲区为空时读取数据(或如果未缓存且有效,则取消中断)
-当缓冲区满时写入(或如果未缓冲和准备就绪时取消中断)
非阻塞读写
在模块中非阻塞可调用tryRead()和tryWrite()
-返回布尔值,以确定调用是否成功
完整的流输入示例
显式流接口波形
自定义显式流接口
用法: ihc::stream_in<datatype, /template arguments/>
其他属性包括HLS编译器参考手册中描述的bitsPerSymbol和readylatency
流数据包示例
使用包信号允许多个流调用站点
稳定参数
使用连线实现
减少输入数据的流水线级数,可以明显地节省寄存器
在模块调用期间不要更改的变量
示例: