总线协议 -- AMBA总线(一)
资料来源:https://wenku.baidu.com/view/bbacbd36e109581b6bd97f19227916888586b999.html
本内容只是根据上面的资料做了整理
AMBA总线(一)
发展史
- AMBA 1.0
- ASB 和 APB
- AMBA 2.0
- AHB, ASB 和 APB
- AMBA 3.0
- AMBA Advanced eXtensible Interface (AXI)
简介
AHB
- 高速总线,高性能
- 流水线操作
- 可支持多个总线主设备(最多16个)
- 支持burst传输
- 总线带宽:8、16、32、64、128bits
- 上升沿触发操作
- 对于一个新设计建议使用AHB
AHB 组成
- AHB 主设备(master)
- 初始化一次读/写操作
- 某一时刻只允许一个主设备使用总线
- uP、DMA、DSP、LCDC …
- AHB从设备(slave)
- 响应一次读/写操作
- 通过地址映射来选择使用哪一个从设备
- 外部存储器控制器EMI、APB bridge、UART、 …
- AHB仲裁器(arbiter)
- 允许某一个主设备控制总线
- 在AMBA协议中没有定义仲裁算法
- AHB译码器(decoder)
- 通过地址译码来决定选择哪一个从设备
ASB
- 高速总线
- 流水线操作
- 支持多个总线主设备
- 支持burst传输
- 总线带宽:8、16、32bits
- 三态、双向总线
- (不适于做DFT)
- 下降沿或者上升沿触发
APB
- 低速总线、低功耗
- 接口简单
- 在Bridge中锁存地址信号和控制信号
- 适用于多种外设
- 上升沿触发
APB 组成
- AHB2APB Bridge
- 可以锁存所有的地址、数据和控制信号
- 进行二级译码来产生APB从设备选择信号
- APB总线上的所有其他模块都是APB从设备
- 不是流水线方式
- 接口是零功耗
AHB
AHB总线互联
基本信号
- HRESETn
- 低电平有效
- HADDR[31:0]
- 32位系统地址总线
- HWDATA[31:0]
- 写数据总线,从主设备写到从设备
- HRDATA[31:0]
- 读数据总线,从从设备读到主设备
- HTRANS
- 指出当前传输的状态
- NONSEQ、SEQ、IDLE、BUSY
- HSIZE
- 指出当前传输的大小
- HBURST
指出传输的burst类型 - HRESP
- 从设备发给主设备的总线传输状态
- OKAY、ERROR、RETRY、SPLIT
- HREADY
- 高:从设备指出传输结束
- 低电平:从设备需延长传输周期
AHB基本传输
- 两个阶段
- 地址周期,只有一个cycle
- 数据周期,由HREADY信号决定需要几个cycle
- 流水线传送
- 先是地址周期,然后是数据周期
一次无需等待状态的简单传输
如果slave没有准备好?
需要两个等待周期的简单传输
根据传输规则,slave不能插入超过16个等待周期!
流水线传输
- HBURST指定了传输burst的类型,分为:
- Single Transfer
- 增量传输,不指定长度
- 4-拍
- 8-拍
- 16-拍
如果传输过程中从设备忙碌,可以通过HREADY信号控制,但是如果主设备忙碌呢? -- 通过HTRANS控制
传输类型
- HTRANS[1:0]:控制传输类型
- 四种类型:IDLE、BUSY、NONSEQ、SEQ
- 00:IDLE
- 主设备占用总线,但没进行传输
- 两次burst传输中间主设备可发IDLE
- 01:BUSY
- 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输
- 一次burst传输中间主设备可发BUSY
- 10:NOSEQ
- 表明一次单个数据的传输或者一次burst传输的第一个数据地址和控制信号与上一次传输无关
- 11:SEQ
- 表明burst传输接下来的数据地址和上一次传输的地址是相关的
其他信号
-
HWRITE
- 高电平:写
- 低电平:读
-
HSIZE[2:0]
- 000:8bits 100:128bits
- 001:16bits 101:256bits
- 010:32bits 110:513bits
- 011:64bits 111:1024bits
- 最大值受总线的配置所限制
- 通常使用32bits(010)
- HADDR的地址必须由HSIZE作为最小单位。
-
HPROT[3:0]
- HPROT[0]: OPCODE/DATA
- HPROT[1]: USER/PRIVILGED
- HPROT[2]: Bufferable/Non-Bufferable
- HPROT[3]: Cacheable/Non-Cacheable
AHB 突发传输
- AHB Burst 操作
-
4beat、8beat、16beat、单个字节传输、未定义长度的增量传输
-
支持incrementing(增量)和wrapping两种burst传输
-
Incrementing burst
- 地址是上一次的传输地址加1个传输单位
-
Wrapping burst
- 例:4beat的wrapping burst 字传输(4byte):
- 0x34 -> 0x38 -> 0x3c -> 0x30
- 应用场合:Cache填充
-
地址计算示例
根据HSIZE和HBURST来计算地址
例:起始地址是0x48,HSEZE=010(32bits)
Burst类型: INCR8
Burst类型: WRAP8
Burst类型:INCR4
Burst类型:WRAP4
Burst类型:未定义长度的
LDM(Load Multiple instruction) AHB Activity
多指令加载:
Burst 传输不能超过1k边界
-
Burst传输不能穿越1K边界
- 一个从设备最小的地址间隙是1KB
- NONSEQ -> SEQ -> 1KB Boundary -> NONSEQ -> SEQ …
-
主设备不能试图开始一个可能穿越1K边界的INCR传输
地址译码
-
HSELx:选择从设备
- 指出由主设备所选择的从设备
-
由地址译码器来提供选择信号
-
一个从设备应该至少占用1KB的存储空间
-
需要一个额外的缺省从设备来映射其他的存储地址
从设备响应
-
所访问的从设备必须响应这次传输
-
从设备可能返回的响应:
- 完成这次传输
- 插入等待状态(HREADY信号)
- 发出错误信号表示这次传输失败
- 分离传输,使得总线可用于其他传输(SPLIT)
从设备的响应信号
-
HREADY:transfer done
-
HRESP[1:0]:transfer response
- 00:OKAY 成功(单周期响应)
- 01:ERROR 失败(两周期响应)
- 10:RETRY 传输未完成,请求主设备重新开始一个传输(两周期响应)
- 11:SPLIT 传输未完成,请求主设备分离一次传输(两周期响应)
总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输。
Retry 响应
可以看到,主设备在从设备忙时发送了两次传输,Retry信号跨了两个周期,第二个周期后总线开始新的一次传输。
-
RETRY和SPLIT的主要区别在于仲裁的方式
- RETRY:arbiter会继续使用通常的优先级
- SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
-
总线主设备应该用同样的方式处理RETRY响应和SPLIT响应
Locked 传输
-
被锁的传输序列不能被打断
-
HLOCK信号表示下一次的传输时被锁传输
- 上图中A和B信号时被锁住的,不能分开
-
ARM 处理器只在 SWP 指令中使用HLOCK
总线传输的其他细节放到第二部分。