转自:https://cloud.tencent.com/developer/article/1695010
AXI 总线
上面介绍了AMBA总线中的两种,下面看下我们的主角—AXI,在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.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。
Stream的理解,可以想象一下水流,是连续不断的,向某一方向,以固定的速度输送的接口。以我们看视频为例,视频文件本来是保存在硬盘里的,怎么播放呢,不能一下子把整个文件都显示到屏幕上,而是以一定速度,连续不断地输出到屏幕上(每秒若干帧),这个过程就是流Stream接口完成的。
一、通信模型
图4‑10 AXI主设备与从设备之间的通信
从上图很容易看出,要通过AXI总线实现通信,我们需要一个主设备/上位机(Master)和一个从设备/下位机(Slave),并通过AXI总线将其相连。我们可以将上图中的主设备假定为CPU,从设备假定为RAM(DDR)。主设备和从设备的通信主要为了实现主设备对从设备的读写控制。
那如果多设备通过AXI进行连接呢?其实可以通过AXI Interconnect实现,在Vivado中也有类似的IP可以使用。
图4‑11 AXI Interconnect
AXI Interconnect可以将其简单地认为是一个带仲裁功能的多路选择器(MUX)。在配置从设备的地址时(Address)时,注意设备地址不能重叠,且地址分配时需要整块分配,而不是简单地跟在上个设备分配的地址之后继续分配。
关于地址分配举例如下:
图4‑12 地址分配举例
如上图所示,给Slave1分配好地址之后,直接接在Slave1的地址之后给Slave2分配地址是不行的,因为Slave2的地址范围(Address Range)过大,从0x40001000分配最多只能分配到0x40001FFF,即最多分配4K,而现在需要分配2G,应将地址偏移(Address Offset)设为2G的边界(boundary),即地址偏移+地址范围=FFFFFFFF,故此时地址偏移应该为0x80000000。
二、信号说明
首先说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 的应用的例子
表4‑11 各种 AXI 的应用的例子
接口 |
行业 |
应用例子 |
---|---|---|
AXI4 |
音频和视频 / 图像处理 |
视频 DMA |
|
通信 / 网络 |
以太网 VoIP 接收器,3GPP LTE 频道解码 r |
|
嵌入式处理 |
AXI/PLBV46 桥(为了向下兼容),ChipScope AXI 监视器 (为了调试 / 嵌入式系统诊断) |
|
|
|
AXI4-Lite |
音频和视频 / 图像处理 |
解交织器,Gamma 校正,图像边缘轻度增强 |
汽车 |
控制器区域网络 (CAN) |
|
通信 / 网络 |
10G 以太网 MAC,数字预失真 (DPD),波峰因数抑制 (CFR) |
|
嵌入式处理 |
硬件 ICAP,BRAM 接口控制器,外部设备控制器 |
|
AXI4-Stream |
音频和视频 / 图像处理 |
流式视频输入 / 输出,图像降噪 |
通信 / 网络 |
编码器 / 解码器,交织器 / 解交织器 |
|
DSP |
CORDIC,FFT,FIR 编译器 |
|
嵌入式处理 |
流 FIFO,以太网外设 |
AXI 接口
三种AXI接口分别是:
AXI-GP接口(4个) :是通用的AXI接口,包括两个32位主设备接口和两个32位从设备接口,用过改接口可以访问PS中的片内外设。
AXI-HP接口(4个):是高性能/带宽的标准的接口, PL模块作为主设备连接(从下图中箭头可以看出)。主要用于PL访问PS上的存储器(DDR和On-Chip RAM)
AXI-ACP接口(1个):是ARM多核架构下定义的一种接口,中文翻译为加速器一致性端口,用来管理DMA之类的不带缓存的AXI外设, PS端是Slave接口。
我们可以双击查看ZYNQ的IP核的内部配置,就能发现上述的三种接口,图中已用红色方框标记出来,我们可以清楚的看出接口连接与总线的走向:
总结以上特点如下表所示:
接口名称 |
接口描述 |
主机 |
从机 |
---|---|---|---|
M_AXI_GP0 |
通用 (AXI_GP) |
PS |
PL |
M_AXI_GP1 |
PS |
PL |
|
S_AXI_GP0 |
通用 (AXI_GP) |
PL |
PS |
S_AXI_GP1 |
PL |
PS |
|
S_AXI_ACP |
加速器一致性端口 (ACP),cache 一致性回话 |
PL |
PS |
S_AXI_HP0 |
带有读 / 写 FIFO 的高性能端口(AXI_HP) 。( 注意 AXI_HP 接口有时被称作 AXI Fifo 接口,或 AFI)。 |
PL |
PS |
S_AXI_HP1 |
PL |
PS |
|
S_AXI_HP2 |
PL |
PS |
|
S_AXI_HP3 |
PL |
PS |
注意接口命名的规范(在表 2.2 的第一列)是表示了 PS 的角色的,也就是说,第一个字母 “M” 表示 PS 是主机,而第一个字母 “S” 表示 PS 是从机。
在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-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-CDMA IP核,这个是由PL完成的将数据从内存的一个位置搬移到另一个位置,无需CPU来插手。
上面的IP是完成总线协议转换,如果需要做某些处理(如变换、迭代、训练……),则需要生成一个自定义Stream类型IP,与上面的Stream接口连接起来,实现数据输入输出。用户的功能在自定义Stream类型IP中实现。
oAXI 协议
讲到协议不可能说是撇开总线单讲协议,因为协议的制定也是要建立在总线构成之上的。虽然说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 握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。 传输源产生 VLAID 信号来指明何时数据或控制信息有效。而目地源产生 READY 信号来指明已经准备好接受数据或控制信息。传输发生在 VALID和 READY 信号同时为高的时候。 VALID 和 READY 信号的出现有三种关系。
AXI4和AXi4-stream都支持三种握手机制,但其具体的总线结构是不同的,详情在后文中会介绍。这三种握手机制分别是:
(1) VALID 先变高 READY 后变高。时序图如下:
上图中的模式为VALID信号先于READY信号拉高,此时数据在VALID信号和READY信号为高时,在时钟上升沿触发,开始传输在箭头处发生。
(2) READY 先变高 VALID 后变高。时序图如下:
上图中的模式为READY信号先于VALID信号拉高,此时数据在VALID信号和READY信号为高时,在时钟上升沿触发,同样在箭头处信息传输发生。
(3) VALID 和 READY 信号同时变高。时序图如下:
上图中的模式为READY信号伴随着VALID信号拉高,此时数据在VALID信号和READY信号为高时,在时钟上升沿触发。在这种情况下,信息传输立马发生,如图箭头处指明信息传输发生。
需要强调的是, AXI的五个通道,每个通道都有握手机制。
三、突发式读写
1、突发式读的时序图如下
按照传统的RAM的读写方式,给定一个Address,只能读取或者写入一个Data,但是在Burst模式下,给定一个Address,可以连续写入或者读取多组数据。
当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持 VALID 为低直到读数据有效。为了表明一次突发式读写的完成,设备用 RLAST 信号来表示最后一个被传输的数据。
2、 突发式写时序图如下:
这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时, WLAST 信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。