AMBA
Advanced Microcontroller Bus Architecture,片上总线标准
- AMBA 1.0
- ASB:Advanced System Bus
- APB:Advanced Peripheral Bus
- AMBA 2.0
- AHB:Advanced High-performance Bus
- AMBA 3.0
- AXI:Advanced eXtensible Interface
ASB
- 高速总线
- 流水线操作
- 支持多个总线主设备
- 支持burst传输
- 总线带宽:8、16、32bit/s
- 三态、双向总线(不适合做DFT)
- 上升沿或下降沿触发
APB
- 低速总线、低功耗
- 接口简单
- 在Bridge中锁存地址信号和控制信号
- 适用于多种外设
- 上升沿触发
AHB
- 高速总线,高性能
- 2级流水线操作
- 支持最多16个总线主设备
- 支持burst传输
- 总线带宽:8、16、32、64、128bit/s
- 上升沿触发
AHB组成部分
-
AHB主设备master
- 初始化一次读写操作
- 某一时刻只允许一个主设备使用总线
- CPU、DMA、DSP、LCDC...
-
AHB从设备slave
- 响应一次读写操作
- 通过地址映射来选中使用哪一个从设备
- 外部存储器控制器EMI、APB bridge
-
AHB仲裁器arbiter
- 允许某一个主设备控制总线
- AMBA协议中没有定义仲裁算法
-
AHB译码器decoder
- 通过地址译码决定选中哪一个从设备
-
AHB2APB Bridge
- 可以锁存所有的地址、数据和控制信号
- 进行二级译码来产生APB从设备选中信号
-
APB总线上的所有其他模块都是APB从设备
-
其他问题
- 与工艺无关
- 没有电气特性
- 仅在时钟周期级定义时序(时序参数依赖于工艺和频率)
AHB信号
Name | Source | Description |
---|---|---|
HCLK | Clock source | Bus clock |
HRESETn | Reset Controller | Reset |
HADDR[31:0] | Master | Address bus |
HTRANS[1:0] | Master | Transfer type(IDLE、BUSY、SEQ、NONSEQ) |
HWRITE | Master | Transfer direction |
HPROT[3:0] | Master | Protection control(很少用) |
HWDATA[31:0] | Master | Write data bus |
HSELx | Decoder | Slave select |
HRDATA[31:0] | Slave | Read data bus |
HREADY | Slave | Transfer done |
HRESP[1:0] | Slave | Transfer sesponse(Status) |
-
HRESETn
- 低电平有效
-
HADDR[31:0]
- 32位系统地址总线
-
HWDATA[31:0]
- 写数据总线,从Master写到Slave
- 位宽为 32,即 4 Byte,因此地址每次增加 4
-
HRDATA[31:0]
- 读数据总线,从Slave读到Master
- 位宽为 32,即 4 Byte,因此地址每次增加 4
-
HTRANS:指出当前传输的status
- 00 IDLE
- Master占用主线,但没进行传输
- 两次burst传输中间,Master发出IDLE
- 01 BUSY
- Master占用主线,但还没准备好下一次传输
- 一次burst传输中间,Master发出BUSY
- 10 NONSEQ
- 表明首次数据的传输
- 地址和控制信号与上一次传输无关
- SEQ
- 表明burst接下来的传输
- 地址和上一次传输相关
- 00 IDLE
-
HSIZE:指出当前传输的大小
-
HBURST:指出传输的 burst 类型
- 0、4、8、16......
- INCR突发即不停止就一直突发
- burst传输不可跨越1K边界,因为从设备的最小地址间隙是1KB(400),INCR的burst都不用改,只需要HTRANS的SEQ改成NSEQ就行
-
HRESP
- Slave的总线传输状态
- OKAY、ERROR、RETRY、SPLIT
-
HREADY
- 高:Slave指出能够进行传输
- 低:Slave需延长时间接收
- 不能超过16个时钟周期
-
两个阶段
- 由HREADY信号决定需要几个Cycle
- 分为地址周期和数据周期
-
流水线pipeline
- 先地址,然后数据
-
HWRITE:读写控制
- 高:写
- 低:读
-
HSIZE[2:0]
- 000-111,对应8-1024
- 最大值的选择取决于总线配置
- 通常使用32bit/s
-
HPROT
- 很少用,不看
AHB Slave短时间无法响应则HREADY拉低
AHB Slave长时间无法响应则发出Retry信号
WRAP说明
-
WRAP4:到 0x10(16)的倍数就回环
-
WRAP8:到 0x20(32)的倍数就回环
-
WRAP16:到 0x40(64)的倍数就回环
从设备响应信号
- RETRY和SPLIT
- RETRY:下次请求,本次Master还是一样优先级
- SPLIT:下次请求,本次Master优先级会降低
- 两周期响应原因
- 流水线特性,使得Master有足够时间处理下一次传输
- Split传输过程
- 由主设备开始传输。
- 如果从设备需要多个周期才能获取数据,则从设备给出一个SPLIT传输响应。从设备记录主设备号: HMASTER。接着仲裁器改变主设备的优先级。
- 仲裁器grant其他的主设备,总线主设备移交。
- 当从设备准备结束本次传输,将设置给仲裁器的HSPLITx信号的相应位。
- 仲裁器恢复优先级。
- 仲裁器grant主设备,这样主设备可以重新开始传输。
- 结束。
仲裁信号
Name | Source | Description | 说明 |
---|---|---|---|
HBUSREQx | Master | Bus request | 每个Master都会发出 |
HLOCKx | Master | Locked transfers | 锁定此次传输 |
HGRANTx | Arbiter | Bus grant | 指出Master x可访问总线 |
HMASTER[3:0] | Arbiter | Master number | Master的ID |
HMASTLOCK | Arbiter | Locked sequence | Master正在进行锁定 |
HSPLITx[15:0] | Slave(SPLIT-capable) | Split completion request | 选择哪个master允许重试 |
- 对于固定长度的burst传输,不必持续请求总线
- 对于未定义长度的burst传输,主设备应该持续送出HBUSREQ信号,直到开始最后一次传输
- 如果没有主设备请求总线,则给缺省主设备grant信号,且HTRANS=IDLE
- 建议主设备在锁定总线传输结束之后插入IDLE传输,以重新仲裁优先级。
AHB-lite
- 单个Master
- 不需要HBUSREQ
- 不需要HGRANT
- 简单Slave
- 不需要retry
- 不需要split
- 兼容标准AHP协议
- 允许更简单的design
APB
AHB是机动车道,APB可以看成是非机动车道
慢速设备也可以走AHB机动车道
为了不影响AHB的效率
Name | Description |
---|---|
PCLK | Bus clock |
PRESETn | APB reset |
PADDR[31:0] | APB address bus |
PSELx | APB select |
PENABLE | APB strobe |
PWRITE | APB transfer direction |
PRDATA[31:0] | APB read data bus |
PWDATA[31:0] | APB write data bus |
- 非流水线pipeline
- 最快2个cycle才能读写一个数据
- PSEL起来
- 然后PENABLE起来