ahb总线协议主机_AMBA基础知识4:AHB总线协议

AHB总线规范详解架构

来自:中国科学院微电子研究所 韩健app

1. 简介

AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的链接。APB用于链接外部设备,对性能要求不高,而考虑低功耗问题。ASB是AHB的一种替代方案。spa

1.1 AHB总线的架构

AHB总线的强大之处在于它能够将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各类拥有AHB接口的控制器等等链接起来构成一个独立的完整的SOC系统,不只如此,还能够经过AHB-APB桥来链接APB总线系统。AHB能够成为一个完整独立的SOC芯片的骨架。

下图是一个典型的AHB系统总线的结构示意图.net

1.2 AHB基本特性

Burst传输

Split事务处理

单周期master移交

单一时钟沿操做

无三态

更宽的数据总线配置(64/128)

流水线操做

可支持多个总线主设备(最多16个)

2. AHB总线的组成

AHB总线由Master、Slave和Infrastructure构成。Infrastructure由arbiter、数据多路、地址控制多路、译码器构成。设计

主设备Master

发起一次读/写操做

某一时刻只容许一个主设备使用总线3d

从设备Slave

响应一次读/写操做

经过地址映射来选择使用哪个从设备code

仲裁器arbiter

容许某一个主设备控制总线

译码器decoder

经过地址译码决定选择哪个从设备

总线能够分为三组

写数据总线(HWDATA)

读数据总线(HRDATA)

地址控制总线(HADDR)

3. 信号描述

Name

Source

To

Description

HCLK

clock source

各module

总线时钟,上升沿采样

HRESETn

reset controller

各module

总线复位,低电平有效

HADDR[31:0]

Master

decoder

mux to slave

arbiter

32位系统地址总线

HTRANS[1:0]

Master

mux to slave

当前传输类型NONSEQ, SEQ, IDLE, BUSY

IDLE,表示无数据传输,在lock transfer以后以idle结束。slave必须返回OKAY response。

BUSY,容许master在一个transfer中加入idle cycle。并不实现数据的传输,address和control signals反映在下一个transfer。

NONSEQUENTIAL,表示一个single transfer或者一个burst的第一个transfer。这个transfer的address和control signal和前一个transfer不要紧。

SEQUENTIAL,表示INCR/WRAP类型的transfer。control signal和前一个transfer同样。 address根据前一个transfer计算获得。

AHB的每一个transfer的控制是分开的,其中包含burst信息,而AXI的transfer是打包在一个burst中的。

AHB是基于transfer的,AXI是基于burst的。

HWRITE

Master

mux to slave

1为写,0为读

HSIZE[2:0]

Master

mux to slave

每个transfer传输的数据大小,以字节为单位,最高支持1024位

映射表分析以下:

3‘d0->8bit

3'd1->16bit

3'd2->32bit

3'd3->64bit

3'd4->128bit

3'd5->256bit

3'd6->512bit

3'd7->1024bit

3bit表示transfer的带宽,必须小于AHB配置的BUS width。

AHB中的byte lanes由address offset来决定,

对于32bit的bus,0x1在小端格式就只选择最低的byte。

HBURST[2:0]

Master

mux to slave

burst类型,支持四、八、16 burst,incrementing/wrapping

未定义长度的INCR类型的burst。和Single burst两种新类型。

HPROT[3:0]

Master

mux to slave

保护控制信号,须要slave带保护功能,通常不用

HWDATA[31:0]

Master

mux to slave

写数据总线,Master到Slave

HRDATA[31:0]

Slave

mux to master

读数据总线,Slave到Master

HREADY

Slave

mux to master

arbiter

高:Slave指出传输结束

低:Slave需延长传输周期

HRESP[1:0]

Slave

mux to master

arbiter

Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT

HSELx

Decoder

slave

slave选择信号

AHB仲裁信号

Name

Source

To

Description

HBUSREQx

Master

arbiter

master给仲裁器的请求得到总线使用权的请求信号,最多支持16个master

HLOCKx

Master

arbiter

若是一个master但愿本身在传输期间不但愿丢掉总线,则须要向仲裁器发送这个锁定信号

HGRANTx

arbiter

master

受权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利

HMASTER [3:0]

arbiter

具备split功能的slave

仲裁器为每个master分配的ID,指出哪一个主设备正在进行传输,提供进行split的信息

HMASTLOCK

arbiter

具备split功能的slave

表示当前的master正在执行Locked操做。这个信号和HMASTER有这相同的时序

HSPLITx[15:0]

slave

arbiter

