AMBA-AHB Lite协议

简介

AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,他可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。

AHB的组成

  • Master:能够发起读写操作,提供地址和控制信号,同一时间只有一个Master会被激活。
  • Slave:在给定的地址范围内对读写操作作响应,并对Master返回成功、失败或者等待等状态。
  • Arbiter:负责保证总线上一次只有一个Master在工作。仲裁协议是规定的,但是仲裁算法可以根据应用决定。
  • Decoder:负责对地址进行解码,并提供片选信号到各Slave。

单个master的AHB结构
在这里插入图片描述
针对单个master的AHB,在设计时可以省去arbiter。

AHB的操作

  1. master通过驱动地址和控制信号开始传输。这些信号提供有关传输地址、方向、宽度的信息,并指示该传输是否构成burst的一部分。传输包括:

•single

•incrementing bursts(不在在地址边界回环)

•wrapping bursts(在特定的地址边界进行回环)

  1. 写数据总线将数据从master移动到slave,读数据总线将数据从slave移动到master。

每次传输包括:

address phase(地址阶段):地址和控制周期。

data phase(数据阶段):数据的一个或多个周期。

  1. slave不能请求扩展地址阶段,因此所有slave必须能够在此期间对地址进行采样。然而,slave可以请求master使用HREADY扩展data phase。当这个信号拉低时,会在传输中插入一个等待状态,并使slave有额外的时间来提供或采样数据。
  2. slave使用HRESP来指示一个传输的成功或失败。

Signal Descriptions

1.Global signals

信号来源描述
HCLKClock source时钟信号,所有的信号时序都与HCLK的上升沿有关。
HRESETnReset controller总线复位信号,拉低时有效。

2.Master signals

信号目标描述
HADDR[31:0]Slave and decoder32位系统地址总线
HBURST[2:0]Slave表示该传输是单个传输还是burst的一部分。
HMASTLOCKSlave拉高时,该信号表明当前传输是locked sequence的一部分。它具有与地址和控制信号相同的时序。
HPROT[3:0]Slave此信号提供了关于总线访问的附加信息,主要用于任何想要实现某种级别保护的模块。这些信号指示传输是操作码获取还是数据访问,以及传输是特权模式访问还是用户模式访问。对于具有内存管理单元的主机,这些信号还指示当前访问是可缓存的还是可缓冲的。
HSIZE[2:0]Slave指示传输的大小,通常为一个byte、半个word或一个word。该协议允许更大的传输大小,最高可达1024位。
HTRANS[1:0]Slave当前传输的传输类型。IDLE、BUSY、NONSEQUENTIAL和SEQUENTIAL。
HWDATA[31:0]Slave写数据总线在写操作期间从master向slave传输数据。建议数据总线宽度不小于32位。
HWRITESlave传输方向。拉高时表示写传输;拉低时表示读传输。它与地址信号具有相同的时序,然而,它必须在整个burst传输中保持恒定。

3.Slave signals

信号目标描述
HRDATA[31:0]Multiplexor在读操作期间,读数据总线将数据从所选的slave传输到Multiplexor。然后Multiplexor将数据传输到master。建议数据总线宽度不小于32位
HREADYOUTMultiplexor拉高时表面总线上的传输完成,为低则延迟传输时间。
HRESPMultiplexor传输响应,在经过Multiplexor后,向master提供关于传输状态的附加信息。当HRESP信号拉低时表示传输状态为ok。当HRESP信号拉高时,表示传输状态为ERROR。

4.Decoder signals

信号目标描述
HSELxSlave每个AHB-Lite slave都有自己的slave选择信号HSELx,这个信号表明当前的传输是为所选的slave准备的。当slave最初被选中时,它还必须监视HREADY的状态,以确保之前的总线传输已经完成,然后才响应当前的传输。

5.Multiplexor signals

信号目标描述
HRDATA[31:0]Master读取数据总线,由decoder选择
HREADYMaster and slave当HREADY信号拉高时,向master和所有slave表示之前的传输已经完成。
HRESPMaster传输响应,由decoder选择。

Transfers

1.Basic transfers

AHB-Lite传输包括两个阶段:

Address phase:只适用于一个周期,除非之前的总线传输延长。

Data phase:可能需要几个周期。使用HREADY信号来控制完成传输所需的时钟周期数。

HWRITE控制数据传输的方向。因此,当:

•HWRITE拉高时,执行写传输,Master在写数据总线上广播数据HWDATA[31:0]。

