AMBA总线
AMBA总线
Advanced Microcontroller Bus Architecture
-
AHB:Advanced High-performance Bus,用于高性能、高时钟工作频率模块
-
ASB:Advanced System Bus,用于高性能系统模块。
-
APB:Advanced Peripheral Bus,用于慢速外设模块。
-
从AHB/ASB总线到APB总线需要通过 桥接器(Bridge) 进行互联。
1. AHB
AHB主设备Master:发起一次读/写操作,某时刻只允许一个主设备使用总线
AHB从设备Slave:响应一次读/写操作,通过地址映射来选择使用那个从设备
AHB仲裁器Arbiter:允许某一个主设备控制总线
AHB译码器Decoder:通过地址译码来决定选择哪一个从设备

- AHB-Lite总线
全局信号,即复位和时钟信号
地址和控制信号,用来标明当前的传输地址和传输类型
数据信号,即写信号HWDATA和读信号HRDATA。
传输响应信号,即就绪信号HREADY和回应信号HRESP。
1)主机信号 HCLK、HRESETn
HADDR [31:0]--32位地址总线
HTRANS [1:0]--传输类型 00 IDLE, 01 BUSY, 10 NONSEQ, 11 SEQ
HWRITE--0读1写
HBURST [2:0]--突发信号,支持4,8,16 burst
HMASTLOCK--主机锁定信号,通常在多主机时使用此信号
HSIZE [2:0]--数据传输大小 8/16/32/64/128/256/512/1024
HWDATA [31:0]--32位写数据总线
HPROT [3:0]--保护信号,需要从机支持,一般不用
- HBURST 批量传输
递增传输incrementing burst、回绕传输wrapping burst
000 SINGLE 单笔数据传输
001、011、101、111 INCR 不定长递增方式批量传送 INCR4/8/16
010、100、110 WRAP4/8/16 回绕方式传输
master-->Arbiter:
HBURSTREQx 总线请求使用信号,最多16个M
HLOCKx 锁定信号,保持传输
2)从机信号
HREADY-- 就绪信号,表示传输结束
HRESP [1:0]--回应信号,表面传输是否成功 OKAY ERROR RETRY SPLIT
HRDATA--读数据信号
HSPLITx [15:0] 告诉仲裁器哪个主设备运行重新尝试一次split传输
master发起读写操作slave不能及时响应时hready_out拉低
hready_in是slave判断master是否完成对其他设备的操作
3)仲裁器信号
HGRANTx 授权信号,当前mastex优先级最高,HREADY和HGRANTx同时为高时master传输地址信号
具有split功能的slave:
HMASTER [3:0] 仲裁器为每一个master分配ID,指出哪个master正在进行传输
HMASTLOCK 表示当前master正在执行Locked操作,和master相同时序
4)译码器信号
HSELx--从机选择信号
有需要占用总线的Master向Arbiter发出请求,Arbiter授权给指定的Master。
获得授权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。总线统一规划Slave的地址,译码器根据地址和控制信号确定那个Slave与Master进行数据通信。数据传输通过数据总线完成。
为避免出现三态总线,AHB将读写总线分开,写数据总线用于从Master到Slave的数据传输,读数据总线用于从Slave到Master的数据传输。每笔传输包括一个地址和控制周期,一个或多个数据周期。地址和控制周期不能被拓展,因此Slave必须在一个周期内采样地址信号。数据周期可以通过HREADY信号拓展,但HREADY为低时给传输加入一个等待状态以使Slave获得额外的时间来提供或采集数据,另外Slave通过响应信号HRESP反映传输状态。
- 一次AHB-Lite传输包含两段,以地址传输段作为开始,占一个时钟周期,接下来进入数据传输段,可能需要一个或多个时钟周期,并用HREADY信号表明本次传输结束
主机读在Address phase本次传输开始,传入地址信号HADDR和写信号HWRITE(为低,表示为读指令),在下一个HCLK进入Data phase,从机将主机所需要的读数据放到HRDATA读数据信号,并拉高HREADY表明本次传输结束。
主机写读过程类似,在Address phase,写信号HWRITE拉高表明写指令,在Data phase将要写的数据放入HWDATA写数据信号,同时从机将HREADY拉高表明本次传输结束。
1.2 零等待传输