从设备用这个信号告诉仲裁器哪一个主设备运行从新尝试一次split传输,每一位对应一个主设备

4. 总线操做

有须要占用总线的Master向arbiter发出请求,arbiter受权给指定的master。任一时间周期只有一个master能够接入总线,对其指定的slave进行读写操做。

得到受权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。总线统一规划slave的地址,译码器根据地址和控制信号肯定哪一个slave与master进行数据通讯。数据传输经过数据总线完成。为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输。

每笔传输包括一个地址和控制周期,一个或多个数据周期。

地址和控制周期不能被扩展,所以slave必须在一个周期内采样地址信号。

数据周期能够经过HREADY信号扩展,(来自slave)但HREADY为低时给传输加入一个等待状态以使slave得到额外的时间来提供或采样数据,另外slave经过响应信号HRESP反映传输状态。

通常状况下master完成完整的burst传输,arbiter才会受权给其余的master接入总线,然而为避免过大的判决延迟,arbiter也可能打断burst传输。在这种状况下master必须再次接入总线以进行中断的burst剩余部分的传输。

5. 基本传输

一笔传输由以下两部分组成:

地址阶段:一个周期

数据阶段:一个或多个周期,由HBURST信号决定须要几个有效周期,能够由HREADY发出请求延长一个周期。

5.1 没有等待状态的single transfer

第一个周期的上升沿,master驱动地址和控制信号;

第二个周期的上升沿,slave采样地址和控制信号,并将HREADY拉高;

若是是写操做,master会在第二个周期的上升沿传输要写入的数据;

若是是读操做,slave会在HREADY信号拉高后将读取的数据写入总线;

第三个周期的上升沿,

若是是写操做,master获取HREADY高信号,代表slave已成功接收数据,操做成功;

若是是读操做,master获取HREADY高信号,代表此时的读数据有效而且接收下来,操做成功。

须要注意,HREADY信号在数据有效期间必须为高,而且延续到第三个周期的上升沿以后,确保master的正确采样。

5.2 slave插入等待状态的single transfer

slave能够及时处理master请求,但也可能存在slave太慢不能当即处理的状况。这时须要让master稍微等一等,须要slave插入一些等待的状态。以下图所示,HREADY信号在第二和第三周期拉低,意在告诉master,slave不能当即处理,须要master等待2个周期。在这里须要注意2点:

若是是写操做,master须要在等待期间保持写数据不变,直到本次传输完成;

若是是读操做,slave不须要一开始就给出数据,仅当HREADY拉高后才给出有效数据。

5.3 多个single transfer的pipeline操做

扩展数据周期的一个负效应是必需延长相应的下一笔传输的地址周期。A和C为零等待传输,B加入了一个等待周期,所以相应的C地址周期要进行扩展。

第一个周期,master发起一个操做A,并驱动地址和控制信号;

第二个周期,slave收到了来自总线的请求,将HREADY信号拉高;

第二个周期上升沿后,master发现有操做B须要执行,而且检查到上一周期的HREADY为高,则发起第二个操做B;

第三个周期,master获取HREADY信号为高,表示操做A已经完成;

第三个周期上升沿后,master发现有操做C须要执行,而且检查到上一周期的HREADY为高,则发起第三个操做C;

第三个周期上升沿后,slave因为繁忙插入了一个等待状态,将HREADY拉低;

第四个周期,master获取HREADY信号为低,知道slave但愿等待,因而master保持和上一拍同样的信号;

第四个周期,slave处理完了事务,将HREADY信号拉高,表示能够继续处理;

第五个周期,master获取HREADY信号为高,知道slave已经能够处理B操做;

第五个周期上升沿后,B操做完成;

第五个周期,同时,获取C操做。

第六个周期上升沿后,C操做完成。

须要注意几点:

HREADY在必定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上未完成的transfer少于2个时,master才能发起操做。

5.4 递增burst

T1,master传入地址和控制信号,由于是新的burst开始,transfer的类型是NONSEQ;

T2,因为master不能在第二个周期里处理第二拍,因此master使用BUSY transfer来为本身延长一个周期的时间。注意,虽然是延长了一个周期,可是master须要给出第二个transfer的地址和控制信号;

T3,slave采集到了master发来的BUSY,知道master须要等待一拍,因此slave会忽略这个BUSY transfer;

T3,master发起了第二个transfer,由于是同一个burst的第二个transfer,因此transfer的类型是SEQ;

T5,slave将HREADY信号拉低,告诉master须要等待一个周期;

T8时刻完成最后一个transfer。

