本系列文章从秋招高频问题入手,深度剖析 AMBA 协议,如有错误之处,欢迎批评指正!
联系邮箱:zhangshaopu@ufl.edu
高频问题 1:AMBA 版本之间的区别?
AMBA 总线到目前为止演进到了 AMBA 5。最早只有 APB,后续逐渐增加了 AHB、AXI、ACE、CHI 等高速协议。
- AXI 是在 AMBA 3 提出的,有 AXI3、AXI4 和 AXI5;
- AHB 是在 AMBA 2 提出的,有 AHB、AHB-Lite 和 AHB5;
- APB 是在 AMBA 1 提出的,有 APB1-5 五个版本。
【个人理解】在学习协议规范的时候,针对不同的版本,不应拘泥于局部信号的细节变化,应该重点关注三个宏观方向:Master 和 Slave 之间的数据流、Master 和 Slave 之间的控制流、Master 和 Slave 之间的互联架构。这可以极大程度地避免初学者陷入 ARM SPEC 中某些特别边界的场景。
高频问题 2:不同版本的 AXI、AHB 和 APB 的区别?
谈到区别,就离不开【增加】和【删减】,在分析 AXI、AHB 和 APB 各自版本的区别时,也应该遵循这一思想。
注:下述三张信号对比图参考 咸鱼 IC 的博客。
2.1 不同版本的 AXI 的区别
AXI3 ---> AXI4:经历了较大的变化
增加了 QOS 信号和 REGION 信号 | 进一步细化对 AXI 事务的控制 |
扩展了 LEN 信号 | 极大提升突发长度 |
将 LOCK 信号缩减为单 bit | 只允许 exclusive 类型的原子操作 取消了 lock 类型的原子操作 |
取消了 WID 信号 | 不允许写交织 |
AXI4 ---> AXI5:几乎没什么变化
增加了低功耗信号 AWAKEUP | 该信号用于低功耗设计 |
2.2 不同版本的 AHB 的区别
AHB ---> AHB-Lite:经历了巨大的变化
总线架构发生变化 | AHB 支持多 Master,AHB-Lite 仅支持单 Master |
删除 和 Arbiter 有关的所有信号 | |
只保留 HMASTERLOCK | |
反馈信号发生变化 | HRESP 变为单比特 |
总线架构中,其上游 MUX 输出的 HREADY 需要反接 Slave 的 HREADYIN |
HREADYIN 用于当前 Slave 判断:Master 对其他 Slave的操作是否已经完成。只有其他 Slave 处于完成状态下,当前 Slave才能响应 Master的操作。
AHB-Lite ---> AHB5:几乎没什么变化,仅新增了一些信号,适应 SoC 的常见需求
扩展 HPROT、增加了【安全传输】和【独占传输】等等
扩展 HPROT | 该信号提供 保护控制 的附加信息 |
增加 HNONSEC | 该信号提供 安全相关 的附加信息 |
增加 HMASTER、HEXCL、HEXOKAY | 这些信号和 独占传输 相关 |
独占传输必定涉及到多 Master,但是 AHB5 相较于 AHB-Lite 并没有改变总线架构,本质上还是单 Master 的结构,为什么还会有独占传输呢?
这是因为 AHB5 使用了 AHB Interconnect 桥接器实现多 Master 的结构,其实 AHB-Lite 也可以这样实现多 Master 的结构。
2.3 不同版本的 APB 的区别
APB2 ---> APB3:
增加了 PREADY 信号和 PSLVERR 信号 | 反馈信号更加精细 |
APB3 ---> APB4:
增加了 PSTRB 信号和 PPROT 信号 | 支持稀疏写入,并附加保护控制的相关信息 |
APB4 ---> APB5:
增加了 PWAKEUP 信号 | 该信号用于低功耗设计 |
增加了 Parity Protection 信号 | 该信号用于奇偶校验保护 |
高频问题 3:AXI、AHB 和 APB 三者的区别?
最开始的 AMBA 系统只包含 APB 协议,这是一个 低速协议,从【总线结构】上看仅支持 单 Master 结构,从【传输类型】上看 没有突发 也 没有流水,因此 APB 往往用于和低速外设通信。
后来 AHB 协议被提出了,它的适用场景对速度有一定要求,因此相较于 APB,AHB 加入了一些新的特性:从【总线结构】上看支持 多 Master,从【传输类型】上加入了 突发传输 和 流水传输
后来,针对更高速的场景,AXI 协议被提出了。AHB 针对 APB 提升了时间上的性能,而 AXI 相较于 AHB 提高的更多是空间上的性能:从【总线结构】上,AXI 也是支持多主机的,但是它 完成了通道的分离,使得 读写可以并行,从【传输类型】上额外加入了 outstanding、out-of-order 和 interleaving
当然,从 APB 到 AXI 的演进过程中,数据总线的位宽 也在不断变大,从 32 逐渐扩大到了 1024
高频问题 4:AXI 和 AHB 的突发有什么区别?
我将从信号的角度分析 AXI 和 AHB 的区别:
AHB 和突发相关的信号有三个:HTRANS、HBURST、HSIZE。其中,HTRANS 代表突发的起始和后续、HBURST 表示突发的类型和长度、HSIZE 表示每拍突发的数据大小
AXI 和突发相关的信号有四个:BURST、LEN、SIZE、LAST。其中,BURST 代表突发类型、LEN 表示突发拍数、SIZE 表示每拍突发的数据大小
可以看到,AXI 没有继承 AHB 的 HTRANS 信号,并且将 HBURST 拆分为了 BURST 和 LEN。AXI 不使用类似 HTRANS 的信号是有原因的:AXI 的读写地址通道已经完成了分离,突发的起始地址会单独握手,并且会使用 LAST 信号指示突发结束,因此 AXI 不需要使用类似 HTRANS 的信号指示突发的起始和后续。AXI 由于分离出了 LEN 信号,因此突发长度相较于 AHB 提升显著。