AHB 组成部分
AHB Master
AHB Slave
- 响应一次读写操作
- 通过地址映射来选择使用哪一个从设备
- 外部存储器、控制器EMI、APB Bridge
AHB Arbiter
- 允许某一个主设备控制总线
- 在AMBA协议中没有定义仲裁算法,可以自己设计
AHB Decoder
- 通过地址译码来决定选择哪一个从设备
AHB 传输过程
AHB 信号
HRESET | 低电平复位有效 |
---|---|
HADDR[31:0] | 32位系统总线,4byte |
HWDATA | 写数据总线,从master写到slave |
HRDATA[31:0] | 读数据总线,从slave读到master |
HTRANS | 当前传输状态,NONSEQ, SEQ, IDLE, BUSY |
HSIZE | 当前传输的大小,0:8bit, 1:16bit, 2:32bit |
HBURST | 传输的burst类型, 8种 |
HRESP | slave发给master的总线传输状态,OKAY, ERROR, RETRY,SPLIT |
HREADY | 高:slave传输结束;低:slave需要延迟传输周期 |
HWRITE | 高:写;低:读 |
RETRY:不影响master的优先级
SPLIT:arbiter/master降低优先级
一次无需等待状态的简单传输
需要等待两个周期的简单传输
Pipeline
Burst 传输
HBURST
- 支持4beat, 8 beat, 16beat, 单字节传输,未定义长度的传输
- 支持incrementing和wrapping两种burst传输
- Increamenting burst
- 地址是上次的传输地址加4,8或16,根据HSIZE的大小最常用
- Wrapping burst
- 例:4beat的wrapping burst字传输0x34->0x38->0x3c->0x30
8beat的wrapping burst字传输0x34->0x38->0x3c->0x20->0x24->0x28->0x2c->0x30
- 例:4beat的wrapping burst字传输0x34->0x38->0x3c->0x30
怎么理解wrapping burst传输?
- 4beat: 4beat * 4byte = 16byte,到16(0x10)的倍数就会退回,不能跨越倍数的边界0x40
- 8beat: 遇到0x20的倍数就会退回
Burst 传输不能穿越1K边界
- 1k指的是0x400($2^{10}$),每到0x400需要给一个NONSEQ,重启一个burst
- HTRANS[1:0]:当前传输的状态
- IDLE, BUSY, NONSEQ, SEQ
- 00: IDLE
- master 占用总线,但没进行传输
- 两次burst传输中间master发送IDLE
- 01: BUSY
- master 占用总线,但是在burst传输过程中还没有准备好下一次传输
- 一次burst传输中间master发BUSY
- 10: NONSEQ
- 表明一次单个数据的传输
- 或者一次burst传输的第一个数据
- 地址和控制信号与上一次传输无关
- 11: SEQ
- 表明burst传输接下来的数据
- 地址和上一次传输的地址是相关的
举例: