总线协议 -- AMBA总线(二)
资料来源:https://wenku.baidu.com/view/bbacbd36e109581b6bd97f19227916888586b999.html
本内容只是根据上面的资料做了整理
AMBA总线(二)
上一篇详细说明了AHB基本结构以及控制线,下面下面进一步说明AHB的总线传输方式,APB总线以及IP间的互联。
AHB总线
总线传输
-
不是三态总线,读数据总线和写数据总线分开
-
Endian序
- 在AMBA定义中没有定义
- 主设备和从设备应该采用同样的印第安序
- 不支持动态印第安序
-
对于IP设计, 只有应用面比较广泛的应用程序才支持两种印第安序。
Endian序: 大印第安(大端序)序就是在存储数据时,高位放在低地址是大印第安序, 高位放高地址是小印第安序(小端序)
小端序:
大端序:
AHB仲裁信号
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410152816.png)
-
HBUSREQ
- 总线请求
-
HLOCKx
- 高电平:主设备请求锁定总线
-
HGRANTx
- 指出主设备x可访问总线
- 主设备x控制总线:HGRANTx=1且HREADY=1
-
HMASTER[3:0]
- 指出哪个主设备正在进行传输,提供进行split的信息
-
HMASTLOCK
- 指出主设备正在进行一次锁定传输
-
HSPLITx[15:0]
- 从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输。
- 每一位对应一个主设备
仲裁 - 没有等待状态的grant(授权)
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410153408.png)
仲裁 - 有等待状态的grant
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410153438.png)
HGRANT和HREADY都为高时授权总线控制地址。
仲裁 - Burst传输之后移交总线
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410153818.png)
M1进行完一次burst传输后将授权移交给M2
总线主设备的Grant信号
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410154032.png)
-
对于固定长度的burst传输,不必持续请求总线
-
对于未定义长度的burst传输,主设备应该持续送request(HBUSREQ)信号,直到开始最后一次传输。
-
如果没有主设备请求总线,则给缺省主设备grant信号,且HTRANS=IDLE
-
建议主设备在锁定总线传输结束之后插入IDLE传输,以重置仲裁优先级。
Split传输过程
-
由主设备开始传输
-
如果从设备需要多个周期才能获取数据,则从设备给出一个SPLIT传输响应,从设备记录主设备号:HMASTER
-
接着仲裁器改变主设备的优先级
-
仲裁器grant其他的主设备,总线主设备移交。
-
当从设备准备结束本次传输,将设置给仲裁器的HSPLITx信号的相应位
-
仲裁器恢复优先级
-
仲裁器grant主设备,这样主设备可以重新开始传输
-
结束
防止死锁(deadlock)
-
当多个不同的主设备试图访问同一个从设备,这个从设备发出了SPLIT或RETRY信号,这是很可能发生deadlock
-
从设备最多可以接收系统中16个主设备的请求。只需要记录主设备号(忽略地址和控制信号)
-
给出RETRY响应的从设备在某一时刻只能由一个主设备访问,可以使用一些硬件保护机制,比如ERROR
AHB接口
主设备接口
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410155331.png)
从设备接口
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410155347.png)
仲裁器
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410155521.png)
地址译码器
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410155547.png)
AHB连接示例
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410155751.png)
AHB-Lite
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410155832.png)
-
AHB 的简化版
- 只有单Master
- 不需要 HBUSREQ & HGRANT (没有其他主机,所以无需request和授权)
-
简单的从机
- 没有 retry or split 响应
- Standard AHB modules can be used
- Allows easier module design/debug
AHB总结
- 主要组成部分
- Master、slaves、arbiter、decoder
- 传输的过程
- 流水线机制
- Address phase和data phase
- 如何提高性能
- Burst read/write
- 仲裁机制
- 总线控制器的移交
- Slave短时间内无法响应
- HREADY信号拉低
- Slave长时间内无法响应
- 插入RETRY
- Master不能进行传输
- 插入BUSY
建议:
- Arbiter的优先级可以配置
- Slave长时间不能响应的话,一般不支持SPLIT响应,使用RETRY响应
- 总线上如果只有一个master的话,可以使用AHB lite协议,不用arbiter
- 设计一个新的IP时,要仔细核对AMBA的Feature和IP所支持的Feature是否匹配。
APB
APB所处的位置:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410160538.png)
APB信号
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410160612.png)
- PADDR[31:0]
- 地址总线,由设备总线的bridge单元驱动
- PSELx
- 从译码器来的信号,到每一个总线从设备x
- PENABLE
- 用于在设备总线上把所有访问按时间阶段进行
- PWRITE
- 高电平:写
- 低电平:读
- PRDATA和PWDATA
- 最多32位宽
地址解码的分级
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410160813.png)
AHB中的包含了APB slave的地址,APB中又包含了下层外围设备的地址。
APB互联
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410160942.png)
APB读写
写传输:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410161030.png)
读传输:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410161226.png)
AHB2APB Bridge
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410161902.png)
Bridge FSM
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410162102.png)
APB slave
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410162134.png)
APB到AHB的接口
AHB读APB从机的数据:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410162219.png)
可见,APB从机的PRDATA信号线可以直接连接到AHB的读信号线(读Data没有延迟) 因此可以使得AHB工作在比较高的频率。
AHB写APB从机:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410162531.png)
Back to Back 传输:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410163307.png)
互联
- 每一个从设备都占用系统中的一段地址空间
- 所有的从设备都是可寻址的
- 寄存器/存储器都是存储器映射方式访问
- CPU/IP读写其他IP的数据类似于读写存储器
IP间的互联通信
主设备被arbiter grant之后,可以访问总线上的所有从设备
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410163740.png)
一般IP同时拥有主从接口。
CPU和IP之间的通信
- CPU总是作为主设备
- IP总是作为从设备
- IP可以发出一个中断请求
- CPU进入中断模式,由interrupt service routine (ISR)来处理中断
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410163912.png)
Example: DMA
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410164047.png)
CPU通过读写DMA的总线接口,可以读取DMA的状态(读slave),以及配置DMA的工作模式(写slave)
Step 0:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410164226.png)
Step 1&2:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410164316.png)
Step 3:
此时控制权移交给DMA,DMA作为master对两个slave进行数据搬运(先读入再写出)
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410164607.png)
Step 4:
![](https://lyc-picture.oss-cn-shanghai.aliyuncs.com/screenshot/20200410164738.png)