参考:https://blog.csdn.net/burningCky/article/details/109630018
https://blog.csdn.net/bleauchat/article/details/96891619?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162951776716780262570363%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162951776716780262570363&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-96891619.first_rank_v2_pc_rank_v29&utm_term=AXI&spm=1018.2226.3001.4187
概念:
AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构
AHB (Advanced High-performance Bus) 高级高性能总线
ASB (Advanced System Bus) 高级系统总线
APB (Advanced Peripheral Bus) 高级外围总线
AXI (Advanced eXtensible Interface) 高级可拓展接口
适用场景:
AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
APB主要用在低速且低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。 APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。
AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。
Master:能够发起读写操作,提供地址和控制信号,同一时间只有1个Master会被激活。
Slave:在给定的地址范围内对读写操作作响应,并对Master返回成功、失败或者等待等状态。
Arbiter:负责保证总线上一次只有1个Master在工作。仲裁协议是规定的,但是仲裁算法可以根据应用决定。
Decoder:负责对地址进行解码,并提供片选信号到各Slave。
HADDR:32位系统地址总线
HTRANS:M指示传输状态,NONSEQ、SEQ、IDLE、BUSY
HWRITE:传输方向1-写,0-读
HSIZE:传输单位
HBURST:传输的burst类型
HWDATA:写数据总线,从M写到S
HREADY:S应答M是否读写操作传输完成,1-传输完成,0-需延长传输周期。需要注意的是HREADY作为总线上的信号,它是M和S的输入;同时每个S需要输出自HREADY。所以对于S会有两个HREADY信号,一个来自总线的输入,一个自己给到多路器的输出。
HRESP:S应答当前传输状态,OKAY、ERROR、RETRY、SPLIT。
HRDATA:读数据总线,从S读到M。
两个阶段
地址周期(AP),只有一个cycle
数据周期(DP),由HREADY信号决定需要几个cycle
流水线传送
先是地址周期,然后是数据周期
AHB协议需要一次突发传输的所有地址,地址与数据锁定对应关系,后一次突发传输必须在前次传输完成才能进行。
AXI只需要一次突发的首地址,可以连续发送多个突发传输首地址而无需等待前次突发传输完成,并且多个数据可以交错传递,此特征大大提高了总线的利用率。
AHB总线与AXI总线均适用于高性能、高带宽的SoC系统,但AXI具有更好的灵活性,而且能够读写通道并行发送,互不影响;更重要的是,AXI总线支持乱序传输,能够有效地利用总线的带宽,平衡内部系统。因此SoC系统中,均以AXI总线为主总线,通过桥连接AHB总线与APB总线,这样能够增加SoC系统的灵活性,更加合理地把不同特征IP分配到总线上。
主要应用在低带宽的外设上,如UART、 I2C,它的架构不像AHB总线是多主设备的架构,APB总线的唯一主设备是APB桥(与AXI或APB相连),因此不需要仲裁一些Request/grant信号。APB的协议也十分简单,甚至不是流水的操作,固定两个时钟周期完成一次读或写的操作。其特性包括:两个时钟周期传输,无需等待周期和回应信号,控制逻辑简单,只有四个控制信号。APB上的传输可用如图所示的状态图来说明。
APB是AMBA 3协议系列的一部分。 它提供了一种低成本接口,该接口经过了优化,可最大程度降低功耗并降低接口复杂性。 APB可以连接到任何低带宽且不需要流水线总线接口的高性能的外围设备。 APB是非流水线协议。
所有信号跳变仅与时钟的上升沿相关,从而能够将APB外设轻松集成到任何设计流程中。 每次传输至少需要两个周期。
APB协议的特点:
低成本
低功耗
低带宽
无流水线
所有信号都是时钟上升沿有效
进行一次数据传输至少需要两个周期
APB协议里面就是说的怎么进行数据传输,首先协议里面定义了很多端口,我们先来看看APB2协议里这些端口的定义。
##1.3、 APB传输时序
从状态机看,APB对每一笔数据的传送,均需花 2 个周期的时间,且 APB 的数据传递不适用在有流水线架构的模块设计中。
1、系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。
2、当有传输要进行时,PSELx=1,,PENABLE=0,系统进入SETUP状态,并只会在SETUP状态停留一个周期。当PCLK的下一个上升沿到来时,系统进入ENABLE状态。
3、系统进入ENABLE状态时,维持之前在SETUP状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。
接下来我们进入主题,研究下APB是具体怎么规定读操作的:master从slave读取数据
从这张图我们看出几点:
总结一下:一开始我们就说到,APB数据传输至少需要两个周期,也就是T1-T3。其实很简单,第一个周期做准备工作(把PADDR,PWRITE,PSEL发送到总线),第二个周期进行传输读或写的data(PENABLE拉高,表面当前时刻,数据有效,是master想要的数据!)
要特别注意的是,在 T3 后,也就是在进入 ENABLE 周期后,APB 从必须要将 M 所要读取的数据准备好,以便 M 可以在 ENABLE 周期末被 T4 正时钟沿触发时正确的将数据读取。
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0。
AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。
AMBA AXI协议支持支持高性能、高频率系统设计。
关键特点:
(1)分离的地址/控制、数据相位
(2)使用字节选通,支持非对齐的数据传输
(3)基于burst传输,只需传输首地址
(4)读、写数据通道分离,能提供低功耗DMA
(5)支持多种寻址方式
(6)支持乱序传输
(7)易于添加寄存器级来进行时序收敛
AXI协议是基于burst的传输,并且定义了以下5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。每一个独立的通道都包含一组信息信号、VALID信号和READY信号,用于提供双向的握手机制。
所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息
双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率
只有当VALID和READY同时为高电平时,传输才会发生。
此外,需要注意的是允许READY信号等待VALID信号再有效,即即使从机准备好,也可以不提供READY信号,等到主机发送VALID信号再提供READY信号。对应的VALID信号不允许等待READY信号,即不允许VALID等待READY信号拉高后再拉高,否则容易产生死锁现象。
AXI4 总线和 AXI4-Lite 总线具有相同的组成部分:
(1)读地址通道,包含 ARVALID, ARADDR, ARREADY 信号。
(2)写地址通道,包含 AWVALID,AWADDR, AWREADY 信号。
(3)读数据通道,包含 RVALID, RDATA, RREADY, RRESP 信号。
(4)写数据通道,包含 WVALID, WDATA,WSTRB, WREADY 信号。
(5)应答通道,包含 BVALID, BRESP, BREADY 信号。
(6)系统通道,包含:ACLK,ARESETN 信号。
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。
ZYNQ支持AXI4-Lite,AXI4和AXI4-Stream三种总线协议,但PS和PL之间的接口(AXI-GP、AXI-HP、AXI-ACP)只支持AXI4和AXI4-Lite这两种协议。因此AXI4-Stream与它们互联时,需要进行协议转换。
ZYNQ 有 ARM+FPGA的架构,它们之间通过3种AXI4总线进行通信。
(1)AXI-GP接口(4 个):是通用的 AXI 接口,包括两个 32 位主设备接口和两个 32 位从设备接口,使用该接口可以访问 PS 中的片内外设。
(2)AXI-HP接口(4 个):是高性能带宽的标准的接口,PL 模块作为主设备连接(从下图中箭头可以看出)。主要用于 PL 访问 PS 上的存储器(DDR和OCM)。
(3)AXI-ACP接口(1 个):是 ARM 多核架构下定义的一种接口,用来管理 DMA之类的不带缓存的 AXI 外设,PS 端是 Slave 接口。