•HWRITE拉低时,执行读传输,Slave在读数据总线HRDATA[31:0]上生成数据。

Read transfer

在这里插入图片描述

Write transfer

在这里插入图片描述
在一个没有等待状态的transfer中:

  1. Master在HCLK上升沿后将地址和控制信号驱动到总线上。

  2. 然后Slave在HCLK的下一个上升沿上采样地址和控制信息。

  3. 在slave对地址和控制进行采样后,它可以开始驱动适当的HREADY响应。该响应由Master在HCLK的第三个上升沿上采样。

上面这个简单的示例演示了传输的address phase和 data phase是如何在不同的时钟周期中发生的。任何传输的address phase发生在前一个传输的data phase。这种地址和数据的重叠是总线流水线性质的基础,能够实现高性能操作,同时仍然为Slave提供足够的时间来对传输提供响应。
Slave可以在任何传输中插入等待状态,以增加完成的时间。

下面是有等待状态的读写传输。

Read transfer with wait states

在这里插入图片描述

Write transfer with wait state

在这里插入图片描述
对于写操作,Master在整个扩展周期内稳定地保存数据。

对于读传输,在传输即将完成之前,Slave不必提供有效的数据。

当以这种方式扩展一个传输时,它具有扩展下一个传输的address phase的副作用。
下图所示为3个不相关地址A、B和C的传输,地址C有一个扩展的address phase。

Multiple transfers

在这里插入图片描述

  • 对地址A和C的传输是零等待状态的写操作。
  • 到地址B的传输是有等待状态的读操作。
  • 对地址B进行读操作时插入了等待,也影响了发送地址C的地址周期。

2.Transfer types

传输可分为四种类型,由HTRANS[1:0]控制。

HTRANS[1:0]类型描述
b00IDLE表示不需要数据传输。当master不想执行数据传输时,它使用IDLE传输。建议主服务器用IDLE传输终止Locked transfers。slave必须始终为IDLE传输提供一个零等待状态的OKAY响应,并且该传输必须被slave忽略。
b01BUSYBUSY传输类型允许master在burst中间插入空闲周期。这种传输类型表明master正在以burst继续,但下一个传输不能立即发生。当主机使用BUSY传输类型时,地址和控制信号必须反映burst中的下一个传输。只有未定义长度的burst才能将BUSY传输作为burst的最后一个周期。slave必须始终为BUSY传输提供一个零等待状态的OKAY响应,并且传输必须被slave忽略。
b10NONSEQ表示单次传输或burst的第一次传输。地址和控制信号与之前的传输无关。总线上的单个传输被视为长度为1的burst,因此传输类型是非连续的。
b11SEQ在一个burst中剩余的传输,地址与前一次传输有关。控制信息与前一次传输相同。该地址等于前一个传输的地址加上传输大小(以字节为单位),传输大小由HSIZE[2:0]信号发出。

在这里插入图片描述
T0-T1: 4拍的读操作从NONSEQ传输开始。

T1-T2: Master无法执行第二拍,并插入一个BUSY传输来延迟第二拍的开始。Slave为第一拍提供读数据。

T2-T3: Master现在准备开始第二拍,所以一个SEQ传输被发出信号。Master忽略Slave在读数据总线上提供的任何数据。
T3-T4: Master执行第三拍。Slave为第二拍提供读数据。

T4-T5: Master执行最后一拍。slave无法完成传输,使用HREADY插入一个等待状态。

T5-T6: Slave为第三拍提供读数据。

T6-T7: Slave提供最后一拍的读数据。

3.Locked transfers

在这里插入图片描述

  • 如果master需要锁定访问,可以拉高HMASTLOCK信号。这个信号向任何slave表明当前的传输序列是不可分割的,因此必须在处理任何其他事务之前进行处理。
  • 通常,Locked transfers用于维护信号量的完整性,通过确保slave在微处理器SWP指令的读和写阶段之间不执行其他操作。
  • 在Locked transfers之后,建议master插入一个IDLE传输。
  • 大多数slave没有实现HMASTLOCK的要求,因为它们只能按照接收到的顺序执行传输。可以被多个master访问的slave则必须实现HMASTLOCK信号。

4.Transfers size

HSIZE[2:0]表示数据传输的大小。