须要注意的 虽然slave会忽略掉BUSY transfer,可是master也须要给出下一拍的地址和控制信号。

5.5 wrapping 4-beat burst

跟以前惟一的区别在于地址的不一样,在0x3C地址以后,根据回环的地址边界,第三拍的地址变为0x30。一共四拍,4个地址,每一个地址各不相同,这四个地址是一个回环范围。起始地址决定了回环操做的回环范围。

5.6 递增4拍burst

和上面的基本一致,只不过地址在0x30并不回环,而是递增。

6.控制信号

HTRANS[1:0]

传输类型

Description

00

IDLE

主设备占用总线,但没进行传输

两次burst传输中间主设备可发IDLE

此时就算slave被使能,也不会从总线上获取任何的数据信号。若是此时salve被选中,那么每个IDLE周期slave都要经过HRESP[1:0]返回一个OKAY响应

01

BUSY

主设备占用总线,可是在burst传输过程当中尚未准备好进行下一次传输

一次burst传输中间主设备可发BUSY

这时slave不会从总线上收取数据而是等待,而且经过HRESP[1:0]返回一个OKAY响应。须要注意的是,这个transfer须要给出下一拍的地址和控制信号,尽管slave不会去采样。

10

NONSEQ

代表一次单个数据的传输或者一次burst传输的第一个数据

地址和控制信号与上一次传输无关

11

SEQ

burst传输接下来的数据

地址和上一次传输的地址是相关的,这时总线上的控制信号应当与以前的保持一致,地址视状况递增或者回环。

HSIZE[2:0]

Size

Description

000

8 bits

Byte

001

16 bits

Halfword

010

32 bits

Word

011

64 bits

-

100

128 bits

4-word line

101

256 bits

8-word line

110

512 bits

-

111

1024 bits

-

Burst传输类型

burst不能超过1K地址边界。

HBURST[2:0]

类型

Description

000

SINGLE

Single transfer

一次只传输一个数据。

001

INCR

Incrementing burst of unspecified length

没有指定传输数据多少个。

010

WRAP4

4-beat wrapping burst

举例:0X38 0X3C 0X30 0X34就是递增会返回来继续加。

连续传输4次。

011

INCR4

4-beat increment burst

举例:0X20 0X24 0X28 0X2C就是递增会返回来继续加。

连续传输4次。

100

WRAP8

8-beat wrapping burst

101

INCR8

8-beat increment burst

110

WRAP16

16-beat wrapping burst

111

INCR16

16-beat increment burst

响应信号

master发起一笔传输后,slave能够决定这笔传输的进程,而master不能取消已经发出的传输。slave经过HREADY信号反映传输是否完成,经过HRESP[1:0]反映传输的状态。

slave能够以下方式完成一笔传输:

当即完成一笔传输;

延迟一个或几个周期完成传输;

传输失败返回error;

延迟传输,释放总线。

传输完成HREADY

为高时传输完成,为低时传输须要延迟。

传输响应HRESP[1:0]

00: OKAY

01: ERROR

10: RETRY

传输未完成,请求主设备从新开始一个传输,arbiter会继续使用一般的优先级

11: SPLIT

传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其余请求总线的主设备能够访问总线

地址译码

地址译码器用于为总线上每一个slave提供选择信号HSELx,选择信号是经过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在必定条件下可能会出现这样的状况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。

每一个slave最小的地址空间为1KB,全部的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到全部的地址空间时,可能出现访问到一个不存在的地址的状况,这就须要增长一个附加的默认slave来为上面的状况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。

仲裁

仲裁机制保证了任意时刻只有一个master能够接入总线。arbiter决定哪一个发出接入请求的master能够接入总线,这经过优先级算法实现。AHB规范并无给出优先级算法,设计者须要根据具体的系统要求定义。通常状况下arbiter不会中断一个burst传输,将总线接入权让给其余master。固然未定义长度的burst传输是能够打断的,这要看优先级算法是如何规定的。若是一笔burst被打断,master再度得到接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次得到接入受权后,会继续传输剩余的5 beat,剩余部分能够由一个SINGLE和一个INCR4组成,或者一个INCR。

HBUSREQx:master向arbiter发出接入请求的信号。

HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。

HGRANTx:arbiter产生指示master得到受权,当HGRANTx信号为高同时HREADY为高时,master能够向总线传输地址信号。

HMASTER[3:0]:arbiter产生指示哪一个master得到受权,这一信号用于地址控制多路来选择哪一个master接入总线。

HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。

HSPLIT:供支持SPLIT传输使用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值