AMBA总线
2
SEP3203
3
目录
AMBA总线概述
AHB
APB
不同IP之间的互连
4
系统总线简介
系统芯片中各个模块之间需要有接口来连接
总线作为子系统之间共享的通信链路
优点
低成本
方便易用
缺点
会造成性能瓶颈
5
AMBA介绍
Advanced Microcontroller Bus
Architecture
片上总线的标准
定义了三种总线
AHB (Advanced High-performance Bus)
ASB (Advanced System Bus)
APB (Advanced Peripheral Bus)
6
AMBA发展历史
AMBA
ASB 和 APB
AMBA
AHB, ASB 和 APB
AMBA
AMBA Advanced eXtensible Interface (AXI)
7
一个典型的AMBA系统
处理器和其它主设备/从设备都是可以替换的
8
AHB
高速总线,高性能
流水线操作
可支持多个总线主设备(最多16个)
支持burst传输
总线带宽:8、16、32、64、128bits
上升沿触发操作
对于一个新设计建议使用AHB
9
ASB
高速总线
流水线操作
支持多个总线主设备
支持burst传输
总线带宽:8、16、32bits
三态、双向总线
(不适于做DFT)
下降沿或者上升沿触发
10
APB
低速总线、低功耗
接口简单
在Bridge中锁存地址信号和控制信号
适用于多种外设
上升沿触发
11
AHB组成部分
AHB 主设备(master)
初始化一次读/写操作
某一时刻只允许一个主设备使用总线
uP、DMA、DSP、LCDC …
AHB从设备(slave)
响应一次读/写操作
通过地址映射来选择使用哪一个从设备
外部存储器控制器EMI、APB bridge、UART、 …
AHB仲裁器(arbiter)
允许某一个主设备控制总线
在AMBA协议中没有定义仲裁算法
AHB译码器(decoder)
通过地址译码来决定选择哪一个从设备
12
APB组成部分
AHB2APB Bridge
可以锁存所有的地址、数据和控制信号
进行二级译码来产生APB从设备选择信号
APB总线上的所有其他模块都是APB从设
备
不是流水线方式
接口是零功耗
13
AMBA协议其他有关问题
与工艺无关
没有定义电气特性
仅在时钟周期级定义时序
提取时序参数依赖于所采用的工艺和工作频率
14
目录
AMBA总线概述
AHB
APB
不同IP之间的互连
15
AHB总线互连
16
AHB传输
发起一个请求
给仲裁器
驱动地址和
控制信号
允许某个主设
备控制总线
仅选中的从设
备响应地址
/控制信号
拉高HREADY
信号,总线
传输完成
17
Dummy/Default Master
Dummy Master
Granted when all masters
SPLIT
Generates IDLE cycles
only
Typically Master #0
Granted when Locked
master gets SPLIT
response
Implement as part of
Address/Control Mux
Default Master
Granted when no master
requires bus
Generally master most
likely to require bus
Generates IDLE cycles
when not requesting bus
Avoids minimum 2 cycle
Arbitration period
Immediate access to bus
18
Default Slave
Slave 3
(APB)
Default Slave
0x0000_0000
0xFFFF_FFFF case HADDR is
when …. =>
HSELebi <= ‘1’;
when …. =>
HSELsram <= ‘1’;
when …. =>
HSELapb <= ‘1’;
when others =>
HSELdefault <= ‘1’;
end case;
Decoder
logic
Slave 2
(Internal
Memory)
Default_Slave
logic
case HTRANS is
when IDLE|BUSY =>
HRESP <= OKAY;
when others =>
HRESP <= ERROR;
end case;
Slave 1
(External)
0xCFFF_FFFF
0xC000_0000
0x5000_FFFF
0x5000_0000
0x3FFF_FFFF
0x0000_0000
19
AHB信号
20
基本AHB信号
HRESETn
低电平有效
HADDR[31:0]
32位系统地址总线
HWDATA[31:0]
写数据总线,从主设备写到从设备
HRDATA[31:0]
读数据总线,从从设备读到主设备
21
基本AHB信号(续)
HTRANS
指出当前传输的状态
NONSEQ、SEQ、IDLE、BUSY
HSIZE
指出当前传输的大小
HBURST
指出传输的burst类型
HRESP
从设备发给主设备的总线传输状态
OKAY、ERROR、RETRY、SPLIT
HREADY
高:从设备指出传输结束
低电平:从设备需延长传输周期
22
基本AHB传输
两个阶段
地址周期,只有一个cycle
数据周期,由HREADY信号决定需要几个
cycle
流水线传送
先是地址周期,然后是数据周期
23
Master release address and controlSlave sample the address and controlMaster sample the data
If slave
hasn’t
ready to
receive
data, how
to do?
基本AHB传输(续)
一次无需等待状态的简单传输
24
Not ready Not ready Ready
One
transfer
need at
least two
cycles, how
to promote
its
efficiency?
Note: slave shouldn’t insert
more than 16 wait cycles!!!
基本AHB传输(续)
需要两个等待周期的简单传输
25
Pipeline
A Address A Data
B Address B Data
C Address C Data
Slave decodes
every transfer, so
many waits, how
to decrease the
wait cycles?
基本AHB传输(续)
26
Burst Transfer
A A
A+4 A+4
A+8 A+8
A+12 A+12
HBURST shows the burst types:
Single Transfer
Incrementing transfer with unspecified length(INCR)
4-beat
8-beat
16-beat
Slave has know that master need 4 data, A/A+4/A+8/A+12
During burst
transfer, if slave
not ready, then
hready=0; but if
master is not
ready, how to do?
基本AHB传输(续)
27
传输类型
HTRANS[1:0]:当前传输的状态
IDLE、BUSY、NONSEQ、SEQ
00:IDLE
主设备占用总线,但没进行传输
两次burst传输中间主设备发IDLE
01:BUSY
主设备占用总线,但是在burst传输过程中还没有准备
好进行下一次传输
一次burst传输中间主设备发BUSY
28
传输类型(续)
10:NOSEQ
表明一次单个数据的传输
或者一次burst传输的第一个数据
地址和控制信号与上一次传输无关
11:SEQ
表明burst传输接下来的数据
地址和上一次传输的地址是相关的
29
The first transfer Master is busyThe subsequent transferThe subsequent transferSlave is not readyThe subsequent transfer
传输类型举例
30
其它AHB控制信号
HWRITE
高电平:写
低电平:读
HSIZE[2:0]
000:8bits 100:128bits
001:16bits 101:256bits
010:32bits 110:512bits
011:64bits 111:1024bits
最大值受总线的配置所限制
通常使用32bits(010)
31
其它AHB控制信号(续)
HPROT[3:0]
HPROT[0]: OPCODE/DATA
HPROT[1]: USER/PRIVILGED
HPROT[2]: Bufferable/Non-Bufferable
HPROT[3]: Cacheable/Non-Cacheable
32
AHB控制信号小结
HTRANS[1:0]
IDLE
BUSY
NONSEQ
SEQ
HBURST[2:0]
SINGLE
INCR
WRAP[4|8|16]
INCR[4|8|16]
HSIZE[2:0]
Byte
Halfword
Word
Doubleword
...
HPROT[3:0]
0 - data/opcode
1 - privileged/user
2 - bufferable
3 - cacheable
HADDR must be aligned to a multiple of data size as given by HSIZE
33
BURST传输
AHB Burst 操作
4beat、8beat、16beat、单个字节传输、未定义长度
的传输
支持incrementing和wrapping两种burst传输
Incrementing burst
地址是上一次的传输地址加1
Wrapping burst
例:4beat的wrapping burst 字传输(4byte):
0x34 -> 0x38 -> 0x3c -> 0x30
应用场合:Cache填充
34
地址计算举例
根据HSIZE和HBURST来计算地址
例:起始地址是0x48,HSIZE=010(32bits)
35
INCR8 Burst
HCLK
SEQNSEQ SEQSEQSEQSEQ
INCR8
0x60 0x680x64 0x6c 0x740x70
HTRANS
HBURST
HADDR
HRDATA d1d0 d2 d4d3 d5
0x78 0x7c
SEQ SEQ
d6 d7
36
WRAP8 Burst
HCLK
SEQNSEQ SEQSEQSEQSEQ
WRAP8
0x70 0x780x74 0x7c 0x640x60
HTRANS
HBURST
HADDR
HRDATA d5d4 d6 d0d7 d1
0x68 0x6c
SEQ SEQ
d2 d3
start of line
37
INCR4 Burst
38
WRAP4 Burst
39
例:未定义长度的Burst传输
40
HCLK
SEQNSEQ NSEQNSEQSEQSEQIDLE
INCR4 SISI
0x34 0x3C0x38 0x40 0x480x44
HTRANS
HBURST
HADDR
HRDATA
HWDATA
r6r5 r7 r9r8 r10
Example LDM AHB Activity
SI = SINGLELDM <0x34>,{r5-r10}
41
注意!
Burst传输不能穿越1K边界
一个从设备最小的地址间隙是1KB
NONSEQ -> SEQ -> 1KB Boundary ->
NONSEQ -> SEQ …
主设备不能试图开始一个可能穿越1K边界
的固定长度的incrementing burst传输
42
INCR Burst over 1k boundary
HCLK
SEQNSEQ SEQNSEQSEQSEQ
INCR
0x3F0 0x3F80x3F4 0x3FC 0x4040x400
HTRANS
HBURST
HADDR
HRDATA d1d0 d2 d4d3 d5
0x408 0x40C
SEQ SEQ
d6 d7
start of 1k page
43
地址译码
HSELx:选择从设备
指出由主设备所选择的从设备
由地址译码器来提供选择信号
一个从设备应该至少占用1KB的存储空间
需要一个额外的缺省从设备来映射其他的
存储地址
44
地址译码(续)
45
从设备响应
所访问的从设备必须响应这次传输
从设备可能返回的响应:
完成这次传输
插入等待状态(HREADY信号)
发出错误信号表示这次传输失败
延迟传输,使得总线可用于其他传输(split)
46
从设备响应信号
HREADY:transfer done
HRESP[1:0]:transfer response
00:OKAY
成功
01:ERROR
失败
10:RETRY
传输未完成
请求主设备重新开始一个传输
11:SPLIT
传输未完成
请求主设备分离一次传输
47
两周期的响应
HRESP[1:0]
OKAY:单周期响应
ERROR:两周期响应
RETRY:两周期响应
SPLIT:两周期响应
总线的流水特性需要从设备两个周期的响
应。可以使得主设备有足够的时间处理下
一次传输。
48
Slave Responses
Mem A
Mem B
Mem D
Mem C
Slave
Processor
AMBA
Write Mem E
I couldn’t write it because
of no mem E!!!!
49
Slave Responses
Mem A
Mem B
Mem D
Mem C
Slave
Processor
AMBA
Write Mem A
I couldn’t write it now for busy!!!
You could retry write it latter!!
BUSY
50
例:Retry 响应
51
RETRY和SPLIT的不同
主要区别在于仲裁的方式
RETRY:arbiter会继续使用通常的优先级
SPLIT:arbiter会调整优先级方案以便其他请
求总线的主设备可以访问总线
总线主设备应该用同样的方式处理RETRY
响应和SPLIT响应
52
Locked Transfers
HCLK
HADDR
HWDATA
HLOCK
Address Phase
A
Data Phase A
Address Phase B
A
A
Data Phase B
Address Phase C
C
C
B
B
Locked sequences of transfers cannot be interrupted by interconnect
HLOCK indicates next address phase is part of a locked transfer
In the above transfers to addresses B & C are locked and should not be separated
ARM processors use HLOCK for SWP instruction only
53
数据总线
不是三态总线,读总线和写总线是分开的。
印第安序
在AMBA协议中没有定义
主设备和从设备应该采用同样的印第安序
不支持动态印第安序
对于IP设计, 只有应用面比较广泛的应用
程序才支持两种印第安序。
54
32bit小印第安数据总线的有效字节
55
32bit大印第安数据总线的有效字节
56
多个主设备
I am first
I am first!!!
57
AHB仲裁信号
58
仲裁信号(续)
HBUSREQ
总线请求
HLOCKx:
高电平:主设备请求锁定总线
HGRANTx
指出主设备x可访问总线
主设备x控制总线:HGRANTx=1且
HREADY=1
59
仲裁信号(续)
HMASTER[3:0]
指出哪个主设备正在进行传输
HMASTLOCK
指出主设备正在进行一次锁定传输
HSPLITx[15:0]
从设备用这个信号告诉仲裁器哪个主设备允许
重新尝试一次split传输。
每一位对应一个主设备
60
仲裁举例(1)
没有等待状态的grant
61
仲裁举例(2)
有等待状态的grant
62
仲裁举例(3)
Burst传输之后移交总线
63
总线主设备Grant信号
Arbiter
64
几点说明
对于固定长度的burst传输,不必持续请求总线
对于未定义长度的burst传输,主设备应该持续送
出request信号,直到开始最后一次传输。
如果没有主设备请求总线,则给缺省主设备grant
信号,且HTRANS=IDLE
建议主设备在锁定总线传输结束之后插入IDLE传
输,以重新仲裁优先级。
65
Split传输过程
由主设备开始传输。
如果从设备需要多个周期才能获取数据,则从设
备给出一个SPLIT传输响应。从设备记录主设备
号:HMASTER。接着仲裁器改变主设备的优先
级。
仲裁器grant其他的主设备,总线主设备移交。
当从设备准备结束本次传输,将设置给仲裁器的
HSPLITx信号的相应位。
仲裁器恢复优先级
仲裁器grant主设备,这样主设备可以重新开始传
输。
结束
66
防止Deadlock
当多个不同的主设备试图访问同一个从设备,这
个从设备发出了SPLIT或RETRY信号,这是很可
能发生deadlock
从设备最多可以接收系统中16个主设备的请求。
只需要记录主设备号(忽略地址和控制信号)
给出RETRY响应的从设备在某一时刻只能由一个
主设备访问。
可以使用一些硬件保护机制,比如ERROR
67
AHB主设备接口
68
AHB从设备接口
69
AHB Arbiter
70
AHB Decoder
71
Typical Multi-layer example
Master 0
On-chip
RAM
Master 1
External
Memory
I/F
DMA
Slave
Slave
Mux
Slave
Mux
UART Timer GPIO
AHB2APB
Master 0 can access private RAM, APB and external interface
Master 1 can access DMA slave, APB and external interface
Parallel access improves system bandwidth
72
AHB-Lite
Subset of AHB Functionality
Single Master
No need for HBUSREQ & HGRANT
Simple Slaves
No retry or split responses
Standard AHB modules can be used
Allows easier module design/debug
Master 0
Slave
#1
Slave
#2
Slave
#3
Slave
#4
73
AHB总结
主要组成部分
Master、slaves、arbiter、decoder
传输的过程
流水线机制
Address phase和data phase
如何提高性能
Burst read/write
仲裁机制
总线控制权的移交
74
AHB总结(续)
Slave短时间内无法响应
HREADY信号拉低
Slave长时间内无法响应
插入SPLIT/RETRY
Master不能进行传输
插入BUSY
75
AHB的应用建议
Arbiter的优先级可以配置
Slave长时间不能响应的话,一般不支持
SPLIT响应,使用RETRY响应
总线上如果只有一个master的话,可以使
用AHB lite协议,不用arbiter
设计一个新的IP时,要仔细核对AMBA的
Feature和IP所支持的Feature是否匹配。
76
实现
如果设计中既有主设备端口又有从设备端
口
通过主设备端口读/写数据
通过从设备端口配置寄存器等
如处理器设置的一些参数
77
目录
AMBA总线概述
AHB
APB
不同IP之间的互连
78
APB信号
79
APB信号(续)
PADDR[31:0]
地址总线,由设备总线的bridge单元驱动
PSELx
从译码器来的信号,到每一个总线从设备x
PENABLE
用于在设备总线上把所有访问按时间阶段进行
PWRITE
高电平:写
低电平:读
PRDATA和PWDATA
最多32位宽
80
Address Decoding Stages
Slave 3
(APB)
Slave 1
(EBI)
Slave 2
(SRAM)
0xCFFF_FFFF
0xC000_0000
0x5000_FFFF
0x5000_0000
0x3FFF_FFFF
0x0000_0000
Peripheral 3
(UART)
Peripheral 1
(Int Cont)
Peripheral 2
(Timers)
0xC3FF_FFFF
0xC300_0000
0xC2FF_FFFF
0xC100_0000
0xC000_FFFF
0xC000_0000
APB
memory map
Timer 2
Timer 1
0xC2FF_FFFF
0xC200_0000
0xC1FF_FFFF
0xC100_0000
AHB Decoder
HSELapb
PSELtim
APB Bridge Timers
AHB
memory map
Timers
memory map
81
APB Interconnect
AHB2APB
Bridge
APB
Master
PADDR
HCLK
PSEL#1
PWRITE
PSEL#2
PSEL#3
PCLK
HADDR
HWRITE Peripheral
#1
Peripheral
#3
Peripheral
#2
PENABLE
PWDATA
PRDATA
HRDATA
HSEL
HWDATA
AHB APB
82
写传输
83
读传输
84
Bridge
How to translate
ahb pipelined
timing to 2-cycle
apb timing?
85
Bridge FSM
AHB Transfer
86
APB Slave
87
APB到AHB的接口-读
88
目录
AMBA总线概述
AHB
APB
不同IP之间的互连
89
通信方式
Cpu (master) <- -> IP (slave)
IP (master) <- -> IP (slave)
90
Memory mapped IO
每一个从设备都占用系统中的一段地址空
间
所有的从设备都是可寻址的
寄存器/存储器都是内存映射方式访问
CPU/IP读写其他IP的数据类似于读写存储
器
91
IP间的通信互连
主设备被arbiter grant之后,可以访问总线
上的所有从设备
92
一个IP可以同时拥有主设备接口和
从设备接口
93
CPU和IP之间的通信
CPU总是作为主设备
IP总是作为从设备
IP可以发出一个中断
请求
CPU进入中断模式,
由interrupt service
routine (ISR)来处理
中断
94
例:DMA
95
例:DMA
Step0:CPU检查DMA
的状态以确认是否可用
While(1)
{
Read(0x30004,&statu
s)
if(status == 0)
break;
}
96
例:DMA
Step1:CPU设置
(source address)、
(destination
address)(size)
Write
(0x30008,0x10000)
Write(0x3000C,0x20000
)
Write(0x30010,0x100)
Step 2: 启动DMA
Write(0x30000,0x1)
97
例:DMA
Step3:
DMA把数据从
memory 1
传送到memory 2
98
例:DMA
Step 4:DMA 向
CPU发出中断请求
Step 5:CPU检查
DMA的状态
Read(0x30004,
&status)
演讲完毕,谢谢观看!