协议 | 内容 |
---|---|
AMBA 1.0 | ASB,SPB |
AMBA 2.0 | AHB,ASB,APB |
AMBA 3.0 | AMBA Advanced eXiensibele Interface (AXI) |
而在AMBA总线体系中包括了三种总线:
1.AHB : Advanced High-performance Bus,用于高性能、高时钟工作频率模块。
2.ASB :Advanced System Bus,用于高性能系统模块。
3.APB :Advanced Peripheral Bus,用于处理慢速外设模块。
AHB总线在AMBA2中就已经定义,AHB总线一开始主要是作为系统高速总线使用,适用于高性能,低功耗的系统设计。目前因为AXI总线作为高速总线的优势更加明显,AHB会用在相对低速的系统设计中。基本排序就是APB适用于低速设计,AXI适用于高速设计,AHB则介于两者之间。
大多数在总线上的模块,包括CPU只是单一属性的功能模块:主模块或者从模块。
主模块是向从模块发出读写操作的模块
从模块是接收命令并主从反应的模块
还有一些模块具备两种属性,列如DMA,在被编程的时候是从模块,在系统读传输数据时是主模块主模块:Cortex-M内核、DMA储存器、DMA外设、以太网DMA USB等
连接组件和从模块:内部flash、内部SRAM、AHB2/APB桥、APB外设之间的接口
如下图给出一个典型的AMBA系统:
从图中可以看出AHB/ASB总线到APB总线需要通过桥接器(Bridge)进行连接。
对比与AHB总线协议,APB应用于慢速外设,不需要AHB总线体系的Arbiter和Decoder
下面是对于APB总系接口信号的描述:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-93AhKzYN-1669701544639)(2022-11-25-10-56-10.png)]
通过图片可以看出,APB总线接口信号主要有系统信号、地址信号、方向信号、数据信号、传输阶段控制信号。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BKJouFRG-1669701544641)(2022-11-25-11-16-10.png)]
状态机运行在下面所述的三个状态:
- IDLE:
外设总线默认状态。- SETUP:
当有传输要求时总线转移到SETUP状态,这时对应选择信号,PSELx被断言。总线仅在SETUP状态保持一个时钟周期并将总是在下一个时钟上升沿移动到ENABLE状态。- ENABLE:
使能信号PENABLE在ENABLE状态中被断言。地址、写和选择信号都从SETUP到ENABLE状态转变过程保持稳。
ENABLE状态也仅持续一个周期并且在这个状态之后如果没有进一步传输要求总线将返回IDLE状态。另外,如果紧跟着另外一个传输,那么总线移动到SETUP状态。地址、写和选择信号在ENABLE到SETUP状态转换的期间有小的跳变也是允许的。
从状态机看,APB对每一笔数据的传送,均需花 2 个周期的时间,且 APB 的数据传递不适用在有流水线架构的模块设计中。
下图表示APB的基本写操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCAxBEtK-1669701544642)(2022-11-25-11-23-12.png)]
1.在 T1 时,有限状态机进入预设的 IDLE 状态;
2.在 T2 时,数据地址、读写控制信号和写入的数据会在频率正沿触发时,开始作写的数据传递准备,这个周期也就是刚才所提及SETUP状态。译码电路在此状态会根据数据地址去译码出所要写入APB Slave,此时所对应到 S 的 PSEL 信号将由 0 变 1;
3.在 T3 时,有限状态机会进入 ENABLE 状态,PENABLE 信号在此状态会被设成 1;
4.在 T4 频率正沿触发时,PENABLE 信号将由 1 变 0,而 PSEL 信号在若没有其它数据的写入动作时,也将由 1 变 0。为了减少功率的消耗,APB 的数据地址和读写控制信号在下一笔数据传递前,将不会作任何改变。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lZO6eJlm-1669701544642)(APB_READ.png)]
由图中可发现除了写信号是为低有效外,APB 读操作时序图和写操作时序图非常相似,在这里我们就不再作详细的解释。
要特别注意的是,在 T3 后,也就是在进入 ENABLE 周期后,APB 从必须要将 Master 所要读取的数据准备好,以便 Master 可以在 ENABLE 周期末被 T4 正时钟沿触发时正确的将数据读取。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGaRBfdE-1669701544643)(APB_AHB_WR.png)]
在频率很高的情况下,在ENABLE CYCLE中可能数据不能够直接映射到AHB总线,需要在APB桥中在T4的时候打一下锁住,并在T5的时候才被AHB主采样。虽然需要多一个等待周期(一共2个,HREADY反压两拍),但是由于频率提升了因此总的性能也提升了。
T1:在 AHB 总线开始传送;
T2:地址被 APB 总线采样。如果该传送是针对外设的话,这个地址就会被译码成选择信号发往外设。T2就是 AHB 的SETUP CYCLE。
T3:APB 的 ENALBE CYCLE,PENABLE 拉高,数据被读出。
T4:读出的数据直接映射到 AHB 总线上,在上升沿被 AHB 主采样。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eItJMTry-1669701544643)(APB_AHB_RD.png)]
APB总线上的单块数据写操作不需要等待周期。APB桥的责任是对地址和数据进行采样,并在写操作的过程中保持它们的值。
T1:AHB 开始作数据地址和读写控制信号的传递(HADDR 和 HWRITE)
T2:APB bridge 栓取住 AHB 送来的数据地址及读写控制信号,同时进入到 APB 有限状态机的 ENABLE状态
T3~:其后的读和写动作跟之前所介绍的 APB 读写动作一模一样,在这里我们不再加以详述。
下图是突发写传输时序图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqTrDTqQ-1669701544643)(APB_AHB_WR_BURST.png)]
虽然第一个传输可以零状态等待状态玩抽,但之后到外设总线的传输将为每个传输的执行要求一个等待状态。
APB桥中需要有 2 个地址寄存器,当处理一个数据块写操作时,可以寄存下一个数据块的地址。
下图给出了背靠背传输的时序,分别写,读,写,读
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JDflZwTy-1669701544644)(APB_AHB_WR&RD.png)]
如果写操作之后跟随着读操作,那么需要 3 个等待周期来完成读操作。通常的情况下,不会有读操作之后紧跟着写操作的发生,因为两者之间 CPU 会进行指令读取。
AMBA AHB协议总线的接口适用于高性能的设计。
对于AHB总线协议现在流行的主要有这几种AHB-Lite、AHB2和AHB5这几种。
在AMBA协议中,AHB一开始主要面向系统级高带宽高性能的系统互联设计,支持多master,多slave的互联模式。但是随着系统的发展,AHB更多用于支持简单的数据传输,因此后来对AHB协议做了简化设计,定义了AHB-Lite协议,简化之后的协议主要用在单master数据访问中,不需要支持split与retry,因为中间的多外设结构都可以通过互联方便的实现。
目前AHB协议多用在低性能需求的M型处理器中,也多用在片上memory或者一些低带宽需求定位外设接口设计。
基于AHB接口的单口SRAM控制器主要运用到AHB总线知识,详情见AHB协议,在这里对AHB总线的Master、slave的端口进行描述,并解释清楚端口的定义与作用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvsHgxe2-1669701544644)(2022-11-24-18-46-55.png)]
图中左侧信号为AHB总线传输到总线控制单元(slave)的信号,包括了地址和数据。右侧信号为控制单元反馈给AHB总线的信号。信号的命名基本与AHB总线协议兼容。
下面分析信号的作用:
信号 | 来源 | 目的地 | 描述 |
---|---|---|---|
HRESTETn | 系统总线 | - | 复位,AHB复位信号低有效 |
HCLK | 时钟源 | - | 时钟 |
HADDR | Master | Decoder | 地址信号 |
HWRITE | Master | slave | 读写控制信号,低电平为读,高电平为写 |
HTRANS[1:0] | Master | slave | 传输类型,分为IDLE、BUSY、NONSEQ、SEQ四种类型,对于SRAM只有当状态为NONSEQ、SEQ时工作 |
HSIZE[2:0] | Master | slave | 控制传输数据宽度,8、16、32、byte、halfword、word |
HBURST[2:0] | Master | slave | 突发类型,单个数据(Single)、任意长度数据(INCR)、打包4拍(WRAP4)、地址回环(INCR4) |
HWDATA | Master | slave | 写数据总线,Master到Slave |
HMASTER[3:0] | Master | slave/Exclusive Access Monitor | 主模块表示符。如果主模块具有多个独立存取的能力线程,则生成该信号。 为了确保每个主模块具有唯一的标识符,连接器可以修改该信号该信号仅在Exclusive_Transfer = Ture,才支持 |
HMASTLOCK | Master | slave | HMASTLOCK = 1,表示当前传输是锁定序列的一部分,与地址和控制信号具有相同的序列 |
HEXCL | Master | Exclusive Access Monitor | 独立传输模式。表面当前传输的数据为独立序列的一部分,该信号仅在Exclusive_Transfer = Ture,才支持 |
HNONSEC | Master | slave/Decoder | HNONSEC = 0表示当前传输是安全传输,该信号仅在Exclusive_Transfer = Ture,才支持 |
HPOROT[3:0] HPOROT[6:4] |
Master | slave | 保护类型 拓展的3bit,表示拓展的储存器类型 |
HSELx | Decoder | slave | slave选择信号,拉高表示从机被选中 |
HREADY | 多路MUX | Master & slave | 高位,告诉Master和所有slave传输结束;低位,需延长传输周期 |
HREADYOUT | slave | 多路MUX | HREADYOUT = 1 ,表示传输在总线上结束,通过拉低该信号进行传输扩展,只在AHB-Lite里面出现 |
HEXOKAY | slave | 多路MUX | 表示独立传输是否成功,支持从机独占传输响应,该信号仅在Exclusive_Transfer = Ture,才支持 |
HRESP[1:0] | Slave | Master | Slave发给Master |
HRDATA | Slave | 多路MUX | 读数据总线,Slave到Master的传输状态,AHB to APB时,PSLVERR被映射到HRESP |
HSPLITx[15:0] | slave | Arbiter | 从机用这 16 位的分块总线来指示仲裁器总线主机应该被允许重试一个分块传输。分块总线上的每一位对应一个总线主机 |
HBUSREQx | 系统总线 | Master | 从总线主机 x 传向总线仲裁器用来表示该主机请求(控制 )总线的信号 。 系统中每个总线主机都有一个HBUSREQx信号,最多 16 个总线主机。 |
HLOCKx | 系统总线 | Master | 锁主机——当该信号为高时表示主机请求锁定对总线的访问并且在该信号为低之前其他主机不应该被允许授予总线。 |
HGRANTx | 系统总线 | Arbiter | 该信号用来表示总线主机 x 目前是优先级最高的主机。当 HREADY 为高时传输结束,地址/控制信号的所有权发生改变。所以主机应在HREADY 和 HGRANTx都为高时获得对总线的访问。 |
这里对其中几个信号做较为详细的讨论: | |||
传输类型 | |||
HTRANS[1:0]信号的具体作用 | |||
HTRANS[1:0] | 类型 | 描述 | |
:—: | :—: | — | |
00 | IDLE | Slave忽略掉此时的传输 不需要传输数据;主机可通过IDLE来结束锁定传输;从机必须始终为IDLE传输提供零等待OKEY响应。 |
|
01 | BUSY | 此时的Master正在处理数据,Slave需要忽略掉此时的传输 在BURST传输间插入BUSY,此时主机正在进行突发传输,无法立即进行下一次传输;只有INCR可以将BUSY作为突发的最后一拍,且从机必须始终为其提供零等待OKEY响应并忽略该次传输。 |
|
10 | NONSEQ | 表示此时是单笔的数据,或者是Burst的第一笔数据 SINGLE传输或BURST的首次传输,地址和控制信号和之前传输无关。 |
|
11 | SEQ | 是Burst传输的剩余数据 BURST中剩余的传输均为SEQ类型,地址与上一次传输有关,控制信息与上一次传输一致。 |
控制总线
HSIZE[2:0] | 位宽 | 描述 |
---|---|---|
000 | 8 | 字节传输(Byte) |
001 | 16 | 半字传输(Hlaf word) |
010 | 32 | 字传输(Word) |
011 | 64 | - |
100 | 128 | 4字传输 |
101 | 256 | 8字传输 |
110 | 512 | - |
111 | 1024 | - |
数据总线
为了不使用三态驱动而又允许执行AHB系统所以要求分开读和写数据总线。最小的数据宽度规定为 32 位,但是总线宽度却可以增加,参见关于AHB数据总线的位宽这一节中的描述。
HWDATA[31:0]
写数据总线在写传输期间由总线主机驱动。如果传输是扩展的那么总线主机必须保持数据有效直到传输完成,由 HREADY 为高表示。
所有传输必须对齐到和传输大小相等的地址边界。例如,字传输必须对齐到字地址边界(也就是 A[1:0] = 00),半字传输必须对齐到半字地址边界(也就是 A[0] = 0)。
对于宽度小于总线宽度的传输,例如一个在 32 位总线上的 16 位传输,那么总线主机仅需要驱动相应的字节通道。从机必须负责从正确的字节通道选择写数据。 下面两个表中分别表示了小端系统和大端系统中哪个字节通道有效。如果有要求,这些信息可以在更宽的总线应用中扩展。传输大小小于数据总线宽度的突发传输将在每拍突发中有不同有效字节通道。
有效字节通道取决于系统的端结构,但是 AHB 并不指定要求的端结构。因此,总线上所有主机和从机的端结构相同这点很重要。
HRDATA[31:0]
读数据总线在读传输期间由合适的从机驱动。如果从机通过拉低 HREADY 扩展读传输那么从机只需要在传输的最后一个周期提供有效数据,由 HREADY 为高表示。
对于宽度小于总线宽度的传输从机仅需要在有效的字节通道提供有效数据,如下两个表所示。总线主机负责从正确的字节通道中选择数据。
当传输以 OKAY 响应完成时从机仅需提供有效数据。 SPLIT、 RETRY 和 ERROR 响应不需要提供有效的读数据。
32位小端数据总线的有效字节通道
地址阶段 | 地址偏移 | 地址后2位 | 数据阶段 | . | . | . |
---|---|---|---|---|---|---|
HSIZE[1:0] | HADDR[1:0] | HxDATA[31:24] | HxDATA[23:16] | HxDATA[15:8] | HxDATA[7:0] | |
00(Byte) | 0 | 00 | - | - | - | Rd[7:0] |
00(Byte) | 1 | 01 | - | - | Rd[7:0] | - |
00(Byte) | 2 | 10 | - | Rd[7:0] | - | - |
00(Byte) | 3 | 11 | Rd[7:0] | - | - | - |
01(Half word) | 0 | 00 | - | - | Rd[15:8] | Rd[7:0] |
01(Half word) | 1 | 10 | Rd[15:8] | Rd[7:0] | - | - |
10(Word) | 0 | 00 | Rd[31:24] | Rd[23:16] | Rd[15:8] | Rd[7:0] |
32位大端数据总线的有效字节通道
地址阶段 | 地址偏移 | 地址后2位 | 数据阶段 | . | . | . |
---|---|---|---|---|---|---|
HSIZE[1:0] | HADDR[1:0] | HxDATA[31:24] | HxDATA[23:16] | HxDATA[15:8] | HxDATA[7:0] | |
00(Byte) | 0 | 00 | Rd[7:0] | - | - | - |
00(Byte) | 1 | 01 | - | Rd[7:0] | - | - |
00(Byte) | 2 | 10 | - | - | Rd[7:0] | - |
00(Byte) | 3 | 11 | - | - | - | Rd[7:0] |
01(Half word) | 0 | 00 | Rd[15:8] | Rd[7:0] | - | - |
01(Half word) | 1 | 10 | - | - | Rd[15:8] | Rd[7:0] |
10(Word) | 0 | 00 | Rd[31:24] | Rd[23:16] | Rd[15:8] | Rd[7:0] |
为了使系统正确运行事实上所有模块都是相同端结构的并且任何数据通路或者桥接器也是相同端结构的。 |
突发传输
HBURST[2:0] | 类型 | 描述 |
---|---|---|
000 | SINGLE | 单笔数据传送 |
001 | INCR | 不定长的递增方式的批量传送 |
010 | WRAP4 | 4个数据的回绕方式的批量传输 |
011 | INCR4 | 4个数据的递增方式的批量传输 |
100 | WRAP8 | 8个数据的回绕方式的批量传输 |
101 | INCR8 | 8个数据的递增方式的批量传输 |
110 | WRAP16 | 16个数据的回绕方式的批量传输 |
111 | INCR16 | 16个数据的递增方式的批量传输 |
这个递增和回绕是指的地址,递增就是随着上一地址增加,回绕就是数据传输到一个边界返回。这个边界是由hsize和hburst共同决定的。注意边界不能超过1KB,且传输的起始地址必须与数据类型对应,列如传输字数据的二进制起始地址必须满足后两位为00。 |
突发终止:从机通过监控HTRANS发现突发传输的终止
·若下一个HTRANS标志为BUSY或者SEQ:突发传输未终止
·若下一个HTRANS标记为NONSEQ或者IDLE:上一次突发传输已经终止
响应信号
HRESP[1:0] | 类型 | 描述 |
---|---|---|
00 | OKAY | 传输完成 |
01 | ERROR | 传输错误 |
10 | RETRY | 传输未正常完成,需要重新尝试传输。该响应不会改变优先级 |
11 | SPLIT | 传输未正常完成,需要下一个地址重新启动传输。该响应可能会改变优先级 |
而在AHB-Lite和AHB5中只有HRESP为1bit信号,其定义为: | ||
HRESP | 类型 | 描述 |
:—: | :----: | — |
0 | OKAY | 传输完成,且没有错误 |
1 | ERROR | 传输有错误 |
仅有 OKAY 响应可以在单个周期里给出。 ERROR、 SPLIT 和 RETRY 响应需要至少两个周期。为了完成这些响应中的任意一个那么在倒数第二个(最后一个的前一个)周期从机驱动 HRESP[1:0]以表示 ERROR、 RETRY 或者 SPLIT 并同时驱动 HREADY 为低以给传输扩展一个额外的周期。在最后一个周期 HREADY 被驱动为高电平以结束传输,同时HRESP[1:0]保持驱动以表示 ERROR、 RETRY 或者 SPLIT。
如果从机需要两个以上的周期以提供 ERROR、 SPLIT 或者 RETRY 响应那么额外的等待状态可能会在传输开始时被插入。在这段时间 HREADY 信号将为低电平同时响应必须被设为 OKAY。如下图所示为AHB-Lite hresp error情况。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7RDkRCMf-1669701544645)(2022-11-24-18-36-11.png)]
需要双周期响应是因为总线通道的本质特征。在从机开始发出 ERROR、 SPLIT 或者RETRY 中任何一个响应时接下来传输的地址已经广播到总线上了。双周期响应允许主机有足够的时间来取消该地址并且在开始下一次传输之前驱动 HTRANS[1:0]为空闲传输。
对于 SPLIT 和 RETRY 响应接下来的传输必须取消因为在当前传输完成之前禁止下一次传输发生。然而,对于 ERROR 响应,由于当前传输不被重复,所以可以选择完成接下来的传输。
分块和重试响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。这两种机制都允许在总线上结束传输因此允许更高优先级的主机能够访问主机。
分块(SPLIT)和重试(RETRY)的不同之处在于仲裁器在发生 SPLIT 和 RETRY 后分配总线的方式:
1.对 RETRY 而言仲裁器将继续使用常规优先级方案因此只有拥有更高优先级的主机将获准访问总线;
2.对于 SPLIT 传输而言仲裁器将调整优先级方案以便其他任何主机请求总线即能获得访问(总 线),即使是优先级较低的主机。为了完成一个 SPLIT 传输从机必须通知仲裁器何时数据可用。
SPLIT 传输增加了仲裁器和从机的复杂性,但是却有可以完全释放总线给其他主机使用的优点,但是 RETRY(响应)的情况就只允许较高优先级的主机使用总线。
总线主机应该以同样的方式来对待 SPLIT 和 RETRY(响应)。主机应该继续请求总线并尝试传输直到传输成功完成或者遇到 ERROR 响应时终止。
下图表示了一次RETRY操作的例子。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqW5hSeX-1669701544645)(2022-11-24-18-39-53.png)]
主机从地址 A 发起传输;这次传输在接收到响应之前主机将地址移动到 A + 4;从机在地址 A 不能立刻完成传输因此从机发出一个 RETRY 响应。该响指示主机在地址 A 的传输无法完成并且在地址 A + 4 的传输被取消而用空闲传输替代。
保护信号
HPORT[3:0] | 描述 |
---|---|
HPORT[0] | 0:预取指令-instruction 1:数据访问-data |
HPORT[1] | 0:用户模式-user 1:特权模式-privilege |
HPORT[2] | 0:无缓冲 1:有缓冲 |
HPORT[3] | 0:无高速缓存 1:带高速缓存 |
而在AHB5协议中,允许拓展储存器类型,如cacheable,bufferabe,shareable等其HPORT信号则为7bit信号.
HPORT[6:0] | 描述 | |
---|---|---|
HPORT[0] | (Data/Opcode) | 0:预取指令-instruction 1:数据访问-data |
HPORT[1] | (Privilege) | 0:用户模式-user 1:特权模式-privilege |
HPORT[2] | (Bufferable) | 0:无缓冲 1:有缓冲 |
HPORT[3] | Mdifiable |
0:传输不能改变 1:传输可以被改变 |
HPORT[4] | Lookup | 0:传输不需要在cache中查找,并且传输必须直到目的地 1:传输必须在cache中查找 |
HPORT[5] | Allocate | 0:传输不在cache中分配 1:由于性能影响,传输需要在cache中分配 |
HPORT[6] | Shareable | 0:传输是不需要和其他Master共享,传输响应可以不需要等待其他主机获取后就可以给出 1:传输在系统中与其他master是共享的,直到传输可以被其他主机获取后才能给出传输响应 |
在AHB_SRAM虚拟项目中我们学习了AHB协议及是基于AHB_Lite协议写的,在此对于此协议做一定的阐述与说明。
如上图所示包含了AHB-Lite总线的各个模块组成部分:
a.主机
b.从机
c.译码器
d.多路MUX
1.AHB-Lite协议为AMBA3家族的AHB协议,简化了AHB的协议复杂性。AHB-Lite Slave一般是内存器件(MCU),外部储存接口和高带宽外围器件,低带宽的器件也可以连接至AHB-Lite上,但是一般通过桥接器连接至APB总线上。
2.AHB-Lite协议为单Master,多Slave的,因此没有仲裁器。所以与AHB2协议不同的是,没有分块传输,单周期总线移交操作。
在此对于AHB_Lite协议传输做具体分析,其他AHB协议的传输与此相似。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcNbGH7R-1669701544646)(2022-11-28-11-10-14.png)]
一个AHB-Lite传输(后续简称AHB传输)可分为两个阶段:Address phase,Data phase。其中,Address phase持续一个HCLK,可能因为之前传输未完成而延长,Data phase可能需要持续几个HCLK,通过HREADY信号控制持续HCLK数量。HWRITE控制数据传输方向,高电平为写操作,主机在写数据总线上传递HWDATA,低电平为读,丛集产生一个HRDATA在读数据总线上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXTBXEbV-1669701544646)(2022-11-28-11-10-42.png)]
1、 主机在HCLK上升沿到来时将地址和控制信号驱动到BUS;
2、 从机在HCLK的第二个上升沿到来时进行采样;
3、 从机采样结束后驱动HREADY信号,只有在HREADY拉高时读写操作才会成功, HREADY在数据有效期间必须为高,并延续至第三个HCLK上升沿到来之后,以保证正确采样。
AHB具有流水操作的性质,所以需要从机提供足够的时间来对传输进行响应。从机可以在任何传输中插入等待状态,来让提供更多的时间。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5l1MozZ-1669701544646)(2022-11-28-11-12-13.png)]
写操作时,从机在等待过程中保持写数据不变,直至传输完成;读操作时,从机仅在HREADY拉高后才给出有效数据。
这种延时是通过HREADY信号的高低来控制的,必定会存在延长了下一个传输的Address phase的时间。如图3示。事务A和C为无等待传输,事务B的传输过程中插入了等待状态,事务C的Address phase时间被延长。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31ArrqFo-1669701544647)(2022-11-28-11-13-15.png)]
T0-T1:事务A的Address phase;
T1-T2:事务A的Data phase,事务B的Address phase;
T2-T3:HREADY拉低,事务B无法及时响应,被延时;
T3-T4:HREADY拉高,事务B传输完成,事务C的Address phase从T2-T3延长至此。
注:HREADY在一定程度上表示了从机的流水操作能力,对于AHB而言,最多存在2个位处理完的transfer,即只有当总线上的transfer数量小于2时主机才能发起操作。
具体定义如信号类型HTRANS所示
1、 SINGLE可视为突发长度为1的突发传输,故传输类型为NONSEQ;
2、 SEQ类型中,地址=上一次传输地址+传输数据大小。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RYv2E69a-1669701544647)(2022-11-28-11-18-41.png)]
主机要求锁定访问,HMASTLOCK必须被声明,HMASTLOCK信号必须在处理其他传输之前进行操作。锁定传输可以用来保证信号的完整性,可以确保从机在两次传输之间不进行其他操作,主要用于多个主机通过AHB访问同一个从机的情况。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROXWv6KG-1669701544647)(2022-11-28-11-19-32.png)]
信号HSZIE[2:0]表示传输数据的大小,其设置必须小于或等于数据总线宽度。同时,可将该信号与HBURST按信号结合使用,用以控制突发传输中的地址跳转边界值。
突发操作包含SINGLE、INCR、INCR4/8/16、WRAP4/8/16几种。其中,递增突发的访问是顺序的,并且突发中每次传输的地址都是前一个地址的增量;循环突发跨越地址边界时会自动跳转地址。地址边界的计算方式是突发(Burst)中的拍数(Beats)与传输(Transfer)大小(Size)的乘积,其中,拍数由HBURST控制,传输大小由HSIZE控制。例如,一个4byte大小的WRAP4以16byte为边界进行边界跳转,若起始地址为0x34,则它的四个transfer地址分别为0x34、0x38、0x3c和0x30。
注:
1、 INCR突发地址不可以超过1KB;
2、 存在burst_len=1的突发;
3、 突发大小表示的是突发的节拍数(传输的个数),而不是传输的字节数。通过将节拍数和每拍中的数据量(HSIZE[2:0])相乘,可以计算出总突发传输的数据量总数;
4、 突发的所有传输必须满足与等于传输大小的地址边界对齐。
不定长突发master可以插入一个BUSY,master可以以NONSEQ或IDLE结束传输;定长传输不能以BUSY作为最后一拍,必须以SEQ结束; SINGLE传输只有IDLE或NINSEQ,不能有BUSY。
1、当从机响应了一个ERROR时,主机应该取消本次突发剩下的传输(也可以继续传输),未完成的传输在下一次访问从机时也不需要响应。
2、主机不允许提前终止突发请求,但当突发没有完成时,从机必须被设计为能够正常工作,这时,从机必须终止来自之前主机的突发,转而响应新的主机。
1、WRAP8
边界地址计算:传输个数 x 传输大小 = 8 x 4(byte) = 32byte,因此要以32-byte地址为边界,每逢32-byte(0x20)的地址就要向前跳转。因此这里到达0x3C之后,如果不跳转下一个地址是0x40,显然0x40是一个32-byte地址,因此向前跳0x20个地址,到达0x40-0x20=0x20。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCqKqATL-1669701544648)(2022-11-28-11-22-55.png)]
2、INCR8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s44ytTq8-1669701544648)(2022-11-28-11-23-34.png)]
3、INCR
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ev5wQH9P-1669701544648)(2022-11-28-11-24-14.png)]
从机在需要更多时间来提供或采样数据时,会将HREADY拉低来插入等待状态。主机仅对传输类型和数据地址进行更改。
1、IDLE传输等待
等待期间,传输状态由IDLE跳转至NONSEQ,传输类型保持不变。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6V0HZR3L-1669701544649)(2022-11-28-11-25-46.png)]
2、定长突发中的BUSY传输
定长突发过程中,主机可以在HREADY拉低时,将传输由BUSY变为SEQ,传输类型保保持不变
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2jNRnXbK-1669701544649)(2022-11-28-11-26-32.png)]
3、不定长突发中的BUSY传输
不定长突发过程中,主机可以在HREADY拉低时,将传输由BUSY变为NONSEQ、SEQ或IDLE。跳转到SEQ,突发继续;跳转到NONSEQ或IDLE则终止当前突发开始下一笔突发。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZBGTENDd-1669701544649)(2022-11-28-11-27-03.png)]
1、IDLE传输等待
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Jgb54db-1669701544650)(2022-11-28-11-28-10.png)]
2、在一次ERROR之后
在传输等待期间,如果从机响应了一个ERROR,那么可在HREDAY拉低时更改地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VbjMEgI-1669701544650)(2022-11-28-11-28-32.png)]
主机在开始传输之后无法主动取消,从机必须提供一个响应信号HRESP,用来指示传输状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-14tdpQ3y-1669701544650)(2022-11-28-13-02-36.png)]
OKEY:传输完成或从机需要额外时间完成,HREADY信号用来指示传输完成还是插入等待周期;
ERROR:传输过程中发生错误,向主机发出错误信号,需要两个周期完成(因为从机发出error时下一个传输的地址已经被传入总线了,两个周期的ERROR响应给主机提供了足够的时间取消下一次访问并将跳转到IDLE),HREADY在第二个周期拉高。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TxBNAErp-1669701544653)(2022-11-28-13-03-12.png)]
从机可通过一下三种方式结束传输:
1、 立即完成,HREADY=1,HRESP=0(OKEY)代表传输成功;
2、 插入一个或多个等待状态完成传输,HREADY拉低插入等待,然后HREADY拉高,HRESP=0,在从机插入多个等待状态时,HRESP必须为OKEY。一般情况从机不要插入超过16个等待周期。
3、 发出错误信号表明传输失败。
当从机需要两个以上的周期来响应ERROR时,可以在传输开始时插入更多的等待状态,HREDAY=0,HRESP=0。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdg9hOtS-1669701544654)(2022-11-28-13-03-38.png)]
注:从机提供error响应后,主机可以取消剩余的BURST传输,也可以继续.
AHB总线的结构大致如上述的典型的AMBA系统类似,AHB总线将微控制器、RAM、外部存储器接口、DMA等各种具有AHB总线接口的控制器连接起来,构成了独立完整的SOC系统。同时可以通过AHB2APB桥接器(Bridge),连接至APB总线系统。
AHB的基本特性
1.Burst传输(突发传输)
2.Split事务处理(分块处理)
3.单周期总线Master移交
4.无三态
5.更宽的数据总线配置(最大支持1024bit,可自己定义)
6.流水线操作
7.可以支持多个主设备(最多16个)
如图所示AHB总线由这些结构组成,同时总线可以分为三路通道
Master
1.发起一次读、写操作
2.某一时刻只允许一个主设备使用总线
slave
1.响应一次读、写操作
2.通过地址映射来选择控制哪一个从设备(由译码器完成)
仲裁器Arbiter
仲裁某一个主设备控制总线
译码器Decoder
通过地址译码器决定哪一个从设备
而对于AHB 5总线的特点做之下概括:
1.扩展存储类型
2.安全传输
3.字节顺序Endian
4.时钟稳定
5.独占传输(Exculusive transfer)
6.原子性访问(Multi-copy Atomicity)
额外:
7.锁定传输
8.多从机选择
9.原子性访问(single-copy Atomicity)
10.用户信号
AHB 5定义了扩展存储器类型功能。定义接口是否支持扩展的存储器类型,如果没有定义,那么接口就不支持该类型。具体信号受到HPROT信号控制,可以阅读HPROT信号定义
字节顺序ENDIANNESS
同时在AHB 5协议中引入了Endian功能,在原生AHB支持大端和小端系统,支持两种储存数据方案的同时,可以定义支持哪种大端数据的方法。
BE8:字节不变的大端模式; 字节访问(8bit)使用的数据总线 与小端模式访问地址相同;
BE32:字不变的大端模式;字访问对最高有效字节与最低有效字节使用相同的数据总线位,与小端模式访问地址相同;
下面给出了使用小端模式,字节不变大端模式,字不变大端模式的变量:
a.小端模式
- 当小端模式访问一个字节,下面方程显示使用了那些数据位
Byte_Lane = Address - INT(Address / Data_bus_bytes) * Data_bus_bytes- 数据在DATA[8Byte_lane + 7 : 8Byte_lane]上传输;
- 当大的小端模式传输出现时,数据传输:
1) 最低有效字节被驱动到传输地址上;
2) 然后越来越大的字节按照地址递增的方式依次传输;
b.字节不变的大端模式:
- 当字节不变的大端模式访问一个字节,下面方程显示具体使用的数据位情况:
Byte_Lane = Address –(INT(Address / Data_bus_Bytes)) × Data_Bus_Bytes- 数据在DATA[8Byte_lane + 7 : 8Byte_lane]上传输;
- 注意:
1) 这和小端模式情况相同,因为大端和小端模式访问在字节传输上是等效的;- 当大量的字节不变大端模式传输时,数据传输:
1) 最高有效字节被驱动到传输地址上;
2) 越来越少的字节数按照地址递增的方式依次传输
c.字不变的大端模式:
- 当字不变的大端模式访问一个字节,下面方程显示具体使用数据位的情况:
Address_Offset = Address –(INT(Address / Data_Bus_Bytes)) × Data_bus_Bytes
Word_Offset = (INT(Address_Offset / 4)) × 4
Byte_Offset = Address_Offset – Word_Offset- 数据在DATA[8*(Word_Offset + 3- Byte_Offset) + 7 : 8*(Word_Offset + 3 - Byte_Offset)上传输
- 对于32 bit的数据总线,Word_Offset = 0, 并且公式可以简化为:DATA[8*(3- Byte_Offset) + 7 : 8*(3 - Byte_Offset);