HSIZE[2:0]大小(bits)描述
0008Byte
00116Halfword
01032Word
01164Doubleword
1001284-word line
1012568-word line
110512-
1111024-
  • HSIZE设置的传输大小必须小于或等于数据总线的宽度。例如,对于32位数据总线,HSIZE只能使用b000、b001或b010。
  • 将HSIZE与HBURST结合使用,以确定wrapping burst的地址边界。
  • HSIZE信号与地址总线具有完全相同的时序。然而,它们必须在整个burst传输过程中保持恒定。

5.Burst operation

AHB支持4、8和16拍的burst、未定义长度的burst以及单次传输。Burst传输包括 incrementing bursts和 wrapping bursts:

  • Incrementing bursts顺序访问,并且在burst中每个传输的地址是前一个地址的增量。
  • Wrapping bursts在跨越地址边界时进行wrap操作,地址边界为burst中节拍数与传输大小的乘积。节拍数由HBURST控制,传输大小由HSIZE控制。例如,对于一个四拍的word(4字节),如果传输的起始地址是0x34,那么它包含四个到地址0x34、0x38、0x3C和0x30的传输。

HBURST[2:0]控制burst类型。

HBURST[2:0]大小(bits)描述
b000SINGLESingle burst
b001INCRIncrementing burst of undefined length
b010WRAP44-beat wrapping burst
b011INCR44-beat incrementing burst
b100WRAP88-beat wrapping burst
b101INCR88-beat incrementing burst
b110WRAP1616-beat wrapping burst
b111INCR1616-beat incrementing burst
  • 对于未定义长度的burst,master可能会插入BUSY传输,然后决定不再需要数据传输。在这些情况下,master可以执行NONSEQ或IDLE传输以终止未定义长度的burst。
  • 在burst开始后,如果需要更多的时间才能继续进行burst中的下一个传输,master就会使用BUSY传输。
  • 对于incrementing INCR4, INCR8, INCR16 以及wrapping WRAP4, WRAP8, WRAP16,必须以SEQ传输结束。
  • Master不允许在SINGLE bursts后立即执行BUSY传输。SINGLE bursts必须紧随一个IDLE传输或一个NONSEQ传输。

Four-beat wrapping burst, WRAP4

在这里插入图片描述
因为这个burst是一个四拍的word传输,所以地址在16byte边界进行wrap,在对地址0x3C的传输之后是对地址0x30的传输。

Four-beat incrementing burst, INCR4

在这里插入图片描述
在这个例中,地址没有在16字节边界进行wrap,地址0x3C之后是对地址0x40的传输。

Eight-beat wrapping burst, WRAP8

在这里插入图片描述
因为这个burst是一个八拍的wrod传输,所以地址在32字节边界进行wrap,对地址0x3C的传输后是对地址0x20的传输。

Eight-beat incrementing burst, INCR8

在这里插入图片描述
这个burst使用halfword传输,因此地址增加了2。因为burst类型是incrementing,地址保持递增。

Undefined length bursts, INCR

在这里插入图片描述
第一个burst是由从地址0x20开始的两个halfword传输组成的写操作,这些传输地址加2。

第二个burst是由从地址0x5C开始的三个word传输组成的读操作,这些传输地址加4。

6.Waited transfers

如果slave需要更多的时间来提供数据或采样数据,则使用HREADY来插入等待状态。

Transfer type changes during wait states

当slave处于请求等待状态时,master不能改变传输类型,除非以下情况:
• IDLE transfer
在等待传输期间,允许master器将传输类型从IDLE更改为NONSEQ。当HTRANS传输类型变为NONSEQ时,master必须保持HTRANS不变,直到HREADY为HIGH。

下图为SINGLE burst的等待传输,传输类型从IDLE转换为NONSEQ。
在这里插入图片描述
T0-T1:master机向地址a发起SINGLE burst。

T1-T2:master向地址Y插入一个IDLE传输。slave插入HREADY = LOW的等待状态。

T2-T3:master插入一个IDLE传输到地址Z。

T3-T4 :master改变传输类型为NONSEQ,并发起INCR4传输到地址B

T4-T6:HREADY LOW时,master必须保持HTRANS不变。

T5-T6:到地址A的SINGLE burst以HREADY HIGH结束,master开始到地址B的第一排。

T6-T7: INCR4传送到地址B的第一拍完成,master开始下一拍去处理地址B+4。

• BUSY transfer, fixed length burst
在一个固定长度的burst等待传输期间,允许master将传输类型从BUSY更改为SEQ。当HTRANS传输类型更改为SEQ时,master必须保持HTRANS不变,直到HREADY为HIGH。
因为忙碌传输必须只插入一个burst的连续几拍之间,这并不适用于SINGLE burst。因此,这种情况适用于以下几种突发类型:
INCR4, INCR8和INCR16
WRAP4、WRAP8、WRAP16。

