系统芯片中各个模块之间需要有接口来连接
总线作为子系统之间共享的通信链路
优点
低成本
方便易用
缺点
会造成性能瓶颈
AMBA2.0
片上总线标准
三种总线
AHB 高速100M
ASB
APB 低速20M
amba总线简单实列
高速总线,高性能100MHz
2级流水线操作
可支持多个总线主设备(最多16个)
支持burst传输(突发传输)
总线带宽:8、16、32、32、64、128 bits
上升沿触发操作(与工艺有关,电容的充放电实现,电容充电较快,放电比较快,上升沿采样时间短 ,能够容易控制建立时间,保持时间)
对一个新设计建议使用AHB总线
AHB主设备(master)
初始化一次读/写操作
某一时刻只允许一个主设备使用总线
CPU、DMA、DSP、LCDC...
AHB从设备(slave)
响应一次读/写操作
通过地址映射来选择哪一个从设备
外部存储器控制EMI、APB Bridge
AHB仲裁器(arbiter)
允许某一主设备控制总线
在AMBA协议中没有定义冲裁算法
AHB译码器(decoder)
通过地址译码器来决定选择哪一个从设备
高速总线
流水线操作
可支持多个总线主设备
支持burst传输(突发传输)
总线带宽:8、16、32bits
三态、双向总线
不适合做DFT
上升沿或下降沿触发操作(与工艺有关,电容的充放电实现,电容充电较快,放电比较快,上升沿采样时间短 ,能够容易控制建立时间,保持时间)
低速总线,低功耗
接口简单
在Bridge中锁存地址信号和控制信号
适用于多种外设
上升沿触发操作(与工艺有关,电容的充放电实现,电容充电较快,放电比较快,上升沿采样时间短 ,能够容易控制建立时间,保持时间)
AHB2APB Bridge
可以锁存所有的地址、数据和控制信号
进行二级译码来产生APB从设备选择信号
APB总线上的所有其他模块都是APB从设备
step0:CPU检查DMA的状态以确认是否可用
while(1){ Read(0x30004,&states) if(states==0){ break; } }
step1:CPU设置(source sddress)、(destination address) (size)
write(0x30008,0x10000); write(0x3000C,0x20000); write(0x30010,0x100);
step2:启动DMA
write(0x30000,0x1);
step3:DMA把数据从memory1传送到memory2
step4:DMA向CPU发出中断请求
step5:CPU检查DMA的状态
Read(0x30004,&status)
总结:CPU查询DMA状态->配置寄存器->启动DMA->DMA开始搬运->DMA搬运完中断CPU->查询
有default master(CPU) default slave Dummy Master (其他master不工作)
每个外设有自己的地址空间
基本AHB信号
HCLK (clock source) BUS clock 总线时钟
HRESETn (reset controller)
低电平有效
HPORT[3:0] (master)
保护控制
HPORT[0]:OPCODE/DATA
HPORT[1]:USER/PRIVILGED
HPORT[2]:Bufferable/Non-Bufferable
HPORT[3]:Cacheable/Non-Cacheable
HADDR[31:0] (master)
32位系统地址总线
HWRITE (master)传输方向,写使能
高电平:写
低电平:读
HWDATA[31:0](master)
写数据总线,从主设备写到从设备
HTRANS (master)
指出当前传输的状态
00 IDLE
主设备占用总线,但没进行传输
两次burst传输中间主设备发IDLE
01 BUSY
主设备占用总线,但是在burst传输过程中还没准备好进行下一次传输
一次burst传输中间主设备发BUSY
10 NONSEQ
表明一次单个数据的传输
或者一次burst传输的第一个数据
地址和控制信号与上一次传输无关
11 SEQ
表明burst传输接下来的数据
地址和上一次传输的地址相关
HSIZE[2:0] (master)
指出当前传输的大小
000:8bits
001:16bits
010:32bits
011:64bits
100:128bits
101:256bits
110:512bits
111:1024bits
最大值受总线的配置所限制
通常使用32bits(010)
HBURST (master)
指出传输burst类型
不可跨越1K边界
SINGLE
INCR
WRAP[4][8][16]
INCR[4][8][16]
HRESP (slave)
从设备发给主设备的总线传输状态
OKAY、ERROR、RETRY(重传)、SPLIT(分割)
00:OKAY
成功 单周期响应
01:ERROR
失败 两周期响应
10:RETRY
传输未完成 两周期响应
请求主设备重新开始一个传输
11:SPLIT
传输未完成 两周期响应
请求主设备分离一次传输
延迟 分一段传输
HREADY (slave)
高:从设备指出传输结束
低:从设备需延长传输周期
HRDATA[31:0](slave)
读数据总线,从从设备读到主设备
HSELx (Decoder)
读数据总线,从从设备读到主设备
选择从设备
指出由主设备所选择的从设备
由地址译码器来提供所选择的从设备
一个从设备应该至少占用1KB的存储空间
需要额外的缺省从设备来映射其他的存储地址
基本AHB传输
两个阶段
地址周期,只有一个cycle
数据周期,由HREADY信号决定需要几个cycle
流水线传送(两拍)
先是地址周期,然后是数据周期
一次无需等待状态的简单传输
一次无需等待简单传输
两个周期 ,一个地址周期,一个数据周期
只有当HREADY信号有效时才将数据传输,否则地址保持
需要两个等待周期的简单传输
最多等待16个时钟周期
HREADY为高读到的数据才是对的
流水线传输
一次传输拆成两个步骤->二级流水线
一次传输拆成三个步骤->三级流水线
single Transfer
incrementing transfer with unspecified length(INCR)
4-beat
8-beat
16-beat
传输类型
例子
未定义长度的传输
支持incrementing和wrapping两种burst传输
incrementing burst
地址是上一次的传输地址加1
Wrapping burst
4beat的wrapping burst 字传输(4byte)
0x34->0x38->0x3c->0x30
应用场合:Cache填充
根据HSIZE和HBURST来计算地址
例:起始地址是0x48,HSIZE=010(32bits)
INCR4 Burst 4代表四个字节
INCR8 Burst 8代表八个字节
WRAP4 Burst
WRAP8 Burst
未定义长度
HBURST | TYPE | ADDRESS |
---|---|---|
000 | SINGLE | 0x48 |
001 | INCR | 0x48,0x4C,0x50,... |
010 | WRAP4 | 0x48,0x4C,0x40,0x44 |
011 | INCR4 | 0x48,0x4C,0x50,0x54 |
100 | WRAP8 | 0x48,0x4C,0x50,0x54,0x38,0x3C,0x40,0x44 |
101 | INCR8 | 0x48,0x4C,0x50,0x54,0x58,0x5C,0x60,0x64 |
110 | WRAP16 | 0x48,0x4C,...,0x7C,0x40,0x44 |
111 | INCR16 | 0x48,0x4C,...,0x7C,0x80,0x84 |
所访问的从设备必须响应这次传输
从设备可能返回的响应
完成这次传输
插入等待状态(HREADY信号)
发出错误信号表示这次传输失败
延迟传输,使得总线可用于其他传输(split)
总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输
retry响应
RETRY和SPLIT的区别
主要区别在于仲裁的方式
RETRY:arbiter会继续使用通常的优先级
SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
总线主设备应以同样的方式处理RETRY响应和SPLIT响应
不是三态总线,读总线和写总线是分开的
印第安序(数据模式,大端对齐还是小端对齐)
在AMBA协议中没有定义
主设备和从设备应该采用同样的印第安序
不支持动态的印第安序
32bits小端对齐
32bits 大端对齐
对于IP设计,只有应用面比较广泛的应用程序才支持两种印第安序
AHB仲裁信号
Name | Source | Description |
---|---|---|
HBUSRWQx | Master | Bus request |
HLOCKx | Master | Locked transfers |
HGRANT | Arbiter | Bus grant |
HMASTER[3:0] | Arbiter | Master number |
HMASTLOCK | Arbiter | Locked sequence |
HSPLITx[15:0] | Slave(SPLIT-capable) | Split completion request |
HBUSRWQx
总线请求
HLOCKx
高电平:主设备请求锁定总线
HGRANT
指出主设备x可访问总线
主设备x控制总线:HGRANTx=1且HREADY=1
HMASTER[3:0]
指出哪个设备正在进行传输
4位16个
HMASTLOCK
指出主设备正在进行一次锁定传输
HSPLITx[15:0]
从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输
每一位对应一个主设备
仲裁举例
无等待状态的grant
有等待状态的grant
多层
AHB Lite简化版
AHB总结
主要组成部分
MASTER SLAVE ARBITER DECODER
传输的过程
流水线机制
Address phase和data phase
如何提高性能
Burst read/write
仲裁机制
总线控制权的移交
slave短时间内无法响应
HREADY信号拉低
slave长时间内无法响应
插入SPLIT/RETRY
MASTER长不能进行传输
插入BUSY
AHB应用建议
Arbiter 的优先级可以配置
Slave长时间不能响应的话,一般不支持SPLIT响应,使用RETRY响应
总线上如果只有一个master的话,可以使用AHB lite协议,不使用arbiter
设计一个新的IP时,要仔细核对AMBA的Feature和IP所支持的Feature是否匹配。
实现
DMA
| 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 | APB read data bus |
| PWDATA | APB write data bus |
PADDR[31:0]
地址总线,由设备总线的bridge单元驱动
PSELx
从译码器来的信号,到每一个总线从设备x
PENABLE
用于在设备总线上把所有访问按时间阶段进行
PWRITE
高电平:写
低电平:读
PRDATA和PWDATA
最多32位宽
地址映射
AHB->AHB BRIDGE->APB设备(两级映射)
APB读写传输
写传输
读传输
BRIDGE
BRIDGE FSM (实现两级流水)
APB SLAVE
APB到AHB的接口--读
CPU(master)<--->IP(slave)
IP(master) <--->IP(slave)
每个从设备都占用系统中的一段地址空间
所有的从设备都是可寻址的
寄存器/存储器都是内存映射方式访问
CPU/IP读写其他ip的数据类似于读写寄存器
主设备被arbiter grant之后,都可以访问总线上的所有从设备
一个ip可以同时拥有主设备和从设备接口(DMA)
CPU和IP之间的通信
AMBA简介
AMBA2.0 :AHB、ASB、APB
AHB的组成部分
master slave arbiter decoder
APB的组成部分
AHB2APB bridge、APB Slave
AHB信号
HCLK HRESETn HADDR HTRANS HWRITE HSIZE HBURST HEDATA HSELx HRDATA HREADY HRESP
AHB 传输的两个阶段
地址周期、数据周期
当前传输的状态HTRANS
IDLE、BUSY、NONSEQ、SEQ
突发传输的类型HBURST
SINGLE、INCR(如何开始一次新的incr?(nonseq))
Burst传输不可跨越1K边界
HSEL:由AHB decoder通过地址映射给出
AHB SLAVE 响应信号:
HREADY传输完成、HRESP传输响应(OK、ERROR、RETRY)
AHB slave短时间无法响应?(HREADY拉低)长时间无法响应(RETRY SPLIT)
32bit小端模式,数据总线的有效字节序
AHB仲裁信号
HBUSREQ、HGRANT、HMASTER
主设备x可控制总线条件
AHB master、AHB slave、AHB arbiter、AHB decoder的接口信号
AHB Lite
APB信号
PCLK PRESET PADDR PSEL PENABLE PWARITE PRDATE PWDATA
APB slave 的地址映射
APB传输
Always rwo cycle transfer:Setup cycle、enable cycle
No wait cycle and response signal
APB bridge 和APB slave的接口信号
本文章使用limfx的vscode插件快速发布