信号名 | 含义 | 源 | I O | 描述 |
---|---|---|---|---|
HCLK | 总线时钟 | clock source | 各module | 总线时钟,上升沿采样 |
HRESETn | 复位 | reset controller | 各module | 总线复位,低电平有效 |
HADDR[31:0] | 地址总线 | Master | decoder;mux to slave;arbiter | 32位系统地址总线 |
HTRANS[1:0] | 传送类型 | Master | mux to slave | 当前传输类型NONSEQ, SEQ, IDLE, BUSY |
HWRITE | 传送方向 | Master | mux to slave | 1为写,0为读 |
HSIZE[2:0] | 传送带宽 | Master | mux to slave | 每一个transfer传输的数据大小,以字节为单位,最高支持1024位 |
HBURST[2:0] | 批量传送 | Master | mux to slave | burst类型,支持4、8、16 burst,incrementing/wrapping |
HPROT[3:0] | 保护控制 | Master | mux to slave | 保护控制信号,需要slave带保护功能,一般不用 |
HWDATA[31:0] | ||||
HRDATA[31:0] | 读数据总线 | Slave | mux to master | 读数据总线,Slave到Master |
HREADY | 传送完成 | Slave | mux to master;arbiter | 高:Slave指出传输结束 低:Slave需延长传输周期 |
HRESP[1:0] | 传送响应 | Slave | mux to master;arbiter | Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT |
HSELx | 从选择 | Decoder | slave | slave选择信号 |
1.1.AHB信号描述(重要)
AHB仲裁信号:
信号名 | 含义 | 源 | I O | 描述 |
---|---|---|---|---|
HBUSREQx | Bus请求 | Master | M2A | Mx 向 A 发出的总线使用请求信号。最多 16 个 M |
HLOCKx | 锁定传送 | Master | M2A | 如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号 |
HGRANTx | Bus 同意 | arbiter | A2M | master 授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利 |
HMASTER [3:0] | 主号 | arbiter | A2M | 具有split功能的slave 仲裁器为每一个master分配的ID, 指出哪个主设备正在进行传输,提供进行split的信息 |
HMASTLOCK | 锁序 | arbiter | 具有split功能的slave | 表示当前的master正在执行Locked操作。这个信号和HMASTER有这相同的时序 |
HSPLITx[15:0] | 分段请求 | slave | S2A | 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备 |
1.2.基本AHB传输(重要)
1.2.1零等待传输(no wait state transfer)
第一个周期的上升沿,master驱动地址和控制信号;
第二个周期的上升沿,slave采样地址和控制信号,并将HREADY拉高;
如果是写操作,master会在第二个周期的上升沿传输要写入的数据;
如果是读操作,slave会在HREADY信号拉高后将读取的数据写入总线;
第三个周期的上升沿,
如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;
如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。
- 当 HCLK 正沿触发后, M 送出地址与控制信号,HCLK 由 CLOCK 驱动送至 AHB 接口。
- S 在 HCLK下一个正沿触发时, S 收到地址与控制信号。
- 在 HCLK 的第三个正沿触发时, M 收到S 的响应信号。AHB支持流水线的动作,在收上一笔数据的同时,可将下一笔数据的地址送出。
1.2.2等待传输(transfers with wait states)
传送完成时间因等待而延迟,这是由于寻址到较慢的 S 单元所造成。当 HREADY 被 S 拉低时,会发生等待状态。需要延迟传送的周期时,就会在数据期间将 HREADY 拉低,此时地址与数据都必须延伸。有等待状态的 AHB 传递,下图中可看到在数据模式时,时序必须多花二个周期的延迟等待时间(HREADY 为 0),S 才能正常的接收到 M 写的数据或准备好 M 欲读取的数据。
slave可以及时处理master请求,但也可能存在slave太慢不能立即处理的情况。这时需要让master稍微等一等,需要slave插入一些等待的状态。如下图所示,HREADY信号在第二和第三周期拉低,意在告诉master,slave不能立即处理,需要master等待2个周期。在这里需要注意2点:
如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成;
如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。
1.2.3.多重传送(multiple transfer)—Pipeline
一次完整的数据传送会有多个传送周期,如下图下一笔地址可与上一笔数据同时在总线上,时序图的说明如下:
下图是对上图的补充:
扩展数据周期的一个负效应是必需延长相应的下一笔传输的地址周期。A和C为零等待传输,B加入了一个等待周期,因此相应的C地址周期要进行扩展。
第一个周期,master发起一个操作A,并驱动地址和控制信号;
第二个周期,slave收到了来自总线的请求,将HREADY信号拉高;
第二个周期上升沿后,master发现有操作B需要执行,并且检查到上一周期的HREADY为高,则发起第二个操作B;
第三个周期,master获取HREADY信号为高,表示操作A已经完成;
第三个周期上升沿后,master发现有操作C需要执行,并且检查到上一周期的HREADY为高,则发起第三个操作C;
第三个周期上升沿后,slave由于繁忙插入了一个等待状态,将HREADY拉低;
第四个周期,master获取HREADY信号为低,知道slave希望等待,于是master保持和上一拍一样的信号;
第四个周期,slave处理完了事务,将HREADY信号拉高,表示可以继续处理;
第五个周期,master获取HREADY信号为高,知道slave已经可以处理B操作;
第五个周期上升沿后,B操作完成;
第六个周期上升沿后,C操作完成。
需要注意几点:
HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上未完成的transfer少于2个时,master才能发起操作。
1.3.AHB控制信号
1.3.1.传送状态 HTRANS[1:0]
在 AHB 总线上,M 的传送状态可由 HTRANS[1:0]来表示,这两位所代表的意义如下:
1.3.2.批量传送 HBURST[2:0]
批量传送是以群组为单位的传送方式,主要依地址的给法来区分:
- 递增传送(incrementing burst),会依上一笔的地址来递增。
- 回绕传送(wrapping burst),如:回绕长度 = 4;每 4 个字节要对齐在 16 字节的范围内。如果第一个地址=0x64,则传送的顺序为 0x68、0x6C、0x60。
每次传送数据的大小由 HBURST[2:0]定义:
详细的种批量式传送的时序在此不做详细解释。
1.3.3.传送方向 HWRITE
HWRITE:表示传送方向(依读或写的动作来决定传送信号的方向)
- HWRITE 拉高时(写),M 必须对写入动作初始化,数据会由 M 放到 HWDATA[31:0] 总线上。
- HWRITE 拉低时(读),M 会对读取动作初始化,被寻址到的S会将数据放到 HRDATA[31:0] 总线上。
1.3.4.传送大小 HSIZE[2:0]
传送数据大小由 HSIZE[2:0] 信号控制,表示每次传送的字节数目。
HSIZE[2:0]与 HBURST[2:0]两个信号可合起来定义回绕地址的范围。
例如: HSIZE[2:0]= 32 位,HBURST[2:0]长度为 4 字节,则回绕地址须对齐在 16 字节。
通常的 AHB 从设备是 32 位数据线,所以它支持 8 位,16 位和 32 位 3 种大小。
1.3.5.保护控制 HPROT[3:0]
HPROT[3:0] 为总线协议保护信号用来定义存取的型态与特性,并非所有的 M 都会传送出 HPROT[3:0],所以除非 S 有需要否则不会使用到 HPROT[3:0]信号。一般来讲该信号很少用到。
1.4.AHB响应信号
master发起一笔传输后,slave可以决定这笔传输的进程,而master不能取消已经发出的传输。slave通过HREADY信号反映传输是否完成,通过HRESP[1:0]反映传输的状态;
1)slave可以如下方式完成一笔传输:
- 立即完成一笔传输;
- 延迟一个或几个周期完成传输;
- 传输失败返回error;
- 传输延迟,释放总线。
2)传输完成标志HREADY:
- HREADY为高时传输完成,
- HREADY为低时传输需要延迟。
3)传输响应标志HRESP[1:0]:
- 00: OKAY—传输完成
- 01: ERROR—传输错误
- 10: RETRY—传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级
- 11: SPLIT—传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
4)地址译码
地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。
每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave(default slave)来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。
5)仲裁
仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。
- HBUSREQx:master向arbiter发出接入请求的信号。
- HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。
- HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。
- HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。
- HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。
- HSPLIT:供支持SPLIT传输使用。