1.master驱动地址和控制信号
2.slave采样地址和控制信号 并将HREADY拉高
若写,master传输要写入的数据;若读,slave会在HREADY拉高后将数据写入总线
3.master获取HREADY高信号,若写表明已成功接收数据,若读表明读数据有效且接收
HREADY在数据有效期间必须为高
等待传输:当slave在数据期间将HREADY拉低时,进入等待状态,地址和数据都延伸
AHB支持流水线操作,在接收上一笔数据同时送出下一笔地址
总线上最多存在两个未处理完的transfer
1.3
AHB-SLAVE接口

AHB-MASTER接口

仲裁器

3. APB
-
APB应用于慢速外设,如UART、键盘等,不需要AHB总线体系中的Arbiter与Decoder. Arbiter为仲裁器,决定哪个Master工作。Decoder为译码器,决定Master与哪个Slave进行数据传输。
APB低成本、低功耗、低带宽.可以连接到任何低带宽且不需要流水线总线接口的高性能的外围设备,所有信号跳变仅与时钟的上升沿相关, 每次传输至少需要两个周期。 -
source signal
PCLK:时钟。APB协议里所有的数据传输都在PCLK上升沿进行
PRESETn:复位。低电平有效 -
bridge
PADDR:APB地址总线。最大宽度为32位
PSELx:APB master会将此信号生成给每个slave。它指示已选择的slave,并且需要进行数据传输。 每个slave都有一个PSELx信号
PENABLE:使能。当它为高时,表示数据有效
PWRITE:读写控制。为高时表示写操作,为低时表示读操作
PWDATA:master通过PWDATA将数据写到slave,该总线最大宽度为32位 -
Slave interface
PRDATA: master通过PRDATA将数据从slave读取回来,该总线最大宽度为32位
APB3新增信号
PREADY: 对于slave的准备信号,用于扩展APB的传输,当PSEL为高,PENABLE为高时,总线会看PREADY是否为高,如果为高,则进行数据传输,如果为低,那么等待其变为高
PSLVERR: 错误反馈信号,表示当前传输的数据有误,当PSEL,PENABLE和PREADY均为高电平时,仅在APB传输的最后一个周期内才认为PSLVERR有效,其他时间不考虑PSLVERR。
APB4新增信号
PPROT:一种保护信号,可支持APB上的非安全传输和安全传输。
PSTRB:一个写选通信号,用于在写数据总线上进行稀疏数据传输。
APB总线接口主要有 系统信号,地址信号,方向信号,数据信号,传输阶段控制信号
-
写操作
T1 IDLE状态,初始阶段
T2 SETUP阶段,PSEL为高,PENABLE为低,为data的传输做准备工作,master把PADDR、PWDATA和PWRITE放在总线上,通过PSEL选择一个slave
T3 ENABLE阶段 PENABLE为高,表示当前数据有效,并且master将data写入slave
T4 PENABLE 信号将由 1 变 0,而 PSEL 信号在若没有其它数据的写入动作时,也将由 1 变 0。为了减少功率的消耗,APB 的数据地址和读写控制信号在下一笔数据传递前,将不会作任何改变 -
读操作
类似写 PWRITE信号相反,T3后准备好要读取的数据,T4 读取PRDATA
4. APB Bridge
锁存地址并将其有效传输,解析地址产生PSELx,且PSELx只有一个有效,将数据传输到APB总线上,产生定时strobe、PENABLE。
每个从设备的地址空间如下:
Slave0: 0x0000_0000 ~ 0x0000_00ff;
Slave1: 0x0000_0100 ~ 0x0000_01ff;
Slave2: 0x0000_0200 ~ 0x0000_02ff;
Slave3: 0x0000_0300 ~ 0x0000_03ff;
每个从设备中有可访问APB寄存器16个,位宽均为32比特,16个寄存器的访问地址计算方式为 基址 + 寄存器编号左移2位
4.1 读操作
每次三个clk,
4.2 写操作
单次写操作,4个clk;Burst写操作n,4*n-2个clk。
APB总线上的单块数据写操作不需要等待周期
APB桥中需要有 2 个地址寄存器,当处理一个数据块写操作时,可以寄存下一个数据块的地址
T1 AHB 开始作数据地址和读写控制信号的传递(HADDR 和 HWRITE)
T2:APB bridge 栓取住 AHB 送来的数据地址及读写控制信号,同时进入到 APB 有限状态机的 ENABLE状态
4.3 背靠背操作
写,读,写,读
如果写操作之后跟随着读操作,需要 3 个等待周期来完成读操作。通常的情况下,不会有读操作之后紧跟着写操作的发生,因为两者之间 CPU 会进行指令读取。
浙公网安备 33010602011771号