深入理解AMBA总线(六)AHB-lite Slave响应和其它控制信号

简介: 深入理解AMBA总线(六)AHB-lite Slave响应和其它控制信号

上一篇文章给大家介绍了AHB-lite的一些控制信号,重点是通过这些控制信号去理解AHB-lite为什么这么设计,采用这些控制信号有什么好处。这节课给大家带来剩余的一些控制信号介绍。

1、Slave Response Signaling

1.1、Slave Transfer Responses

在Master发起一次传输以后,剩余的传输过程实际上是由Slave在控制。一旦传输开始,Master不能在中途取消这次传输。在之前的文章中,我们都是从Master的视角去看传输的,这篇文章引入Slave响应的视角,来建立完整的传输流程。

AHB-lite实际上通过HRESP和HREADY这两个信号的组合来控制传输响应,HRESP只有以下两个值:

  • OKAY
  • 传输完成(HREADY为高)。
  • Slave额外需要传输周期,Transfer处于Pending状态(HREADY为Low)。
  • ERROR
  • 在传输过程中发生了错误(通常情况下是写了只读区域造成的)。
  • 需要两个HCLK Cycles去完成。
  • Master可以选择继续发该笔Transfer或者不再发起这次传输。

前面已经说过,HRESP和HREADY这两个信号的组合来控制传输响应,因此理论上一共有四种组合,接下来分别介绍这几种情况:

  • 当HRESP为0,而HREADY为1,代表本次传输成功。
  • 当HRESP为0,而HREADY为0。则代表Slave正在反压主机,可能是从机此时不能够及时的响应,主机此时应该维持住控制信号。当HREADY拉高,并且HRESP仍然为0,则代表本次传输成功结束。(需要注意的是,对于正常的传输,也就是不涉及错误情况的时候,HRESP应该始终为0)
  • Note:通常而言,每个Slave应该提前规定好最大的Wait states周期数。此外建议Slave不要插入多于16个周期的等待时间,否则的话每次访问可能要花费大量的时间去等待。
  • 当HRESP为1,则代表传输出现错误了。大概率是写了不让写的地方导致的。对于之前的正常传输而言,只需要维持住一个周期的响应,但是ERROR response需要两个时钟周期。(这是由于总线的流水线特性决定的,当slave发出ERROR响应时,下一个传输的地址已经被广播到总线上了。two-cycle响应给master提供了足够的时间取消下一次访问并将HTRANS [1:0]驱动到IDLE。)

我们直接看出现错误传输的情况的时序图,来便于我们的理解。下图是Master终止当前的突发传输的情况:

  • T1->T2:Slave插入一个Wait state,即HRADY为0并且将HRESP设置为OKAY。(Slave发现地址B不准写,因此要准备返回ERROR response,首先要插入一个wait states来准备后续的操作,当然也可以插入多个wait states来准备后续的操作)
  • T2->T3:Slave返回一个ERROR response,这是ERROR response的第一个时钟周期,此时HREADY为0。
  • T3->T4:Slave返回一个ERROR response,这是ERROR response的第二个时钟周期,此时HREADY为1。
  • Master因此就有足够多的时间去决定下笔是继续发这个transfer还是终止这次transfer,这也就是为什么需要两个时钟周期去维持这个ERROR response,如果没有两个时钟周期的ERROR response,那么T2->T3的HREADY就应该为高,HTRANS应该迅速变成IDLE,来完成这次传输,如果逻辑复杂的话,组合逻辑链路会过长,为了保证流水线特性,让Master有足够多的时间去感知本次传输出错了,则需要维持两拍的ERROR response,此外这也是保证和其他的正常传输一致。回顾一下没有错误传输情况的突发传输,二者都具有流水线特性)。
  • 在这个例子中,Master将HTRANS变成IDLE,代表放弃了这次对地址B的传输。
  • T4->T5:Slave返回OKAY response。这次突发传输到此结束。

当然也可以继续传输,如下图所示:虽然A+4不让写。但是Master决定继续写A+8。

2、其它控制信号

2.1、Protection Control

保护控制信号HPROT[3:0],每一位代表不同的含义。该信号用于提供一些保护信息。

  • HPORT[0],代表是取数据还是取指令。
  • HPORT[1],代表是特权还是非特权模式访问。比如操作系统的地址区域,就应该是特权访问,并不是所有的写都有权限去写这段地址空间,不然就出大事了。
  • HPROT[2],代表Bufferable。这个Bufferable指的是写的数据是可以放在Buffer里面还是一定要到达最后的目标地址空间。(实际上最终还是会写回最终目标地址空间的,只不过返回HRESP的时候,大概率是还没有写到最终的目标地址空间)对于写具有严格的先后顺序之分的地址空间,一般是Non-cacheable和Non-bufferable,否则可能会乱序。
  • HPORT[3],代表Cacheable,表示是否可以存放在Cache中,是否更新最终的memory。对于外设寄存器这种,当然是不可以Cacheable的。我们本意就是希望写目标寄存器,达到某些功能。写到Cache里面,那就没法达到预期了。

