概述
AMBA总线介绍
AMBA(Advanced Microcontroller Bus Architecture) 总线是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有高速度低功耗等特点。
总线:系统芯片中各个模块之间需要有接口来连接。总线作为子系统之间共享的通信链路。(因为ARM占据市场比较大,很大做IP设计的公司都会去兼容AMBA interface。)
ARM中的总线用于不同部件之间的通信。有两种不同类型的设备连接到总线:
- ARM处理器:它是总线的主设备,拥有对总线的仲裁权,可以通过同一总线主动发起数据传输请求;
- 外围器件:是总线的从设备,在总线上是被动的,只能对主设备发出的一个传输请求做出反应。
举例:
总线协议
做一个IP设计。要搞清楚IP的输入输出
例如,做一个AHB的IP,AHB输入,SPI等为输出。跟AHB做通信的端口是必不可少的。 数据之间传输,需要interface。
AMBA发展历史
AMBA 协定的目的是为了要推出 on-chip bus 的规范,一开始 AMBA 1.0 只有 ASB 与 APB,为了节省面积,所以这时候的 bus 协定都是 tri-state 的 bus,而到后来 2.0 的 AHB 为了能更方 便设计者(trisate bus 要花更多精力去注意 timing),因此改用 bus 改用 multiplexor 的架构,并增加了新的特性。
AMBA 1.0:ASB和APB
AMBA 2.0:AHB,ASB和APB
AMBA 3.0:AMBA Advanced extensible Interface (AXI)(可以用于ARM和FPGA的高速数据交互)
AMBA 4.0:........
传输速率速度越来越快。
AMBA总线优缺点
AMBA总线优点:
- 低成本
- 方便易用(协议简单合理。按照协议传输数据,不会出错)
AMBA总线缺点:
- 会造成性能瓶颈(传输速率有上限)
AMBA总线体系
AMBA总线体系包括以下三种总线:
- AHB:Advanced High-performance Bus,用于高性能、高时钟工作频率模块。
- ASB:Advanced System Bus,用于高性能系统模块。
- APB:Advanced Peripheral Bus,用于慢速外设模块。
典型的AMBA系统:
一个以 AMBA 架构的 SOC,一般来说包含了
- AHB(high-performance 的 system bus ): 负责连接例如 ARM 之类的 embedded processor 与 DMA controller,on-chip memory 和其他 interface,或其他需要 high bandwidth 的元件。
- APB(low-power 的 peripheral bus ):用来连接系统的周边元件,其protocol 相对AHB 来讲较为简单, 与 AHB 之间则透过 Bridge 相连,期望能减少 system bus 的 loading。
AHB支持多个Master,因此需要Arbiter来仲裁。
APB是外设总线,主要用于低带宽的片内周边外设之间的连接,如UART等,它的总线结构不想AHB支持多个Master,在APB里面,唯一的Master就是APB桥,因此不需要仲裁。 (外围设备做slave,只能由AHB读)
处理器和其它主设备/从设备都是可以替换的。
AHB-APB桥:
在AHB和APB之间,有AHB-APB桥,这是为了解决高性能器件和片内低带宽外设之家的匹配问题;
AHB-外侨:
AHB和片外总线之间,有一个AHB-外侨,这是为了解决片内高性能器件和片外设备之间的带宽不匹配。
AMBA协议其他有关问题
与工艺无关
没有定义电气特性
仅在时钟周期级定义时序
- 提取时序参数依赖于所采用的工艺和工作频率
例子:DMA搬运memory数据
DMA bus 帮助CPU搬运数据。CPU做master。DMA可以做master、slave,但是这里做slave
CPU把搬运数据分派给DMA做。
base address 0x3000-0x31000,有1000个空间。有很多register
offset address(偏移地址) 0x00 0x04 0x08 0x0C 0x10
最终地址=base address+offset address
register1(0x00 ):写1,说明DMA要start;写0,代表DMA stop
register2(0x04 ):告诉CPU,DMA现在是否有空
register3(0x08 ):告诉DMA从哪里搬移数据
register4(0x0C ):告诉DMA把数据搬到哪里去。
register5( 0x10 ):告诉DMA搬多少数据。
要先把DMA这几个寄存器先配好register3-5,然后看DMA是否有空(register2),有空就start(register1)。
假设把数据从memory1(0x1000-0x1100,1k)搬到memory2(0x2000-0x2100)
假设现在ready,启动start
数据流向:
①DMA读memory1里面的数据
②DMA向memory2里面写数据(总线在某一时刻,只能读或者写。)
③搬运完了,DMA要发interrupt给CPU(在DMA某个寄存器写入done的状态,CPU读DMA寄存器的值)
所有告知CPU的信息,都是通过中断方式。只能由CPU读其他模块的寄存器。把状态填在模块的寄存器里,向CPU发送中断。
(例如,工作做完了,在寄存器填入done的状态,向CPU发送中断,CPU检查寄存器的状态,然后CPU执行下面的指令。或者没有读到数据,写状态,发中断。发生什么事情,记录在status寄存器中,给CPU发中断。)
Step0 : CPU检查DMA的状态以确认是否可用
while(1)
{
Read(0x30004,&status)
if(status == 0)
break;
}
Step1 : CPU设置( source address ) 、( destination address ) 、( size )
Write (0x30008,0x10000)
Write(0x3000C,0x20000)
Write(0x30010,0x100)
Step 2:启动DMA
Write(0x30000,0x1)
Step3 :DMA把数据从memory 1传送到memory 2
Step 4: DMA向CPU发出中断请求
Step 5 : CPU检查DMA的状态
Read(0x30004,&status)
参考:
《AMBA 3 APB 协议规范 》
AMBA总线介绍_哔哩哔哩_bilibili
《Introduction to AMBA Bus System》 工研院 / 系統晶片技術中心工程師 吳欣龍
最后
以上就是甜甜小天鹅为你收集整理的数字ic设计——AMBA总线(1)AMBA总线介绍AMBA总线介绍 AMBA发展历史AMBA总线优缺点AMBA总线体系AMBA协议其他有关问题例子:DMA搬运memory数据的全部内容,希望文章能够帮你解决数字ic设计——AMBA总线(1)AMBA总线介绍AMBA总线介绍 AMBA发展历史AMBA总线优缺点AMBA总线体系AMBA协议其他有关问题例子:DMA搬运memory数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复