目录
针对AHB进行介绍
1. 功能介绍
主要针对高效率、高频宽及快速系统模块所设计的总线,相比于APB的200MHZ以下的工作频率,AHB最快能达到500MHZ、600MHZ
通信可为多主多从模式,其中常见的AHB Slave设备可以是内存设备、外部存储接口(External Memory Interfaces, EMIF)和高带宽外设。 而低带宽外设,通常作为高级外设总线(Advanced Peripheral Bus, APB)的Slave,而APB的Master则是通过AHB2APB桥接器实现连接,即AHB2APB Brige是AHB的Slave之一。
而AHB Master设备则是微处理器(Micro Process Unit, MPU)、CPU、芯片或芯片外的内存模块、直接存储器访问(Direct Memory Access, DMA)模块、以太网(MAC Ethernet)等。
AHB架构包含三种角色,Manager、interconnects和Subordinate
AHB具备实现高性能、高时钟频率系统所需的功能,包括:
数据宽度(bits) | 地址宽度(bits) | 读写通道 | 主从体系 | 传输协议 | 时序 | 互联 | |
---|---|---|---|---|---|---|---|
AHB | 可配置为32、64、128、256、512、1024 | 常用32 | 读写地址共用,不支持读写并行 | 多主多从,仲裁机制 | pipeline流水传输、分裂传输、 burst突发传输、 乱序访问、 byte、半字(16bit)、字(32bit)甚至更大的可配置数据位宽、 大小端对齐、 不支持非对齐操作 | 同步 | 多路 |
以及
● 单时钟沿操作
● 字节寻址
● 非三态(Non- tristate)实现
2. 信号描述
Global signals无非就是时钟和复位
Source | Signal | Width(bits) | Description |
---|---|---|---|
CLOCK | HCLK | 1 | |
System bus reset | HRESETn | 1 | 低电平复位 |
2.1. Manager
如下图所示
发出的信号如下所示,常用的信号给出了Description
Source | Signal | Destination | Width(bits) | Description |
---|---|---|---|---|
Manager | HADDR | Subordinate and decoder | ADDR_WIDTH | Subordinate内寄存器地址,建议32bits |
HBURST | Subordinate | HBURST_WIDTH | 指明burst时的传输次数以及地址如何递增,HBURST_WIDTH必须为0或3 | |
HMASTLOCK | Subordinate | 1 | ||
HPROT | Subordinate | HPROT_WIDTH | ||
HSIZE | Subordinate | 3 | 传输数据的位宽 | |
HNONSEC | Subordinate and decoder | 1 | ||
HEXCL | Exclusive Access Monitor | 1 | ||
HMASTER | Exclusive Access Monitor and Subordinate | HMASTER_WIDTH | ||
HTRANS | Subordinate | 2 | 传输类型,可为IDLE、BUSY、NONSEQUENTIAL、SEQUENTIAL | |
HWDATA | Subordinate | DATA_WIDTH | 建议为32、64、128、256 | |
HWSTRB | Subordinate | DATA_WIDTH/8 | HWDATA的字节选通 | |
HWRITE | Subordinate | 1 | 高为写,低为读 |
2.2. Subordinate
Decoder的HSELx信号实现对某个Subordinate筛选。Subordinate主要任务是将传输情况向Manager反馈
如下图所示
发出的信号如下:
Source | Signal | Destination | Width(bits) | Description |
---|---|---|---|---|
Subordinate | HRDATA | Multiplexor | DATA_WIDTH | 读操作时,HRDATA发送给Multiplexor,然后Multiplexor发送给Manager |
HREADYOUT | Multiplexor | 1 | 拉高时表示控制信息采样完毕、写数据获取完毕、读数据有效,可用于延长传输时钟数反压 | |
HRESP | Multiplexor | 1 | 用于向Manager报告传输是OKAY还是ERROR | |
HEXOKAY | Multiplexor | 1 | 如果使用Exclusive Transfer,那么该信号表明Exclusive Transfer是否OKAY |
2.3. Interconnect
主要实现Manager和Subordinate的通信,包括Arbitor、Decoder和Multiplexor
一个Manager和多个Subordinate之间的通信只需一对Decoder和Multiplexor
如果是多个Manager和多个Subordinate,则还需要仲裁器Arbitor
Decoder
解码器,以选择正确的Subordinate实现传输,同时实现对Multiplexor的控制
发出的信号如下:
Source | Signal | Destination | Width(bits) | Description |
---|---|---|---|---|
Decoder | HSELx | Subordinate | 1 | 用于对Subordinate片选,有时该信号也可提供给Multiplexor以实现读反馈 |
Multiplexor
多路器,受到Decoder的控制,以实现读数据和读响应信号从Subordinate到Manager正确传输。
发出的信号如下:
Source | Signal | Destination | Width(bits) | Description |
---|---|---|---|---|
Multiplexor | HRDATA | Manager | DATA_WIDTH | 读数据总线 |
HREADY | Manager and Subordinate | 1 | 通知Manager和所有的Subordinates上一次传输成功 | |
HRESP | Manager | 1 | 传输反馈信号 | |
HEXOKAY | Manager | 1 | 如果使用Exclusive Transfer,那么该信号表明Exclusive Transfer是否OKAY |
3. 架构
描述AHB中Manager、Subordinate、Decoder和Multiplexer之间的通信架构
3.1. 单Manager系统
即一Manager多Subordinates,需要一对Decoder和Multiplexer
图中Decoder用于在address phase对Manager发送的HADDR进行解码以对正确的Subordinate进行片选。
所以这个HADDR是包括Slave地址和Slave内部寄存器的地址,这一点与APB不同。
APB的Master既有psel,又有paddr,所以APB是通过psel片选Slave、通过paddr选择那个Slave内的寄存器
图中的Multiplexor则是将相应的Subordinate的HRDATA数据返还给Manager
3.2. 多Manager系统
如果是多Manager系统,就需要对多Manager个的访问进行调度。
单总线
单总线的意思是,虽然整个架构有多个Manager和多个Subordinate,但是任意时刻只能有一个Manager与一个Subordinate占用总线进行通信。
如下图,架构中的Arbiter就用来决定哪个Manager占用总线与Slave进行通信。
AHB中的HSELx和HADDR决定了哪个Slave被访问
这个很类似半双工模式,可以发可以收,但二者互斥
又或者是如下这个架构,图中Memory Interface、ARM processor、on-chip RAM、DMA bus master和AHB2APB Bridge,都占用一根AHB总线。
多总线(Bus Matrix)
如果想实现多个Manager与多个Slave同时通信,可以使用总线矩阵bus-matrix的形式实现调度,如下图
或者是
注意上图中AHB interconnect是AHB Manager与AHB Subordinate的桥梁,对Manager和Subordinate都有HREADY输出。
对于AHB Manager来说,AHB interconnect中的HREADY用于反应AHB Subordinate的HREADYOUT,或者是反应AHB interconnect中正在仲裁。
对于AHB Subordinate来说,AHB interconnect中的HREADY也可用于反应AHB Subordinate的传输
4. 逻辑设计
AHB的一次数据读写包括address phase和data phase两部分。
address phase只传输地址和控制信号,仅一个hclk cycle,data phase只传输数据,hready反压时可持续多个hclk。
4.1. 基本传输
如下图,控制信息在address phase只持续一拍,且在data phase就可以发生变化
带反压的,HREADY表示的是HADDR等控制信息被获取、HRDATA有效、或是HWDATA被获取
可以发现上面几个图中的data phase时,控制信息可以发生改变。如果data phase时,控制信号提供下一次传输的控制信息就可以实现两拍的pipeline。
即上一次传输的data phase同时也是下一次传输的address phase。
如上图,传输B的data phase被反压,传输C的address phase就被延时
AHB单次传输最快需要2拍,APB单次传输最快也是2拍。但是AHB可以实现pipeline传输n次最快需要n+1拍,而APB最快则是2n拍,而且AHB的工作频率也比APB块
4.2. 传输配置
AHB的接口中提供了许多信号可对传输进行配置,以实现不同类型的传输,下面一一介绍
HSIZE[2:0]
表示传输的数据宽度,如下表
且满足Transfer Data Size(bits) == 8<<HSIZE (bits) == 2 ^ HSIZE (bytes);
注意必须保证PWDATA和PRDATA的位宽大于HSIZE设定的传递位宽才能起作用。
HSIZE[2:0] | Transfer Data Size | Description |
---|---|---|
3'b000 | 8 bits = 1 Byte | 数据传输有效大小为1 Byte |
3'b001 | 16 bits = 2 Byte | 数据传输有效大小为1 Half Word |
3'b010 | 32 bits = 4 Byte | 数据传输有效大小为1 Word |
3'b011 | 64 bits = 8 Byte | 数据传输有效大小为1 DoubleWord |
3'b100 | 128 bits = 16 Byte | 数据传输有效大小为4 Word |
3'b101 | 256 bits = 32 Byte | 数据传输有效大小为8 Word |
3'b110 | 512 bits = 64 Byte | 数据传输有效大小为16 Word |
3'b111 | 1024 bits = 128 Byte | 数据传输有效大小为32 Word |
每传输大小为Transfer Data Size(Byte)的数据,按字节寻址时地址变化的大小就为Transfer Data Size(Byte)
HTRANS[1:0]
表示此次传输的传输类型,HTRANS一般是2bit,共有四种可选类型。
HTRANS[1:0] | Type | Description |
---|---|---|
2'b00 | IDLE | 空闲,表示不传输 |
2'b01 | BUSY | 在burst传输中,Master要求中断传输几拍。在BUSY期间,Master必须保持下一次传输的控制信息,Slave必须反馈不带反压的OKAY。不常用 |
2'b10 | NONSEQ | **表示单次传输,或者是burst传输的第一次传输**,且控制信号与之前的传输无关 |
2'b11 | SEQ | 表示burst传输的第二次传输到最后一次传输,burst传输的地址与上一次地址有关(由HBURST决定如何相关) |
时序图如下,其中HBURST中的INCR表示拍数无限制的burst传输。
● T0~T1: burst传输的第一拍,必须是NONSEQ类型
● T1~T2: Master要在burst传输中中断一会因此HTRANS为BUSY。注意此时Master提供了下次传输的控制信息
● T2~T3: Master恢复burst传输,因此HTRANS为SEQ类型,但是控制信息与BUSY状态下相同。
● T3~T6: 持续的burst传输,地址递增
HBURST[2:0]
表示burst传输的类型和次数,其中类型包括三种
● SINGLE:单次传输,非burst传输。
由于不是burst,所以HTRANS必须是NONSEQ。SINGLE传输之后,可以是IDLE,也可以是NONSEQ开启下一次传输。
注意T3~T6的反压,因为Manager检测到HADDR为A的传输还没有数据读出,所以HADDR为B的传输必须延时,直到检测到HREADY为高,表示此时HADDR为A时Slave的读出数据HRDATA有效。
● INCR:递增传输
即burst传输中,每次传输的HADDR一直是上一次传输HADDR加上HSIZE(Byte)·('h1)。但是一次burst传输寻址空间禁止大于1KB
例如在一次burst传输中,上次传输的HADDR是8’h40,HSIZE为3’b001,那么这次传输的HADDR就应该是8’h42
波形图如下,两次连续的INCR传输可以直接用NONSEQ接起来。如果一次INCR结束之后,下一拍不立刻进行传输,就可以令HTRANS为IDLE,HBURST任意就行。
但要注意一次burst传输中,hwrite、hburst和hsize不可变化。如下图中在T2时刻开始下一次burst传输,hwrite、hburst和hsize才可以改变。
burst中途如果Manager需要忙于其他事情,可以令HTRANS为BUSY,这个波形可借鉴WRAP
● WRAP:回环传输
即burst传输的HADDR变化必须在一个离散范围的内。如果不超过最大值,那么每次传输的HADDR一直是上一次传输HADDR加上HSIZE(Byte)·('h1)。如果超过了最大值,HADDR就回到最小值。
即burst传输时地址永远在一个内离散集合内循环
例如HBURST = WRAP4、HSIZE = WORD,HTRANS=NONSEQ时HADDR = 8’h34,那么这次burst传输只能持续4拍。若第一次传输时有:HTRANS=NONSEQ,HADDR = 8’h34;则必须有第二次,HTRANS=SEQ,HADDR = 8’h38;第三次,HTRANS=SEQ,HADDR = 8’h3C;第四次,HTRANS=SEQ,HADDR = 8’h30。
即在上述HBURST、HSIZE、HTRANS的配置下,HADDR只能在8’h30、8’h34、8’h38、8’h3C中循环
那么如何确定HADDR回环的边界呢?记住一个公式:
W r a p B o u n d a r y = i n t ( H A D D R W R A P ⋅ 2 H S I Z E [ 2 : 0 ] ) ⋅ W R A P ⋅ 2 H S I Z E Wrap Boundary = int(\frac{HADDR}{WRAP·2^{HSIZE[2:0]}})·WRAP·2^{HSIZE} WrapBoundary=int(WRAP⋅2HSIZE[2:0]HADDR)⋅WRAP⋅2HSIZE
这个回环不等式是什么意思呢?首先,由于是按字节寻址,所以HADDR的可取的值一定可构成一个等差数列,这个公差恰好就为HSIZE(Byte),也就是 2 H S I Z E [ 2 : 0 ] 2^{HSIZE[2:0]} 2HSIZE[2:0]。
例如传输数据位宽为HSIZE(Byte) = 2,那么HADDR可取’h00、'h02、'h04、'h08、…
而回环不等式的意思就是HADDR在 [ ′ h 0 , ′ h 2000 ] ['h0,'h2000] [′h0,′h2000]内按照公差HSIZE(Byte)构成的等差数列中,每WRAP个HADDR构成一个回环。
AHB要求burst传输HADDR不能超过1KByte边界,1KByte = 'h2000
所以说回环边界一定是WARP·HSIZE(Byte)
的整数倍。那么对于一个HADDR,它所在的回环边界一定是HADDR除以WARP·HSIZE(Byte)
的商部分乘以WARP·HSIZE(Byte)
如下图,红框表示回环的范围
将burst类型和次数合在一起就是HBURST
HBRUST[2:0] | Type | Description |
---|---|---|
3'b000 | SINGLE | 传输1次 |
3'b001 | INCR | 无限次burst传输,HADDR以HSIZE(Byte)·('h1)公差递增直到1KByte |
3'b010 | WRAP4 | 4次burst传输,HADDR以HSIZE(Byte)·('h1)公差回环递增 |
3'b011 | INCR4 | 4次burst传输,HADDR以HSIZE(Byte)·('h1)公差递增 |
3'b100 | WRAP8 | 8次burst传输,HADDR以HSIZE(Byte)·('h1)公差回环递增 |
3'b101 | INCR8 | 8次burst传输,HADDR以HSIZE(Byte)·('h1)公差递增 |
3'b110 | WRAP16 | 16次burst传输,HADDR以HSIZE(Byte)·('h1)公差回环递增 |
3'b111 | INCR16 | 16次burst传输,HADDR以HSIZE(Byte)·('h1)公差递增 |
下面给出几个时序图,注意burst最后一次传输的数据,一定在最后一个SEQ的下一拍。
中途Manager忙一下可以加个BUSY。注意由于HADDR为0x24的读出数据还没检测到,所以T3~T6有个延时。
如果0x24的HRDATA在HTRANS为BUSY期间出现,且HREADY为高,Manager也应该能获取该HRDATA。