实际上很多AHB的Master或者Slave根本就不支持HPORT信号,或者是无法提供完整正确的HPORT信号。如果你用不到这些信号,ARM的推荐是:

  • Master将HPORT设置为0011,代表Non-cacheable、Non-Bufferable、Non-Privileged、data-access
  • 对于Slave而言,符合奥卡姆剃刀原理。如非必要,不去使用HPORT信号。

除此之外,AHB5(AMBA5的AHB协议)增加了很多额外的控制信号,这些信号我暂时不打算讲。因为后续还会花几篇文章专门介绍完整的AHB协议,这几篇文章大家掌握AMBA3的AHB-lite控制信号即可。

3、AHB和ARM处理器

AHB本身就是由ARM公司推出的,因此它最早就是用在了ARM系列处理器中,如下图所示:

  • AHB-lite总线用在了Cortex-M0,M0+,M3,M4,M7处理器中。用于取指令和数据访问,还用在CoreSight的调试接口上。可以看到这些处理器都是一些低功耗的处理器。AHB-lite协议简单,信号变量较少,对性能要求不高,适用于这些场景。
  • AHB2用在了一些早期的ARM处理器中,比如ARM7,实际上这种处理器内核已经没有人使用了,AHB2协议也基本上淘汰了,现在要么是使用AMBA5的AHB5或者AHB-lite或者AMBA3的AHB-lite。(AMBA5和AMBA3的AHB-lite区别很小)。
  • AHB5主要用在一些相对性能高的M系列处理器中,比如Cortex-M23,Cortex-M33。这些处理器对保护特性、带锁访问、排他访问等具有要求,因此AHB5的一些信号适用于该场景。

接下来再介绍一下对于某个特定的ARM处理器,它对应的AHB总线协议。

  • Cortex-M0/M0+:没用到突发传输,都是Single Transfer。这两款处理器都是非常轻量级的,Buffer也比较少。所以也用不到Burst,不需要源源不断的去取数据。
  • Cortex-M3/M4:没有Wrap transaction。只有Single Transfer或者基于INCR的Burst传输。(因为没有Cache,所以没有必要用Wrap transaction)。
    除此之外,还增加了sideband signal用于支持Exclusive Transfer(前面已经提到,这两款处理器使用的是AHB-lite协议,AHB-lite协议里面本身没有Exclusive相关的信号。但是有时候要跑实时操作系统的时候,需要semaphore这种机制,设计者可以自行增加这些额外信号)。
  • Cortex-M7:有三个AHB-lite接口:AHBS、AHB、AHBP

  • AHBS:AHB-lite Slave。用于让DMA去初始化TCM。TCM全称Tightly Coupled Memory。紧耦合内存,可以理解为On-chip Memory。用于存储一些关键的指令和数据。
  • AHBD:AHB-lite Debug。用来给Coresight调试用的。
  • AHBP:AHB-lite Peripheral。用来访问外设的,只支持Single Transfer。
  • Cortex-M23/M33:
  • M23和M0+很像,增加了TrustZone和整数除法功能,和M0+一样,只支持Single Transfer。
  • M33是M23和M4的缝合产品,支持TrustZone。对于突发传输,它只支持INCR Transfer(依旧没有Cache)。

本节课程就介绍到这里。原本想介绍相关代码的。但内容比较多可能难以消化。接下来应该会花3篇文章给大家介绍AHB2APB和AHB2SRAM的设计。然后介绍一下AHB的局限性,然后就开始AXI相关的介绍。有任何建议和意见欢迎评论或者私信。

欢迎和我一起学习AMBA总线,完整的专栏在这里:


https://www.zhihu.com/column/c_1663245806869291008

目录
相关文章
|
6月前
Rockchip系列之LED状态灯 串口收发数据流程以及控制状态显示(3)
Rockchip系列之LED状态灯 串口收发数据流程以及控制状态显示(3)
137 0
|
网络性能优化
【AXI】解读AXI协议的额外信号(QOS信号,REGION信号,与USER信号)
【AXI】解读AXI协议的额外信号(QOS信号,REGION信号,与USER信号)
【AXI】解读AXI协议的额外信号(QOS信号,REGION信号,与USER信号)
ZYNQ-AXI总线的信号接口要求以及时序关系
ZYNQ-AXI总线的信号接口要求以及时序关系
600 0
ZYNQ-AXI总线的信号接口要求以及时序关系
|
6月前
|
存储
MCS-51单片机的中断源
MCS-51单片机的中断源
183 1
|
6月前
|
Linux
Rockchip系列之LED状态灯 以太网收发数据包流程以及控制状态显示(2)
Rockchip系列之LED状态灯 以太网收发数据包流程以及控制状态显示(2)
97 1
|
存储 网络性能优化 vr&ar
深入理解AMBA总线(十七)AXI是如何提高性能的
深入理解AMBA总线(十七)AXI是如何提高性能的
2040 1
|
存储 安全
深入理解AMBA总线(四)AHB-lite总线
深入理解AMBA总线(四)AHB-lite总线
1123 0
|
vr&ar SoC 内存技术
深入理解AMBA总线(十二)AXI突发传输和AXI控制信号
深入理解AMBA总线(十二)AXI突发传输和AXI控制信号
1572 0
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
724 0