AMBA总线介绍
- AMBA总线概述
- AHB
- APB
- 不同IP之间的互连
系统总线简介
系统芯片中各个模块之间需要有接口连接
总线作为子系统之间共享的通信链路
优点:成本低,方便易用(通用协议,不用协议之间的转换模块)
缺点:容易造成性能瓶颈
AMBA2.0
总线是有协议的,也有版本
- Advanced Microcontroller Bus Architecture
- AHB(Advanced High-performance Bus)
- APB(Advanced Peripheral Bus)
- ASB(Advanced System Bus)
总线发展历史
- AMBA 1.0
ASB和APB - AMBA 2.0
AHB\ASB\APB - AMBA 3.0
AMBA Advanced extensible interface(AXI) - AMBA 4.0
典型的AMBA系统
- 对于AHB总线上,Master(主设备)可以有多个,Slave(从设备)也可以有多个。
- 对于APB总线上,Master只有Bridge,主设备(Bridge)会将AHB的请求转换为APB的请求
- Master(主设备):可以主动的发起读写请求
- Slave(从设备):不能主动发起一些请求,但是可以接受主设备的发来的请求,并给予一些响应。
AHB特点
- 高速总线
- 2级流水线操作
- 支持多个总线主设备
- 支持burst传输
- 总线带宽:8、16、32、64、128bits(根据不同的功能可以进行自定义)
- 上升沿触发操作
- 对于一个新设计建议使用AHB
ASB特点
- 高速总线
- 流水线操作
- 支持多个总线主设备
- 支持burst传输
- 总线带宽::8、16、32bits
- 三态、双向总线(不适用于DFT)
- 下降沿或者上升沿触发
APB特点
- 低速总线、低功耗
- 接口简单(外设UART\I2C\SPI,本身的逻辑就会很简单)
- 在Bridge中锁存地址信号和控制信号(APB中的唯一主设备,可以锁存总线的读写请求)
- 适用于多种外设
- 上升沿触发
AHB组成部分
-
AHB主设备(master)
可以作为请求发起端访问从设备
初始化一次读或写操作
某一时刻只允许一个主设备使用总线
CPU\DMA\DSP\LCDC -
AHB从设备(slave)
响应一次读写操作
通过地址映射来选择使用哪一个从设备
Bridge从AHB端是从设备,在APB端是主设备
存储器的控制器(响应读写请求) -
AHB仲裁器(arbiter)
允许某一个主设备控制总线
在AMBA协议中没有定义仲裁算法 -
AHB译码器(decoder)
通过地址译码来决定选择哪一个从设备
APB组成
- AHB2APB Bridge
可以锁存所有的地址、数据和信号
进行二进制译码来产生APB从设备选择信号 - APB总线上所有的其他模块都是APB从设备
AMBA协议有关问题
- 与工艺无关
- 没有定义电气特性
- 仅在时钟周期级定义时序
提取时序参数依赖于所采用的工艺和工作频率
DMA实例
DMA既是主设备又是从设备,DMA相对于CPU是从设备,接受CPU的配置;相对于存储器来讲,DMA是主设备。CPU需要对一个slave接口进行配置,DMA接受(源地址,目标地址,数据长度)等信息,之后进行操作存储器进行数据传输
DMA工作过程
首先CPU向AHB总线发起一个读请求,查看DMA的状态。通常DMA在处理完数据之后,会发送一个中断给CPU,CPU接收到中断之后会进行中断处理,重新发起一个任务。
CPU在发现DMA状态可用的时候,会将DMA的描述符配置到DMA中,起始地址,结束地址,数据位宽;然后启动DMA
mem1将数据传递mem2
DMA完成数据执行之后,DMA向CPU发出终端请求;CPU检查DMA的状态
AHB总线
AHB总线互连
主设备可以发起请求,主要发送的是地址,数据和控制信号。每个Master都会发送给Arbiter,Arbiter决定哪个Master控制总线,比如选择Master2,mux就会将Master2选通,将信息传递给从设备,slave进行返回数据,decoder会选择哪个slave进行返回数据。
Dummy/Default Master
- 如果没有Master发送请求,Arbiter会将总线控制权给Dummy Master,只会产生一种请求IDLE,表示当前Arbiter空闲,没有发起任何读写操作。(Dummy Master不是一个实体,相当于一个虚拟的Dummy Master,隐藏在Arbiter或者是decoder中)。
- Default Master会将系统中的一个Master(使用频率最多的)作为一个Default Master,如果总线上没有任何一个Master进行请求的时候,Arbiter会将总线控制权给Default Master。
- 如果使用Dummy Master,在申请总线的过程中也需要耗费时钟周期,仲裁过程一般耗费两个时钟周期,使用Default Master就会节省两个时钟周期。
Default slave
假设一个4G的地址空间,每一个slave地址占据地址空间中的一部分,如果CPU访问的地址是没有定义的地址,就认为是访问的是default slave,根据传输模式,返回响应
AHB信号
总线包含的是一组信号,有总线的请求端、控制端、地址端、数据端信号。所有遵循AMBA2.0协议的AHB总线的IP都要实现这些信号。
- HWRITE拉高表示写请求,HWRITE拉低表示读请求
- HWRITE信号拉高之后,需要把HWDATA驱动
- 上图中的decoder(应该换为Arbiter和decoder,入下图所示),从Master发出经过Arbiter仲裁,选择Master,传输地址和控制信号,HREADY信号拉高表示传输完成
AHB时序
拿到任何一个协议,就要了解协议中包含的所有信号和信号的时序关系
Address phaze第一个周期Master会把地址和控制信号(地址数据)驱动到总线上(HTRANS,HSIZE,HBURST,HPROT)
下一个周期,如果是写数据,Master会把(A地址)数据驱动到HWDATA上;如果是读数据,会由slave将HRDATA驱动到总线上
这里是无等待的响应,HREADY在Data phaze上升沿是拉高的,所以数据在下一个周期就驱动过来了;如果HREADY需要几个周期,那么数据可能会经过几个周期之后才会驱动到总线上;如果是写操作,主机必须保持数据信号保持不变;如果是读操作,则从机不需要将有效数据输出到总线上。
- 如果slave没有ready,就会拉低HREADY
- 总线拉低周期越多,那么会对总线产生的负面影响越大,导致总线性能的下降。AHB等待周期不能超过16个,超过之后需要重新执行任务。
- 数据周期可以通过从机拉低HREADY信号来延迟。从机拉高HREADY代表此次传输已经成功完成。
多笔传输数据
首先将地址A驱动到总线上,下一个周期驱动A地址的数据和地址B
如果数据需要延迟两个周期才能ready,那么地址C能不能接着地址B驱动到总线上?
不能,因为地址B的数据还没有回来,如果此时驱动地址C,会造成总线数据的丢失,HREADY进行延迟的时候,地址C就需要进行相同的延迟,下一个地址驱动到总线的时候,一定是上一个地址数据HREADY的时候
AHB控制信号
Burst Transfer
一次请求里面有多笔数据传输
HTRANS
- 如果是第一笔数据传输一定是NOSEQ
- 如果当前传输数据是burst传输,传输到第四笔,SEQ传输
HWRITE & HSIZE
HPROT
控制信号小结
- 每个slave最小的空间就是1k,burst一次只能访问一个slave,一次访问不会跨越两个slave