AXI总线的一些知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AXI总线的一些知识
AXI-stream总线简介-LDD
本节介绍的AXI是个什么东西呢,它其实不属于Zynq,不属于Xilinx,而是属于ARM。

它是ARM最新的总线接口,以前叫做AMBA,从3.0以后就称为AXI了。

Zynq是以ARM作为核心的,运行时也是第一个“醒”过来,然后找可执行代码,找到后进入FSBL(第一引导阶段),接着找配置逻辑部分的bit文件,找到后就叫醒PL按照bit中的方式运行,再接着找可执行代码,进入SSBL(第二引导阶段),这时就可以初始化操作系统的运行环境,引导像Linux这样的大型程序,随后将控制权交给Linux。

Linux运行时可以跟PL进行数据交互。

注意了,就在这时候,数据交互的通路,就是我们本节要讲的AXI总线。

说白了,AXI就是负责ARM与FPGA之间通信的专用数据通道。

ARM内部用硬件实现了AXI总线协议,包括9个物理接口,分别为AXI-GP0~AXI-GP3,AXI-HP0~AXI-HP3,AXI-ACP接口。

如下图黄圈所示。

可以看到,只有两个AXI-GP是Master Port,即主机接口,其余7个口都是Slave Port(从机接口)。

主机接口具有发起读写的权限,ARM可以利用两个AXI-GP主机接口主动访问PL 逻辑,其实就是把PL映射到某个地址,读写PL寄存器如同在读写自己的存储器。

其余从机接口就属于被动接口,接受来自PL的读写,逆来顺受。

这9个AXI接口性能也是不同的。

GP接口是32位的低性能接口,理论带宽600MB/s,而HP和ACP接口为64位高性能接口,理论带宽1200MB/s。

有人会问,为什么高性能接口不做成主机接口呢?这样可以由ARM发起高速数据传输。

答案是高性能接口根本不需要ARM CPU来负责数据搬移,真正的搬运工是位于PL中的DMA 控制器。

位于PS端的ARM直接有硬件支持AXI接口,而PL则需要使用逻辑实现相应的AXI协议。

Xilinx提供现成IP如AXI-DMA,AXI-GPIO,AXI-Datamover都实现了相应的接口,使用时直接从XPS的IP列表中添加即可实现相应的功能。

有时,用户需要开发自己定义的IP同PS进行通信,这时可以利用XPS向导生成对应的IP。

xps中用户自定义IP核可以拥有AXI-Lite,AXI4,AXI-Stream,PLB和FSL这些接口。

后两种由于ARM这一端不支持,所以不用。

AXI-Lite具有轻量级,结构简单的特点,适合小批量数据、简单控制场合。

不支持批量传输,读写时一次只能读写一个字(32bit)。

AXI4接口和AXI-Lite差不多,只是增加了一项功能就是批量传输,可以连续对一片地址进行一次性读写。

上面两种均采用内存映射控制方式,即ARM将用户自定义IP编入某一地址进行访问,读写时就像在读写自己的片内RAM,编程也很方便,开发难度较低。

代价就是资源占用过多,需要额外的读地址线、写地址线、读数据线、写数据线、写应答线这些信号线。

另外一种AXI接口就是AXI-Stream,这是一种连续流接口,不需要地址线(很像FIFO,一直读或一直写就行)。

对于这类IP,ARM不能通过上面的内存映射方式控制(FIFO根本没有地址的概念),必须有一个转换装置,例如AXI-DMA模块来实现内存映射到流式接口的转换。

AXI-Stream适用的场合有很多:视频流处理;通信协议转换;数字信号处理;无线通信等。

其本质都是针对数值流构建的数据通路,从信源(例如ARM内存、DMA、无线接收前端等)到信宿(例如HDMI显示器、音频输出等)构建起连续的数据流。

这种接口适合做实时信号处理。

有了上面的这些官方IP和向导生成的自定义IP,用户其实不需要对AXI时序了解太多(除非确实遇到问题),因为Xilinx已经将和AXI时序有关的细节都封装起来,用户只需要关注自己的逻辑实现即可
AXI4-Stream协议是一种用来连接需要交换数据的两个部件的标准接口,它可以用于连接一个产生数据的主机和一个接受数据的从机。

当然它也可以用于连接多个主机和从机。

该协议支持多种数据流使用相同共享总线集合,允许构建类似于路由、宽窄总线、窄宽总线等更为普遍的互联。

AXI4-Stream接口的信号线定义如图1所示[1]。

比较重要的信号线有:
ACLK为时钟线,所有信号都在ACLK上升沿被采样;
ARESETn为复位线,低电平有效;
TVALID为主机数据同步线,为高表示主机准备好发送数据;
TREADY为从机数据同步线,为高表示从机准备好接收数据;这两根线完成了主机与从机的
握手信号,一旦二者都变高有效,数据传输开始。

TDATA为数据线,主机发送,从机接收。

TKEEP为主机数据有效指示,为高代表对应的字节为有效字节,否则表示发送的为空字节。

TLAST为主机最后一个字指示,下一clk数据将无效,TVALID将变低。

TID,TDEST,TUSER均为多机通信时的信号,这里不涉及,不予考虑。

看到这里,可能大家都还对Stream没有一个直观的认识。

其实Stream并不陌生,在我们学c++编程时,一定会包含<iostream>,这样就可以完成控制终端对程序的输入输出了。

如果还是不够直观,想象一下连续不断的水流,永远向着一个方向以固定的速度输送的接口。

以我们看视频为例,视频文件本来是保存在硬盘里的,怎么播放呢,不能一下子把整个文件都显示到屏幕上,而是以一定的速度,连续不断地输出到屏幕上(每秒30~60帧),这个过程就是流Stream接口完成的。

Xilinx提供的流式IP核有很多用途,可以实现音频流、视频流、数据流到内存或者相反方向的传输。

有人问了,内存是PS控制的,怎么才能把PS里DDR2的内容以Stream形式发出去呢(例如以固定速度送往DA,完成信号发生器的设计)?答案就是利用AXI总线做转换。

ZYNQ的PS部分是ARM CortexA9系列,支持AXI4,AXI-Lite总线。

PL部分也有相应AXI总线接口,这样就能完成PS到PL的互联。

仅仅这样还不够,需要PL部分实现流式转换,即AXI-Stream接口实现。

Xilinx提供的从AXI到AXI-Stream转换的IP核有:AXI-DMA,AXI-Datamover,AXI-FIFO-MM2S以及AXI-VDMA等。

这些IP核可以在XPS的IP Catalog窗口中看到。

AXI-DMA:实现从PS内存到PL高速传输高速通道AXI-HP到AXI-Stream的转换;
AXI-FIFO-MM2S:实现从PS内存到PL通用传输通道AXI-GP到AXI-Stream的转换;
AXI-Datamover:实现从PS内存到PL高速传输高速通道AXI-HP到AXI-Stream的转换,只不过这次是完全由PL控制的,PS是完全被动的;
AXI-VDMA:实现从PS内存到PL高速传输高速通道AXI-HP到AXI-Stream的转换,只不过是专门针对视频、图像等二维数据的。

除了上面的还有一个AXI-CDMAIP核,这个是由PL完成的将数据从内存的一个位置搬移到另一个位置,无需CPU来插手。

这个和我们这里用的Stream没有关系,所以不表。

这里要和大家说明白一点,就是AXI总线和接口的区别。

总线是一种标准化接口,由数据线、地址线、控制线等构成,具有一定的强制性。

接口是其物理实现,即在硬件上的分配。

在ZYNQ中,支持AXI-Lite,AXI4和AXI-Stream三种总线,但PS与PL之间的接口却只支持前两种,AXI-Stream只能在PL中实现,不能直接和PS相连,必须通过AXI-Lite或AXI4转接。

PS 与PL之间的物理接口有9个,包括4个AXI-GP接口和4个AXI-HP接口、1个AXI-ACP接口,
均为内存映射型AXI接口。

上面的IP是完成总线协议转换,如果需要做某些处理(如变换、迭代、训练……),则需要生成一个自定义Stream类型IP,与上面的Stream接口连接起来,实现数据输入输出。

用户的功能在自定义Stream类型IP中实现。

---------------------
作者:GoUpToTheSky
来源:CSDN
原文:https:///GoUpToTheSky/article/details/80286628
版权声明:本文为博主原创文章,转载请附上博文链接!
ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议。

其中三种AXI 总线分别为:
AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;
AXI4-Lite:(For simple, low-throughput memory-mapped communication )是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。

AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。

