最近在带一个实习生做总线相关的东西,虽然在此之前我有过SoC的设计经历,但我对AMBA总线的理解还非常不足。希望通过这一系列的文章,让读者和我自己更加深入的认识AMBA总线。
声明:对于此类知识的学习,一定要看官方文档。任何人的讲解都是二手知识,包括我自己也只是拾人牙慧,很多东西不亲自去看文档是无法理解的。
我的目标是希望通过我的一些讲解,帮助各位快速入门,看文档的时候不至于感觉晦涩难懂。此外本人的讲解不仅仅是照本宣科,会带上自己的理解以及一些设计实例。让大家学习知识本身的时候,也能领略到背后的设计思想,从而可以做到触类旁通。
AMBA总线developer.arm.com/Architectures/AMBAhttps://link.zhihu.com/?target=https%3A//developer.arm.com/Architectures/AMBA
什么是总线?
首先,在学习AMBA总线之前,我们先对总线下一个定义。根据维基百科的定义:总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。
当我们谈到总线的时候,大致可以将其分为片上总线和片外总线。其中片外总线一般指的是两颗芯片或者两个设备之间的数据交换传输方式,包括UART、I2C、CAN、SPI等都可以纳入这一范畴。而AMBA总线为片上总线,即同一个芯片上不同模块之间的一种规范化交换数据的方式。基于片上总线,我们可以非常迅速的搭建SoC,AMBA总线在片上总线处于绝对统治的地位,对于芯片工程师而言,必须掌握AMBA总线。
对于总线而言,有以下比较重要的性能指标或者是概念需要掌握:
- 总线带宽:指的是单位时间内总线上传送的数据量;其大小为总线位宽*工作频率(单位为bit,但通常用Byte表示,此时需要除以8)。
- 总线位宽:指的是总线有多少比特,即通常所说的32位,64位总线。
- 总线时钟工作频率:以MHz或者GHz为单位。
- 总线延迟:一笔传输从发起到结束的时间。在突发传输中,通常指的是第一笔的发起和结束时间之间的延迟(什么事是突发传输后面再讲)。
AMBA是什么?
AMBA的全称为Advanced Microcontroller Bus Architecture。AMBA为一系列的协议,其为ARM公司的知识产权。其定义了SoC各个模块之间是如何互联,如何通信的。虽然AMBA直接翻译过来为高级微控制器总线架构,但实际上其应用场景已经远远不止于微控制器上。下图为基于AMBA总线的一个互联架构。可以看到基于AMBA总线,可以快速的将各个模块连接起来。
前面已经提到,AMBA是一系列的协议。其最早由ARM于1996年提出,一经发出便取得了巨大成功。其发展历史如下图所示。由于AMBA发展时间很久,出现了多代产品。其中的某个协议的叫法也存在不同。因此有以下几点需要说明:(这也是本人之前遇到过的坑)
- AMBA“X”代表了第多少代协议。
- AMBA1已经不用掌握了,因为市场已经抛弃了这代协议。
- AMBA2推出了AHB协议,该协议沿用至今;而AMBA2中的APB2协议,也已经被市场抛弃了。
- AMBA3推出了APB3、AXI3、AHB-lite协议(ATB协议是用作CPU的trace的,绝大部分人都不会用到,我也不会讲解,因为我也不会)。需要注意的是,AXI3代表的含义是,第三代AMBA总线中的AXI协议。这也是AXI协议的首次提出。因此也没有AXI1和AXI2协议!APB3和AHB-lite目前仍然广泛使用,后面会进行讲解。
- AMBA4推出了ACE协议,以及AXI的兄弟协议,AXI-lite和AXI-stream。
- AMBA5对AXI、AHB和ACE协议进行了优化,此外还推出了CHI协议。
- APB1.0一般指的是2003年发布的AMBA3中的APB版本,也就是APB3。而APB2.0一般指的是2010年发布的AMBA4中的APB的2.0版,也就是APB4(是不是听到这里已经晕了,再结合图片看看)
本系列课程会讲解APB、AHB、AXI协议。以及AHB-lite、AXI-lite和AXI-stream协议。AHB-lite为AHB的简化协议,而AXI-lite和AXI-stream是AXI的兄弟协议,后续会详细讲解。至于ACE和CHI协议,不会讲解(因为我也不会)。
接下来会分两篇文章讲解APB总线,第一篇文章讲解基本概念,第二篇文章讲解一些实战代码。如果大家想侧重于哪方面的讲解,欢迎评论和私信。
欢迎和我一起学习AMBA总线,完整的专栏在这里: