AMBA总线协议APB、AHB——学习笔记
文章目录
- 前言
- 一、总线介绍
- 1、基本概念
- 2、典型AMBA系统
- 二、APB3(Advanced Peripheral Bus)
- 1、定义
- 2、信号
- 3、版本信息
- 4、信号传输时序图
- 4.1 状态机
- 4.2 写操作
- 4.3 读操作
- 4.4 错误传输
- 5、PSTRB、PPROT信号
- 6、APB组成
- 三、AHB(Advanced High-performance Bus)
- 1、定义
- 2、信号
- 2.1 master端信号
- 2.2 slave端信号
- 2.3 arbiter信号
- 3、版本信息
- 4、信号传输时序图
- 4.1 basic transfer
- 四、总线对比
- 4.1 hready和hreadyout信号区别
- 4.2 APB2、APB3、APB4协议区别
- 4.3 AHB2、AHB-Lite、AHB5协议对比
前言
2023.2.21
2023.3.23 学习打卡
一、总线介绍
1、基本概念
AMBA:Advanced Microcontroller Bus Architecture
,高级处理器总线架构,是由ARM公司制定的高性能片上(on chip)通信标准
总线位宽
:总线能够一次性传送的二进制数据位数,例如8bit、16bit、32bit、64bit等。
总线工作频率
:即时钟频率(时钟是系统的心脏)。
总线带宽
:总线数据的传输速率(单位时间内,总线上传送的数据量。即每秒钟传送MB的最大稳态数据传输率),主要用来衡量同步通信工作效率。
波特率
:单位时间内传送二进制数据的位数,主要用来衡量异步串行通信的数据传输速率,单位用bps(位/秒)
表示,记作波特。
例题1:假设总线的时钟频率是100MHz,总线的传输周期为4个时钟周期,总线宽度为32位,试求总线上的数据传输率。如要提高数据传输率,可采取什么措施?
解:总线的时钟频率为100MHz,即一个时钟周期为0.01us
总线的传输周期为0.01us × 4=0.04us
由于总线的宽度为32bit=4B(字节)
故总线的数据传输率4B / (0.04us) = 100MBps = 100MB/s (p = per, ”每”)
//100*(32/8)/4=100MB/s
总线带宽的两种计算方法
:
第一种:带宽 = 时钟频率 × 数据位数
第二种:带宽 = 数据位数 / 总线传输周期,总线传输周期 = n×时钟周期,时钟周期 = 1 / 时钟频率
例题2:在异步串行传输系统中,假设每秒传输120个数据帧,其字符格式规定包含1个起始位,7个数据位,1个奇校验位,1个终止位,计算波特率。
解:一帧包含1+7+1+1=10位
故波特率为10 × 120 = 1200bps = 1200波特
2、典型AMBA系统
典型的AMBA系统由一个高性能中枢总线(AHB/ASB)
构成,能够支持外部存储器带宽,包括CPU,片上存储器和其他直接数据存取DMA设备。
这条总线为上述单元之间大多数的传输提供高带宽接口
。在这条高性能总线上也有个桥接器以连接低带宽的APB
,而在APB上连接着大多数的系统外设。
二、APB3(Advanced Peripheral Bus)
1、定义
高级外围总线:唯一的主设备是APB Bridge
,然后通过APB到达其他从设备。AMBA APB优化了最小功率消耗并且降低了接口复杂度以支持外设功能。APB可以用来连接任意一种版本的系统总线
。
- 低速总线、低功耗、低带宽
- 接口简单
- single-cycle bus master handover(单周期总线主机移交)
- 每次传输至少需要两个周期
- 上升沿触发
- 非流水线操作
- 适合多种外设
- 在bridge中锁存地址信号和控制信号
2、信号
3、版本信息
APB 2.0
APB 3.0:增加了PREADY
、PSLVERR
(传输错误信号)
APB 4.0 :增加了PPROT
(protection type)、PSTRB
(字节选通信号)
4、信号传输时序图
4.1 状态机
IDLE:默认状态,无传输
SETUP:准备状态,当一笔数据需要传递时,进入SETUP。在此状态中,HADDR[31:0]
地址线会经译码电路产生唯一的使能信号PSELx
。总线只会在SETUP停留一个时钟周期,而在下一个时钟正沿触发时进入ENABLE状态。这样的跳变是协议规定的。
ENABLE:使能状态,数据、地址、读写控制信号保持不变,如果没有传输跳到IDLE,有传输转回到SETUP,且跳转过程中地址、写入、选择信号有毛刺是可以接受的。
下面的transfer时序图以APB3和APB4进行介绍,就是在APB2的基础上增加了PREADY和PSLVERR信号,所以APB2就不介绍时序图了。
4.2 写操作
(1)无等待周期的情况
T0
:有限状态机进入预设的 IDLE 状态;
T1
:数据地址、读写控制信号和写入的数据会在频率正沿触发时,开始作写的数据传递准备,这个周期也就是刚才所提及SETUP状态。译码电路在此状态会根据数据地址去译码出所要写入APB Slave,此时所对应到 S 的 PSEL 信号将由 0 变 1;
T2
:有限状态机会进入 ENABLE 状态,PENABLE 信号在此状态会被设成 1;slave采样到数据地址sel信号,知道要是一次写数据操作,且自己准备好接收数据了,于是把pready信号拉高一个周期,告诉master。
T3
:master采样到slave的pready信号为高,说明slave接收了此次写数据,于是,PENABLE 信号将由 1 变 0,而 PSEL 信号在若没有其它数据的写入动作时,也将由 1 变 0。
为了减少功率的消耗,APB 的数据地址和读写控制信号在下一笔数据传递前,将不会作任何改变。(数据好像也是不会改变的)
从上面传输可以看到一次transfer至少需要两个周期。
(2)有等待周期的情况
T1
:开始进入setup状态
T2
:slave采样到master发过来的地址、读写控制、数据信号,假如没办法立刻接收数据,就会把ready信号拉低。
T3
:pready为低,paddr、psel、penable、pwdata信号保持不变
T4
:当进入enable阶段时,master采样到ready为低,于是继续进行等待,等待了两个周期。
T5
:上升沿时,master采样到ready为高,于是把数据写到slave,写操作成功。
4.3 读操作
(1)无等待周期的情况
slave在传输结束前,要把数据准备好。
(2)有等待周期的情况
T0
:IDLE
T1
:Setup
T2
:Enable
T3
:检测到ready为低,继续使能。
T4
:slave驱动ready信号为高,随后将RDATA驱动到数据总线
T5
:master采样到ready为高,于是读取总线上的数据,读操作结束,把sel、enable信号拉低,其他为降低功耗,不发生改变。
4.4 错误传输
DUT里面应该有错误的状态,在验证的时候写一个触发错误的case,看是否功能正确。
PSLVERR
:不一定都需要这个信号
PSLVERR只在APB传输的最后一个周期有效, 也就是说当PSEL,PENABLE和PREADY均为1时是有效的,在其他时间是无效的。当一些APB模块不支持PSLVERR时,比如只支持APB2协议,可以把APB Bridge的pslverr接0即可。
- 发生错误传输的时候,外设不一定要改变状态,都是可以接受的。
- 返回PSLVERR说明这次读写发生了问题。至于产生error信号如何处理协议并没有规定。
- 只在psel、penable、pready都为1的时候去采样slave的pslverr信号,看有没有错误,其它时刻不会去采样。
(1)写数据错误
(2)读数据错误
T2
:Enable阶段时,slave无法接收master写过来的数据,于是拉低ready信号。
T3
:slave发现无法写进去,告诉master出错了,于是slave驱动ready和pslverr信号同时为高
T4
:master采样到它两信号同时为高,于是此次为错误transfer
5、PSTRB、PPROT信号
PPROT[2:0]
:每一位对应不同的类型信息。该信号主要用来区分安全和不安全标识,也就是PPROT[1]
,其他两位不同的地方可以有不同的解释。
PPROT[2:0] | Protection level |
---|---|
[0] | 1:privileged access, 0 :normal access |
[1] | 1 :nonsecure access, 0 :secure access |
[2] | 1 :instruction access, 0 : data access |
PSTRB[3:0]
:写strb信号,决定哪个字节通道的写数据是有效的,可以进行稀疏数据(sparse data
)的传输,每一bit位对应pwdata的一个字节,且在读数据的时候该信号必须无效。(任何时候,只允许一个数据总线有效,只可以读或只可以写)
6、APB组成
APB的组成:APB Bridge
+ APB Slave
APB Bridge:完成AHB 总线传输到APB 总线传输的转换工作
APB Slave:接口简单但是灵活
三、AHB(Advanced High-performance Bus)
1、定义
高级高性能总线:AHB总线的强大之处在于它可以将微控制器CPU、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等连接起来构成一个独立的完整SOC系统,不仅如此,还可以通过AHB-APB Bridge
来连接APB总线系统。
总线宽度有8、16、32、64、128等等,最常用的是32位
。
- 适合于高性能、高时钟频率
- 通道操作
- 流水线操作
- 多总线主机
- burst传输
- Split transactions(分块处理)
- 单时钟沿操作
- 更宽的数据总线配置(64/128 位)
- 非三态总线实现(只传输0和1)
下图是三个主机和四个从机的连接关系。
每个AHB都需要1个仲裁器和1个中央解码器。
(1)AHB主设备Master
:发起一次读/写操作,某时刻只允许一个主设备使用总线,每个主设备有一组与仲裁器接口的信号REQUEST/GRANT
,仲裁器采用优先级方案来决定当前请求总线的优先级最高的主设备。
每个主设备同时产生HLOCKx
信号来指示主设备需要独占的总线访问。
(2)AHB从设备Slave
:响应一次读/写操作,通过地址映射来选择使用那个从设备
(3)AHB仲裁器Arbiter
:允许某一个主设备控制总线,按道理需要等一个master传输结束之后,再重新进行仲裁,但是为了总线长时间被占用,可以允许其他master进行打断,这时需要重新申请仲裁才能发送完数据。
(4)AHB译码器Decoder
:通过地址译码来决定选择哪一个从设备,产生片选信号
2、信号
2.1 master端信号
HSELx
:每个slave对应一个片选信号,当某个slave被选中的时候,会去采样HREADY,确保在开始传输之前,其他slave已经传输结束。
HADDR[31:0]
:里面包含片选和地址信号,一般高位为片选,低位为地址。经Decoder译码后产生片选,选择一个slave,再去把数据写/读进去该slave的相应地址。
HSIZE[2:0]
:传输数据的位宽,8、16、32等,大小要小于数据宽度。
地址边界和传输大小必须对齐。字传输对齐字地址边界(HADDR[1:0] = 0),半字传输对齐半字地址边界(HADDR[0] = 0)
HSIZE[2:0] | Size/bits | Description |
---|---|---|
000 | 8 | Byte |
001 | 16 | Halfword |
010 | 32 | Word |
011 | 64 | DoubleWord |
100 | 128 | 4-word line |
101 | 256 | 8-word line |
110 | 512 | - |
111 | 1024 | - |
HBURST[2:0]
:burst长度,单个,4,8,16(两种),undefined length(总共8种情况)。
HBURST[2:0] | Type | Description |
---|---|---|
000 | SINGLE | single transfer |
001 | INCR | incrementing burst of undefined length |
010 | WRAP4 | 4-beat wrapping burst |
011 | INCR4 | 4-beat incrementing burst |
100 | WRAP8 | 8-beat wrapping burst |
101 | INCR4 | 8-beat incrementing burst |
110 | WRAP16 | 16-beat wrapping burst |
111 | INCR16 | 16-beat incrementing burst |
HTRANS[1:0]
:传输状态IDLE
, BUSY
, NONSEQUENTIAL
, SEQUENTIAL
。
HTRANS[1:0] | Type | Description |
---|---|---|
00 | IDLE | 空闲状态 |
01 | BUSY | master无法传输时发送该类型 |
10 | NONSEQ | single/busrt transfer的第一个 |
11 | SEQ | burst transfer中的一个传输 |
HPROT[3:0]
:保护控制信号,对于带有存储器管理单元的总线主机来说这些信号也表示当前访问是带高速缓存的( cache)还是带缓冲的(buffer)。
HPROT[3:0] | Protection level |
---|---|
[0] | 0: Opcode fetch,1: Data access |
[1] | 0:User access,1: Privileged access |
[2] | 0: Non-bufferable,1: Bufferable |
[3] | 0: Non-cacheable,1: Cacheable |
HSTRB[3:0]
:字节选通信号,有效字节通道取决于系统的端结构(小端系统和大端系统),但是 AHB 并不指定要求的端结构。因此,总线上所有主机和从机的端结构相同这点很重要。一般AHB用的是小端。
2.2 slave端信号
HRDATA[31:0]
:在此次传输结束之前,slave把数据驱动到总线上
HRESP[1:0]
:slave应答当前传输状态,OKAY, ERROR, RETRY, SPLIT。
后三者都是双周期响应,需要双周期响应是因为总线通道的本质特征。在从机开始发出 ERROR、SPLIT或者RETRY中任何一个响应时接下来传输的地址已经广播到总线上了。双周期响应允许主机有足够的时间来取消该地址并且在开始下一次传输之前驱动HTRANS[1:0]为IDLE。
SPLIT和RETRY响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。SPLIT传输有可以完全释放总线给其他主机使用的优点(可以给优先级更低的主机),但是RETRY的情况就只允许较高优先级的主机使用总线。
HRESP[1:0] | Type | Description |
---|---|---|
00 | OKAY | HREADY为高表示传输完成 |
01 | ERROR | 传输发生错误 |
10 | RETRY | 重试表示传输还没完成,总线主机应该重新传输直至完成 |
11 | SPLIT | 传输还没完成总线主机在下一次被授予总线访问时重新传输 |
当传输产生时如果从机认为传输的执行将占据大量的时钟周期那么从机能够决定发出一个SPLIT响应。该信号提示仲裁器尝试这次传输的主机不应该被授予访问总线,直到从机表示它准备好了完成传输时。因此仲裁器负责监视响应信号并且在内部屏蔽已经是SPLIT传输主机的任何请求。
2.3 arbiter信号
这部分没有详细了解了。
HMASTLOCK
:锁定Master传输,锁定期间传输无法被打断。为1表示master锁定的操作
HMASTER[3:0]
:用于指示当前是哪个Master发起了传输,每个Master有一个唯一的HMASTER ID,最大值为8
HNONSEC
:说明本次是安全还是非安全的传输
3、版本信息
AHB
AHB+lite(简化设计)
AHB5+lite(丰富接口)
4、信号传输时序图
4.1 basic transfer
Address phase
:master驱动地址和控制信号到总线上,只允许有一个周期
Data phase
:slave采样地址和控制信号,并将ready拉高
如果是读,则在ready拉高后把数据驱动到总线上
如果是写,则master在上升沿的时候就把wdata驱动到总线上了,可以有多个周期
A和C的传输没有延时,B的传输延时了一个周期
B的data phase的延长使得下一个transfer的address phase延长
AHB支持流水线pipeline的动作,在slave收上一笔数据的同时,master可将下一笔数据的地址送出。
发送4个数据需要5个周期,因为data比clk要慢一拍
主机由于不能立刻发送burst的第二个transfer,所以发送一个BUSY使得下一次传输延时开始,第二个SEQ发送没有延时,第三个SEQ,从机无法立刻响应,所以插入hready延时,最后一个SEQ没有延时。
(1)写数据
(2)读数据
T1:slave采样到地址和控制信号,但是无法驱动数据,于是拉低
T2:master采样到ready为低,于是保持地址和控制信号不变,slave这个周期拉高了ready,并在拉高后不久把数据驱动到了总线上
T3:master采样到ready为高,继续发送地址。slave的ready有效,继续驱动数据到总线上
(3)读写都存在
(4)busy transfer
(5)IDLE transfer
在IDLE状态时,是可以改变地址的,但是当开始发送第一个NONSEQ的时候,地址需要保持不变
这里ready拉低是可能slave暂时无法驱动数据,因此延时一段时间;而由于是单个数据发送,所以下一个状态就是idle。且在ready拉低的这个时间内,master是可以继续向slave申请rdata,只是slave必须先响应完上一个请求,再来响应此次请求。且在这个时间内,地址是不能发送改变的。
这样做性能较高,但是实际取设计验证的driver是有点困难的。
(6)error
T3:error拉高,ready为低
T4:error为高,ready也拉高
这样的两个周期才能够判断是错误输出
发生错误后,主机可以选择取消传输,也可以继续传输,协议没有强制规定
四、总线对比
完整的AHB/ASB用作:
- 总线主机;
- 片上存储模块;
- 片外存储器接口;
- 带FIFO接口的高带宽外设;
- DMA从机外设。
简单的APB外设接口建议用作:
- 简单的寄存器映射从机设备;
- 时钟不能够全局布通的超低功耗接口;分组窄总线外设应避免挂接到系统总线上
4.1 hready和hreadyout信号区别
hreadyout
:slave的输出信号,是slave对master数据传输的响应,如果为高,表示slave准备好传输,如果为低,表示slave还没有准备好,会延长数据周期。
hready
:该信号是所有slave的hreadyout相与得到的,是slave的输入信号。
场景
:一个主设备对应多个从设备,AHB的流水线操作,可能上一个slave的数据还没有传输完全,下一个slave就要开始传输,可能发生协议错误或者数据丢失。
等到所有的slave传输完成,hready信号为高,则开始此次传输。
下图中S3阶段要去采样data1还是data2就成了问题
只有加入一个hready信号,使得当hready为低时,所有slave的传输都被延时,等到slave1传输结束后,开始写入data1,同时采样下一个传输的地址和控制信号。
4.2 APB2、APB3、APB4协议区别
APB3中增加了PREADY、PSLVERR信号
APB4中增加了PSTRB、PPROT信号
4.3 AHB2、AHB-Lite、AHB5协议对比
相同点:
- burst传输
- 单边沿操作
- 非三态
- 宽数据总线32,64等
区别:
AHB2 | AHB-Lite | AHB5 |
---|---|---|
多主机,多从机 | 单主机,多从机 | 单主机,多从机 |
有仲裁机制 | 无仲裁机制 | 无仲裁机制 |
支持SPLIT和RETRY响应 | 不支持SPLIT和RETRY响应 | 不支持SPLIT和RETRY响应 |
需要默认主机和从机 | 需要默认主机,不用默认从机 | |
扩展存储器类型PPROT[6:0] | ||
独占传输 | ||
原子访问 |
默认从机
:在系统设计中如果有包含一个存储器映射并未完全填满(存储空间)的情况时,应该设置一个额外的默认从机,以在访问任何不存在的地址空间时提供响应。如果一个非连续或者连续传输试图访问一个不存在的地址空间
时,这个默认从机应该提供一个 ERROR
响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的 OKAY 响应。这个默认从机的功能将以作为中央地址译码器的一部分来实现。
AMBA总线协议APB、AHB——学习笔记相关推荐
- AMBA总线协议之AHB学习记录(1)—ahb_bus(附verilog代码)
目录 0.前言 1.AHB简介 2.ahb_bus实现(verilog) 3.总结反思 & 后面学习计划 0.前言 前段时间粗略过了一下riscv指令集相关内容,并对开源项目tinyriscv ...
- AMBA总线协议(三)——一文看懂AHB总线所有协议总结(AHB2 AHB-Lite AHB5 )
AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(一)--一文看懂APB总线协议 AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMB ...
- AMBA总线协议 之 APB总线协议
AMBA总线协议概念: AMBA(Advanced Microcontroller Bus Architecture) 总线是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有 ...
- AMBA总线协议(一)——一文看懂APB总线协议
0.AMBA总线概括 AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMBA总线协议(三)--一文看懂 ...
- 【Verilog基础】【总线协议】AHB和AHB-Lite的区别?AMBA2.0和AMBA3.0的区别?目前常见的几种AMBA协议内容?
文章目录 AHB和AHB-Lite的区别 AHB-Lite(简化了AHB协议的复杂性) AHB AMBA2.0和AMBA3.0的区别?目前常见的几种AMBA协议内容? 传输结束标志 参考 AHB和AH ...
- 数字IC设计----AMBA总线协议(来自英文原版)
第一章 AMBA总线介绍 1.AMBA总线协议总览 AMBA(Advanced Microcontroller Bus Architecture)总线协议是一种面向高性能嵌入式微控制器设计的片上联接 ...
- AMBA总线协议的学习-AHB,ASB,APB三种总线以及AXI接口
一.AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance B ...
- AMBA总线协议AHB、APB
一.什么是AMBA总线 AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus).ASB (Advanced ...
- AMBA总线协议AHB、APB、AXI对比分析
一.AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance B ...
最新文章
- 如何计算ModBus超时时间?
- 51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈
- 杨辉三角Python解法
- leetcode 643. 子数组最大平均数 I(滑动窗口)
- [转]基于图的机器学习技术:谷歌众多产品和服务背后的智能
- 提高java效率_提高Java编程效率的一个技巧
- 《C和指针》——数组的奇怪形式
- Linux:计划任务之at
- python wmi读取网卡MAC地址、CPU序列号、硬盘序列号、主板序列号、BIOS序列号
- 比较IE6的不同之处,与IE8 IE11 比较
- JavaScript 事件-事件流,事件冒泡,事件捕获,事件绑定与解绑,事件委托、阻止冒泡、阻止默认行为详细篇
- n1盒子救砖_新手教程教你N1盒子纯净刷机教程,实现OMV、HomeAssistant功能
- 带有拉普拉斯平滑的Naive Bayes python代码实现
- 【sketchup 2021】草图大师的编辑工具1【移动工具、旋转工具、缩放工具】
- 计算机金山打字基础,金山打字通电脑版
- java聚合支付之建行
- 如何生成SSH key以及免密设置
- linux dropbox自动同步,Linux免dropbox客户端备份脚本
- 翻译 Scribe : a way to aggregate data and why not, to directly fill the HDFS?
- 双色OLED屏图片点阵转换工具(OledTools)
热门文章
- 基于ASR-PRO离线语音芯片制作的控制小黑盒
- 我理解的算法 - 三数之和及两数、三数之和扩展题
- android 飞行模式做了什么好处,手机“飞行模式”竟然有这么多好处?
- html5自定义字体
- 使用pyh生成HTML文档
- 多种方法实现js里面的暂停功能
- 摩斯隐私计算一体机全项通过深圳国金测评中心83项测评
- 用c语言写出1 22 333 4444 55555 55555 4444 333 22 1
- maya mentray_【Maya Mentalray】Maya Mentalray渲染设置
- linux grep 查询多个字符 或 忽略大小写