系统总线简介
性能瓶颈:每次只能有一对Master和Slave进行通信
AMBA2.0
发展历史
AHB
AHB组成部分
二级译码:根据地址的两块数据位来判断Slave
例子:DMA
步骤
确认DMA状态,此时CPU作为Master,DMA作为Slave
设置source和destination地址,以及数据大小
AHB总线
- Master需要使用总线时先要向仲裁器Arbiter进行申请
- Master得到Arbiter许可后,仲裁其操作MUX选择将特定的Master进行输出。
- 如果多个Master同时申请,根据Master的优先级对MUX进行操作,选择输出。
Dummy Master和Default Master
Default bus master
当没有任何一个master请求总线时,仲裁所选择到的master被称为default master。
default master不用通过请求、授权阶段就能直接与总线进行通信。
通常最有可能和总线通信的master被设置成default master
Dummy(虚拟) bus master
当没有任何一个真正的master与总线通信时,Dummy master使总线保持同步。
虚拟主机在被授权时,只会将传输类型驱动到空闲状态,不会进行真正的传输。确保总线持续运行。
虚拟master是bus master 0,以下状况Dummy master会被授权
- 当先前被授权的master收到split响应,传输被锁定时。
- 当default master接收到Split响应且没有其他主机请求总线时
- 当所有主机都收到split响应时
default slave
default slave是用来反馈给master,选用了未定义的地址区间,没有一个slave被选中。
对空闲或繁忙传输进行零等待正常响应,如果执行非顺序或顺序传输,则生成错误响应。
AHB信号
传输状态(HTRANS[1:0]):idle(空闲) busy(忙) nonseq(不连续) seq(连续)
HSIZE[2:0]:0:8bits 1:16bits 2:32bits
HPROT[3:0]:要求slave带保护功能,一般很少去用
HRESP[1:0]: okey error retry split
基本AHB信号
retry和split的区别
retry:重新传不影响master优先级
split:重新授权重新传,可能会降低优先级
基本AHB传输
如果第二个时钟周期中HREADY没有拉高怎么办
slave不能等待超过16个周期
一次处理的数据就是32位,4个字节,而计算机是按字节来存储的,1个字节一个地址,所以32位机器一次读写,就要从某个整数地址开始,顺序操作4个存储地址。
- 单次传输
- 以未指定的长度递增传输(INCR)
- 4-beat(连续传四次)
- 8-beat(八次)
- 16-beat(16次)
传输类型
举例
其他AHB控制信号
小结
短期无法应答:返回Retry 长时间无法应答:返回Split
作业
Burst传输
burst 传输的边界
4beat 4byte
Type | HSIZE | 边界 |
---|---|---|
WRAP4 | 32 bits | 0x10的整数倍 |
WRAP8 | 32 bits | 0x20的整数倍 |
WRAP16 | 32 bits | 0x40的整数倍 |
INCR8 Burst
aaa
Wrap8 Burst
burst4:边界地址0x10的倍数
burst8:边界地址0x20的倍数
burst16:边界地址0x30的倍数
未定义长度的Burst传输
–
SI:single
注意
穿越1k的边界传输
从设备响应
retry和split的区别
retry:重新传不影响master优先级
split:重新授权重新传,可能会降低优先级
ERROR
Retry
;
When it is necessary for a slave to insert a number of wait states prior to deciding what response will be given then it must drive the response to OKAY
RETRY和SPLIT的不同
数据总线
32bit小印第安数据总线的有效字节
aaa
大印第安
AHB仲裁器
AMBA最多支持16个master,HBUSREQ16
没有等待状态的grant
没有等待状态的grant
注意
如果没有主设备号请求总线,要给default master grant
Split传输过程
防止Deadlock(死锁)
AHB从设备接口
HSELx:decoder,译码器
Address and control:Master
Data:Master
Reset,Clock:System
一般作为AHB总线的Slave设备都有2根hready信号,一个为input类型(hready_in),
另一个为output类型(hready_out)。在AHB总线协议中,如果Master设备发起读写操作
的时候,Slave设备不能及时响应的话,由Slave设备把hready_out信号拉低来拖延Data
Phaze周期。
但是在Pipeline操作的时候,本次操作data phaze是下一次操作的address phaze,
所以作为Slave设备在响应Master设备的时候,必须先判断一下Master设备对上一次其它
Slave设备的操作是否已经完成。如果完成,则响应主设备的操作;如果没有完成,则等待
完成,然后才响应操作。hready_in就是Slave设备用来判断Master设备是否对其它
Slave设备的操作已经完成的信号。
并行访问提高了系统的带宽
AHB-Lite
只有一个Master,不需要申请,也不需要授权
并不是所有的IP都支持SPLIT和RETRY
AHB的应用建议
APB总线
APB信号
写传输
读传输
Bridge状态机
- 当PSELx=0,PENABLE=0时,没有传输则一直在着状态循环,如果有传输则跳转SETUP。
- SETUP状态时,PSELx拉高,无条件跳转到ENABLE状态,拉高PENABLE。
- 如果在ENABLE状态一直有传输则再跳转SETUP状态。
- 如果没有传输,则拉低PSELx和PENABLE,回到IDLE状态。
APB Slave
aaa
APB到AHB的接口——读
CPU与IP之间的通信