下图为固定长度burst的等待传输,传输类型从BUSY转换为SEQ。
在这里插入图片描述
T0-T1:master发起INCR4的下一个节拍到地址0x24。

T1-T3:master插入一个BUSY传输到地址0x28。 slave插入HREADY = LOW的等待状态。

T3-T4:master将传输类型改为SEQ,并启动下一个节拍到达地址0x28的突发burst。

T4-T6: HREADY LOW时,master必须保持HTRANS不变。

T5-T6:到地址0x24的这一拍以HREADY HIGH完成。

T6-T7: INCR4向地址0x28传输的第三拍完成,master开始向地址0x2C传输的最后一拍。

• BUSY transfer, undefined length burst
在一个未定义长度的burst(INCR)有等待状态的传输期间,当HREADY为LOW时,允许master从BUSY切换到任何其他传输类型。如果SEQ传输被执行,burst将继续,但是如果IDLE或NONSEQ传输被执行,burst将终止。

下图显示了一个未定义长度的burst的等待传输,传输类型从BUSY转换为NONSEQ。
在这里插入图片描述
T0-T1:master发起INCR burst的下一拍到地址0x64。

T1-T3:master插入一个BUSY传输到地址0x68。slave插入HREADY = LOW的等待状态。

T3-T4:master改变传输类型为NONSEQ,并发起一个地址为0x10的新burst。

T4-T6:HREADY拉低时,master必须保持HTRANS不变。

T5-T6:未定义长度的burst以HREADY HIGH结束,master开始第一拍到地址0x10。

T6-T7: INCR4向地址0x10传输的第一拍完成,master开始向地址0x14传输下一拍。

Address changes during wait states

当slave处于请求等待状态时,master只能修改一次地址,除了以下两种情况:

During an IDLE transfer

在等待传输期间,允许master为IDLE传输更改地址。当HTRANS传输类型改变为NONSEQ时,master必须保持地址不变,直到HREADY为HIGH。

下图所示为SINGLE burst等待传输,在IDLE传输过程中地址发生了变化。
在这里插入图片描述
T0-T1:master向地址A发起SINGLE burst。

T1-T2:master向地址Y插入一个IDLE传输,slave插入一个HREADY = LOW的等待状态。

T2-T3:master插入一个IDLE传输到地址Z。

T3-T4:master将传输类型改为NONSEQ,并向地址b发起INCR4传输,直到HREADY状态为HIGH,不再允许地址变更。

T5-T6:到地址A的SINGLE burst以HREADY HIGH结束,master开始到地址B的第一拍。

T6-T7: INCR4向地址B传输的第一拍完成,master开始向地址B+4的传输的下一拍。

After an ERROR response

在一个等待的传输过程中,如果slave回应一个ERROR响应,那么当HREADY为LOW时,master会被允许改变地址。

下图显示了一个等待的传输,在slave的ERROR响应后的地址改变。
在这里插入图片描述
T0-T1:master发起burst的下一拍到地址0x24。

T1-T3:master发起burst的下一拍到地址0x28。slave响应OKAY信号。

T3-T4: slave响应ERROR信号。

T4-T5:当HREADY为LOW时,master将传输类型改为IDLE,并且被允许修改地址。slave完成ERROR响应。

T5-T6:地址为0xC0的slave响应OKAY信号。

7.Protection control

保护控制信号HPROT[3:0]提供了关于总线访问的额外信息,主要用于对任何模块实现某种级别的保护。

信号主要指示本次transfer是:

  • 操作码获取还是数据访问
  • 特权模式访问还是用户模式访问。
  • 对于具有内存管理单元的master,这些信号还表明当前访问是可缓存的还是可缓冲的。

总线互连

1.地址译码

中心地址解码器为总线上的每个slave提供一个片选信号HSELx。
当HREADY拉高时,slave必须只采样HSELx、地址和控制信号,表明当前传输正在完成。
解码器产生的HSELx slave片选信号如下图所示。
在这里插入图片描述

2.总线互连

AHB-Lite协议与中央读数据复用互连方案一起使用。master将地址和控制信号发送给所有slave,解码器decoder选择合适的slave。任何来自所选slave的响应数据,经过读数据多路复用器multiplexor传到master。

下图显示了实现具有三个slave的AHB-Lite设计所需的多路互连结构。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值