说AXI4总线和AXI4-Lite总线具有相同的组成部分:
(1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;
(2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
(3)写地址通道,包含AWVALID,AWADDR, AWREADY信号;
(4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
(5)写应答通道,包含BVALID, BRESP, BREADY信号;
(6)系统通道,包含:ACLK,ARESETN信号。

AXI4总线和AXI4-Lite总线的信号也有他的命名特点:
读地址信号都是以AR开头(A:address;R:read)
写地址信号都是以AW开头(A:address;W:write)
读数据信号都是以R开头(R:read)
写数据信号都是以W开头(W:write)
应答型号都是以B开头(B:back(answer back))
而AXI4-Stream总线的组成有:
(1)ACLK信号:总线时钟,上升沿有效;
(2)ARESETN信号:总线复位,低电平有效
(3)TREADY信号:从机告诉主机做好传输准备;
(4)TDATA信号:数据,可选宽度32,64,128,256bit
(5)TSTRB信号:每一bit对应TDATA的一个有效字节,宽度为TDATA/8 (6)TLAST信号:主机告诉从机该次传输为突发传输的结尾;
(7)TVALID信号:主机告诉从机数据本次传输有效;
(8)TUSER信号:用户定义信号,宽度为128bit。

对于AXI4-Stream总线命名而言,除了总线时钟和总线复位,其他的信号线都是以T字母开头,后面跟上一个有意义的单词,看清这一点后,能帮助读者记忆每个信号线的意义。

如TVALID = T+单词Valid(有效)。

AXI 接口介绍
三种AXI接口分别是:
AXI-GP接口(4个):是通用的AXI接口,包括两个32位主设备接口和两个32位从设备接口,用该接口可以访问PS中的片内外设。

(AXI4)
AXI-HP接口(4个):是高性能/带宽的标准的接口,PL模块作为主设备连接(从下图中箭头可以看出)。

(AXI4-Lite)
主要用于PL访问PS上的存储器(DDR和On-Chip RAM)
AXI-ACP接口(1个)(AXI4-Stream):是ARM多核架构下定义的一种接口,中文翻译为加速器一致性端口,用来管理DMA(direct memory access)之类的不带缓存的AXI外设,PS端是Slave接口。

我们可以双击查看ZYNQ的IP核的内部配置,就能发现上述的三种接口。

(从图中可以看出,右边一个,下方有两个)
AXI 协议概述
讲到协议不可能说是撇开总线单讲协议,因为协议的制定也是要建立在总线构成之上的。

虽然说AXI4,AXI4-Lite,AXI4-Stream都是AXI4协议,但是各自细节上还是不同的。

总的来说,AXI总线协议的两端可以分为分为主(master)、从(slave)两端,他们之间一般需要通过一个AXI Interconnect相连接,作用是提供将一个或多个AXI主设备连接到一个或多个AXI从设备的一种交换机制。

当我们添加了zynq以及带AXI的IP后再进行自动连线时vivado会自动帮我们添加上这个IP。

AXI Interconnect的主要作用是,当存在多个主机以及从机器时,AXI Interconnect负责将它们联系并管理起来。

由于AXI支持乱序发送,乱序发送需要主机的ID信号支撑,而不同的主机发送的ID可能相同,而AXI Interconnect解决了这一问题,他会对不同主机的ID信号进行处理让ID 变得唯一。

AXI协议将读地址通道,读数据通道,写地址通道,写数据通道,写响应通道分开,各自通道都有自己的握手协议。

每个通道互不干扰却又彼此依赖。

这也是AXI高效的原因之一。

AXI 协议之握手协议
AXI4所采用的是一种READY,VALID握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。

当接收到READY信号后,再进行数据交互。

如下图所示:
需要强调的是,AXI的五个通道,每个通道都有握手机制,接下来我们就来分析一下
AXI-Lite的源码来更深入的了解AXI机制。

ZYNQ_AXI总线
文章目录
ZYNQ_AXI总线
Accelerator Coherency Port, AXI_ACP (加速一致性接口)
High Performance,AXI_HP
General Port,AXI_GP
axi_interconnect
channel protocol
summary
AXI(Advanced extensible Interface)总线是连通PS(programmable system)和
PL(programmable logic)的一个总线协议,最终的形式就相当于PL块作为一个ip core 挂载在AXI总线上,然后由PS调用
Accelerator Coherency Port, AXI_ACP (加速一致性接口)
CSDN_ACP
多核架构下定义的一种接口,用于管理DMA(direct memory access)之类不带缓存的AXI 外设
PS端是Slave接口,一通道
High Performance,AXI_HP
CNBLOG_AXI
高性能/带宽的AXI3.0标准接口,
PL模块作为主设备连接。

主要用于PL访问PS上的存储器(DDR和On-Chip RAM)
4通道,作为从机端
General Port,AXI_GP
AXI_XILINX
通用AXI接口,总共4个,两主两从
可以布一般的外设(低速)
axi_interconnect
IP_CORE_DATA_SHEET
GREAT_TECH
互联矩阵,相当于时分复用M个axi通道来挂载更多的外设
握手协议就是一个三态输出门(可以回想数电书,哈哈哈哈哈哈哈哈)
channel protocol
以下图片来源于黑金zynq教学
summary
用于赶项目进度,看了的资料就不整理成blog了,但是会保存在blog里面,后面跑通了再回头补全吧,其它博客或者官方说明文件都写得很好,我的博客只有寥寥几个字感性认识一下而已,没啥价值,还是读别人的东西比较好(毕竟赶时间嘛)
所以zynq中总共9个物理接口GP接口是32位的低性能接口,理论带宽600MB/s,而HP和ACP接口为64位高性能接口,理论带宽1200MB/s。

有人会问,为什么高性能接口不做成主机接口呢?这样可以由ARM发起高速数据传输。

答案是高性能接口根本不需要ARM CPU发起负责数据搬移,真正的搬运工是位于PL中的DMA控制器。

---------------------
作者:hhhhorrible
来源:CSDN
原文:https:///weixin_38071135/article/details/81009045
版权声明:本文为博主原创文章,转载请附上博文链接!。

相关文档
最新文档