在 SOC 各种总线中,AXI 是最重要的总线,没有之一。不管是在工作中,还是在面试中,AXI 协议是一个必须精通的知识点。ARM 从 AMBA1 到 AMBA5 一共五代的 AMBA 总线中,AXI 有两代,分别是 AMBA3 的 AXI3 和 AMBA4 的 AXI4。AXI3 和 AXI4 的区别在协议里当然可以找到对应的部分,但是真正的理解和总结 AXI3 和 AXI4 的文章确实没有找到。这篇文章结合自己的理解来总结一下 AXI3 和 AXI4 的区别以及互联。
另外,说一句题外话,如果想真正的理解 AXI 总线,那么必须要去学习 CPU 和 SOC 体系结构的相关知识,因为 AXI 作为系统总线很多功能就是为系统来服务的。
1. AXI3 与 AXI4 的区别
为了方便总结和记忆,AXI3 和 AXI4 的区别的思维导图如下:
1.1 Burst support
AX4 对 burst length 进行了扩展:
AXI3 最大 burst length 是 16 beats;AxLEN 位宽是 4bit
AXI4 支持最大到 256 beats,AxLEN 位宽是 8bit;但是这也是有限制的:
- 只有 INCR burst type 支持超过 16 beats 的 Burst;WRAP and FIXED burst types 最大还是支持 16 beats 的 Burst,和 AXI3 保持一致;
- Exclusive accesses 的 burst length 必须小于 16.
但是在实际使用中,很少使用支持超过 Burst Length 超过 16 的命令,这是因为 Burst Length 太长会一直占用总线,影响了系统性能;而且 AXI 总线的一个限制就是 Burst 一旦开始是不能取消的,如果 Burst 太长,一旦出错,影响比较大;
比如在 ARM 的 CPU 中,就没有使用超过 16 beats 的 Burst。
1.2 Quality of service signaling
AXI4 增加了 2 个 4-bit QoS 命令信号:
AWQOS 4-bit QoS identifier sent on the write address channel for each write transaction
ARQOS 4-bit QoS identifier sent on the read address channel for each read transaction.
但是 AXI4 协议并没有规定 QoS 的用法,也规定不了,因为这是一个系统全面考虑的特性。AXI4 协议不可能规定某个 master 比如 CPU 必须是多少 QoS,这和 SoC 的系统实现强相关,一般是架构师会定义。
AXI4 建议的 QoS 是 AxQOS 值越大,优先级越高;
但是要注意的是,有些 SoC 恰恰相反,AxQOS 值越大,优先级越低,所以要根据 Spec 来;
QoS 信号的增加是随着越来越多的 master 对总线需求的冲突越来越明显,系统的带宽就那么多,那么如何给不同的 IP 分配不同的 QoS 就是一个架构师必备的功底,而且没有不变的规律可以遵守。
1.3 Multiple region interfaces
AXI4 为了支持区域标识,增加了两个 4-bits 的区域标识符:
AWREGION region identifier sent on the write address channel for each write transaction
ARREGION region identifier sent on the read address channel for each read transaction.
区域标识符的使用意味着 slave 不必支持不同逻辑接口之间的地址解码。
如果一个 slave 把内部可访问地址分为多个区域,那么一般情况下,只需要通过高位地址来区分不同的区域;如果采用了区域标识符,那么就不需要采用地址解码区分了。
另外,通过划分 region,对某些 physical allocation 进行保护,别如某个 region 只能被 non-secure write,某个 region 只能被 secure write 访问;
这是一个可选的功能,一般用的比较少,而且 ARM 自己的 CPU 都很少支持。
1.4 Write interleaving
AXI4 协议去掉了 WID 信号,因此不再支持 write interleaving。
这是 AXI4 和 AXI3 的很重要和很大的一个改变。
Write interleaving 的去除使得在 WID 信号上传递的信息是多余的。所有写入数据必须与相关的写入地址顺序相同,任何需要 WID 信息都可以从写入地址通道信号 AWID 中获得这些信息。
Write interleaving 如下图所示:
在 AWID=0 的数据还未发送完后,允许 AWID=1 的数据先发送;
这样带来的代价是发送端必须要缓存多个 ID 的 wdata,不管是 maser 还是总线 interconnection 都必须要增加大量的缓存,所以增加了面积;
另外,Write interleaving 增加了系统总线设计的复杂度,而且很容易造成死锁,所以虽然 AXI3 支持 Write interleaving,但是大家在设计的时候,master 基本都没支持 Write interleaving。
所以 AXI4 就把 Write interleaving 的支持去掉了。
1.5 Write response dependencies
AXI4 对 Write response 的产生做了更严格是限制。
AXI3 BVALID 的产生依赖关系如下:
AXI3 必等到了 WVALID 和 WREADY 后才能把 BVALID 置高来响应,也就是说只要收到了所有数据,SLAVE 就可以发写响应。
AXI3 BVALID 的产生依赖关系如下:
AXI4 规定,必须等到 AWVALID,AWREADY,WVALID, WREADY, and WLAST 都为高(不是同一时刻都为高)后,SLAVE 才能发 BVALID 进行写响应。也就是不仅仅要等数据通路,而且要等地址通路,并且明确了要等 WLAST。这样能保证响应的时候 Transaction 是真正完成的。
AXI3 对 BVALID 的规定其实是有漏洞的,可能 Transaction 还未真正完成就发送了写响应。AXI4 的更新更加合理和严谨。
1.6 User signals
AXI4 增加了 user 信号:
AWUSER Write address channel User signals.
ARUSER Read address channel User signals.
WUSER Write data channel User signals.
RUSER Read data channel User signals.
BUSER Write response channel User signals.
AMBA4 中并未对 USER 信号做任何规定,只是建议不要使用这个信号,防止 IP 直接互联不兼容。但是实际 soc 中,这个信号使用的还是比较多的,用来传输 sideband 信号十分有用。
AMBA5 中进一步规定了 USER 信号的位宽:
所以说,这个信号在 SOC 内部使用比较多,但是如果要和外部互联,比如 IP 厂商一般都不会使用,防止兼容性问题。
1.7 Locked transactions
This section describes the removal of locked transaction support in AXI4.The AXI4 signals effected are AWLOCK and ARLOCK.
AXI4 去掉了对 locked transaction 的支持,对信号的影响就是 AxLOCK 从 AXI3 的 2-bits 减少到了 1bit:
如上图所示,AXI4 去掉了 Locked access。
为什么会去掉 Locked access,这是因为 Locked access 不好用,当然这是废话。Locked access 和 Exclusive access 的区别是作用的对象不同。
Locked access 作用的对象是总线,一旦发生 Locked access,那么其他的 master 都不能使用总线了,在一个复杂的 SOC 系统中,Locked access 对系统的影响就太大了,万一发生 Locked access 的 master 出点啥问题,整个系统就挂死了。这种牺牲整个系统来成就某个 master 的机制当然就会被抵制,最后 AXI4 直接不再支持这种方式。
Exclusive access 作用的对象是对应的 Slave,支持 Exclusive access 的 Slave 会在 slave 中实现一个 Exclusive access monitor,如果 monitor 记录了能够访问的 master,那么对应的 master 就能通过 Exclusive access 来访问,其他的未记录的 Exclusive access 就都不能访问。Exclusive access 对总线系统是没有要求的,只是对 slave 做了特殊要求,即使出错也不会影响系统其他部分,最多访问失败而已。
现在一般的 AXI master 都不会支持 Locked access,如果一个 IP 支持 Locked access,大概率没人会买它了。对系统来说不仅实现麻烦,而且还存在挂死系统的风险。
1.8 AWCACHE and ARCACHE
AXI4 的 AWCACHE[3:0] 和 ARCACHE[3:0]的含义有很大的改变,
AXI3 中 AWCACHE[3:0] 和 ARCACHE[3:0]的含义如下图所示:
AXI4 中 AWCACHE[3:0] 和 ARCACHE[3:0]的含义如下图所示(括号内的是 AXI3 的编号):
AWCACHE[3:0] 和 ARCACHE[3:0]的属性的改变主要是有用 ARM CPU 架构的演进,定义的 memory 属性越来
越
多,越来越复杂,所以对 AWCACHE[3:0] 和 ARCACHE[3:0]的解释就越来越多。
这些和 CPU 的架构,还有 CPU 存储系统有很大的相关性,这里就不详细解释了,如果要深入理解,必须去学习 ARM CPU V8 架构才行。
1.9 AXI-Lite
AXI4 相对于 AXI3 的另外一个改变就是定义了 AXI-Lite 协议。lite 协议其实主要目的是简化 protocol,用于系统上对 register 的访问,在实际工作中接触的比较少,这里就不详细解释了。
2.AXI3 和 AXI4 的互联
上面介绍了 AXI3 和 AXI4 的主要区别。实际 SOC 中,有些 IP 是 AXI3 接口的,有些 IP 是 AXI4 接口的,那么这些不同 AXI 版本之间的互联需要注意什么呢?可以分成下面两种情况:
2.1 AXI4 Master 连接到 AXI3 Slave
AXI4 Master 连接到 AXI3 Slave 要注意以下几点:
- 由于 AXI4 是没有 WID 信号的,不能直接把 AXI4 Master 的 AWID 直连到 AXI3 Slave 的 WID 上,这是由于如果 AXI4 Master 能够发出 outstanding 的命令,当前 AWID 值和当前的 WID 值就不是同一个了。通常的做法是把 AWID 都存到一个 FIFO 中,等到数据传完了(WLAST 收到了)再切换到下一个 AWID. 把这样读出的 AWID 作为 WID 使用。
- AXI3 的 AxLOCK 信号是 2-bits 的,做法就是直接将 AxLOCK2:0 = {1’b0, AxLOCK(master)}即可。
- AXI4 Master 不能产生超过 16beat 的 burst,通常也不会,但是要注意;
- 系统总线要么统一用 AXI3, 要么统一用 AXI4;
- AXI3 Slave 必须注意 BVALID 的产生要符合 AXI4 协议,需要修改逻辑,一般也不会有问题。
- QOS/USER/REGION 信号等多余的信号需要做额外的处理。
2.2 AXI3 Master 连接到 AXI4 Slave
- 由于 AXI4 是没有 WID 信号的,所以直接把 WID Floating 就行;
- AXI4 Slave 的 AxLOCK[0] = AxLOCK0即可;
- AXI4 Slave 的 AxLEN[7:4]=4’h0 即可;
- 系统总线要么统一用 AXI3, 要么统一用 AXI4;
- QOS/USER/REGION 信号等多余的信号需要做额外的处理。
6.AXI3 master 必须不能支持 Write interleaving,否则必须修改 AXI3 master
上面这些就是 AXI3 和 AXI4 互联的一些注意事项,在实际的工作中,很多 IP 都是 AXI3 兼容 AXI4 的,可以减少一些工作。否则就必须做 AXI3 和 AXI4 协议转换逻辑了。
后记
AXI 总线是 SOC 芯片设计最重要的总线,没有之一!可能很多刚入门的工程师即使把协议读了很多次,还是不能深入理解。这是因为,ARM 没有告诉你,需要你去了解 CPU 架构,了解 cache,了解存储系统,了解系统架构等等知识。只有了解了这些知识才能理解 USER/QOS/AxCACHE 等信号的具体作用,因为 AXI 总线本来就是为了解决系统互联而产生的。
技术很重要,技术背后的思想更重要!
技术背后的某些思想就是你解决以后问题的钥匙。希望本文对你有一点点帮助。
END
文章来源:处芯积律
推荐阅读
更多 IC 设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。