学习内容
关于axi总线协议的一些简单知识,通过阅读xilinx的使用指导手册(ug1037),结合正点原子的zynq视频进行梳理总结。
axi
axi(advanced extensible interface) 高级扩展接口是arm amba的一部分。(amba(advanced microcontroller bus architecture) 高级微控制器总线架构)
amba:高级微控制器总线架构,是1996年首次引用的一组微控制器总线协议。开放的片内互联的总线标准,能在多主机设计中实现多个控制器和外围设备之间的连接和管理。在xilinx公司的芯片也广泛地使用axi接口用于开发和设计。使用axi总线接口可以提高效率、开发的灵活性,以及可移植性。
axi4 三种类型
axi4(axi4-full)
axi4(axi4-full):用于高性能的存储器映射需求;(存储器映射:主机在对从机进行读写操作时,指定一个目标地址,这个地址对应系统存储空间的地址,表示对该空间进读写操作。)axi4用于存储器映射接口,允许高达256个数据的的高吞吐量突发传输,并且传输周期只需要一个地址。
axi4-lite
axi4-lite:简化版的axi4接口。用于低吞吐率存储器映射的通信。axi4-lite是一个轻量级、单次传输存储器映射接口。它使用了少量的逻辑器件进行实现总线功能,axi4-lite接口简单,在设计开发中简单易用。
axi4-stream
axi4-stream:用于高速的流数据通信。axi4-stream完全去除了对地址的需求,并允许无限制数据大小的数据突发的数据传输。axi4-stream接口在传输时没有使用地址单元,所以不是存储器映射。所以在对于那些只关心数据,对地址不关心或者没有地址需求的接口,可以采用axi4-stream接口。
axi的工作方式
axi4和axi4-lite包含5个独立的通道:
写地址通道
读地址通道
写数据通道
读数据通道
写响应通道
数据可以同时在主机和从机之间双向移动,并且数据传输大小可以不同。axi4中的限制是一个突发传输最多可以传输256个数据。axi4-lite只允许单次传输一个数据。
读取数据
下图演示了axi总线如何进行读取数据的操作:首先由主机通过读取地址通道发送地址和读操作的指令,在从机接收到读操作,并正确读取从主机发送的地址,通过读取数据通道将数据由从机发送到主机。
写入数据
下图演示了axi总线如何进行写入数据的操作:首先由主机通过写入地址通道发送地址和写操作的指令,在从机接收到写操作,开始接收主机从读取数据通道发送的数据信息并写入从机,当完成写入操作后,写响应通道将回应写响应。
存储器映射协议
通过赋予每个任务不同的虚拟–物理地址转换映射,支持不同任务之间的保护。地址转换函数在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。就是把一个地址连接到另一个地址。
axi4-stream协议
axi4-stream协议用于通常用于以数据为主和数据流的应用实例中,其中不存在或不需要地址的概念。每个axi4-stream都充当一个单向通道,并带有一个握手数据流。
连接存储器映射和 axi4-stream
一种常见的方法是构建将axi4-stream和axi内存映射ip结合在一起的系统。通常,dma的ip可用于将数据流移入或移出内存。例如,处理器可以与dma一起工作来解码数据包,或者在流数据之上实现一个协议栈,从而构建更复杂的系统,使数据在不同的应用程序空间或不同的ip之间移动。
使用hls添加axi接口
在hls中支持函数自动综合生成下面的axi总线接口:• axi4-stream (axis)• axi4-lite slave (s_axilite)• axi4 master (m_axi)
hls axi4-stream interface
你可以将axi4-stream接口(axis模式)应用于任何输入参数和任何数组或指针输出参数。因为axis 4- stream接口以顺序流的方式传输数据,所以不能与既可读又可写的参数一起使用。在设计时候又分为带side-channel和不带side-channel。带side-channel:使用带有边通道的axis4 - stream接口提供了额外的功能,允许作为组件的一部分的可选side-channel axi4-stream标准,可直接用于c代码。(这里我的理解是使用axi接口做了拓展功能)不带side-channel:使用axi4-stream 时候,数据类型不包含任何axi4 side-channel的参数。(这里我的理解是仅仅使用数据流的交互)下面给出一个hls设计的实例:综合后对于a、b两个端口,都被定义为了axi4-stream的接口。而多了valid和ready用于检测数据的是否有效和准备状态。
hls axi4-lite interface
axi4-lite slave接口通常用于可以被微控制器和处理器控制的外设和设备接口。axi4-lite slave接口的vivado hls特性(s_axilite模式):
将多个端口分组到同一个axi4-lite从接口。
将设计导出到vivado ip目录时,输出c函数和头文件以与处理器上运行的代码一起使用。下面给出一个多个不同端口分配到一个接口的实例:
void example(char *a, char *b, char *c){#pragma hls interface s_axilite port=return bundle=bus_a#pragma hls interface s_axilite port=a bundle=bus_a#pragma hls interface s_axilite port=b bundle=bus_a#pragma hls interface s_axilite port=c bundle=bus_a*c += *a + *b;}
综合后的结果:
hls axi4 master interface
您可以在任何数组或指针/引用参数、实现hls axi4 master接口(m_axi模式)。该接口使用两种模式:一是单独的数据传输,二是使用c memcpy功能的突发模式数据传输。单独的数据传输模式:在这两个例子中,通过axi4 master接口进行的数据传输都是简单的读或写操作:一次传输一个地址和一个数据值。突发模式传输: 突发模式使用一个单一的基址传输数据,该基址后面跟着多个连续的数据样本,并且能够实现更高的数据吞吐量。只有在使用c memcpy函数将数据读入或读出用于合成的顶级函数时,才可能使用突发模式。下面给出一个具体实例:
void example(volatile int *a){#pragma hls interface m_axi depth=50 port=a#pragma hls interface s_axilite port=return bundle=axilites//port a is assigned to an axi4-master interfaceint i;int buff[50];// memcpy creates a burst access to memorymemcpy(buff,(const int*)a,50*sizeof(int));for(i=0; i < 50; i++){buff[i] = buff[i] + 100;}memcpy((int *)a,buff,50*sizeof(int));}
当你用前面的例子合成一个设计时,它会产生如下图所示的接口(axi接口):
原文标题:使用hls添加axi接口
文章出处:【微信公众号:fpga之家】欢迎添加关注!文章转载请注明出处。
Asciinema:终端日志记录神器
基于AD538的反正切近似计算电路图
USB Type-C/PD常见问题全面答疑(附参考设计)
施耐德电气中压变频器ATV1200,降低核电厂的厂用电率
旁路电容和去耦电容的基础知识
AXI总线协议的简单知识
交流电方向为什么会不断变化
vivoX20、华为荣耀畅玩7X对比评测:谁才是全面屏性价比王者?
圆柱齿轮减速机的拆卸方法及拆装顺序
适合直播手机推荐:一加5,oppor11,荣耀9,从此女神不再是路人!
比特币的炒作带给了中国什么
印刷电路板如何叠层
AR+LBS 实景应用来袭!2017年将进入集体爆发期
询问应用工程师:建立时间
三安光电碳化硅传获车规级质量认证 通过IATF 16949:2016质量管理体系认证
物联网的设备管理为什么会如此的重要
基板玻璃的现状及发展趋势
史上最美小屏旗舰:性能媲美iPhone6s,仅2788
如何解决传导干扰(八大对策解决传导干扰难题)
芯闻3分钟:时隔五年ARM再次向数据中心领域发起进攻