AHB总线(未完待续)

发布时间 2023-12-26 15:48:28作者: hc_zheng

1. 总线的组成

完整的AHB总线由四个部分组成:

①AHB主设备Master;发起一次读/写操作; 某一时刻只允许一个主设备使用总线

②AHB从设备Slave;响应一次读/写操作; 通过地址映射来选择使用哪一个从设备;

③AHB仲裁器Arbiter;允许某一个主设备控制总线;

④AHB译码器Decoder;通过地址译码来决定选择哪一个从设备;

有需要占用总线的Master向arbiter发出请求,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。

2. AHB的传输阶段

AHB 的传送模式包含二个阶段。第一阶段为地址的传递,另一阶段为数据的传递

地址期间; ( address phase): 一个周期

数据期间;(data phase): 一个周期或多个周期 (以 HREADY 信号控制周期数目)

3. AHB的流程

有需要占用总线的Master向arbiter发出请求,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。

获得授权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。总线统一规划slave的地址,译码器根据地址和控制信号确定哪个slave与master进行数据通信。数据传输通过数据总线完成。为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输。每笔传输包括一个地址和控制周期,一个或多个数据周期。地址和控制周期不能被扩展,因此slave必须在一个周期内采样地址信号。数据周期可以通过HREADY信号扩展,但HREADY为低时给传输加入一个等待状态以使slave获得额外的时间来提供或采样数据,另外slave通过响应信号HRESP反映传输状态。

一般情况下master完成完整的burst传输,arbiter才会授权给其他的master接入总线,然而为避免过大的判决延迟,arbiter也可能打断burst传输。在这种情况下master必须再次接入总线以进行中断的burst剩余部分的传输。

小结:

(1)首先发出地址和控制信号,控制信号包括读写信号、传输方式、突发类型、传输大小

(2)译码器根据地址和控制信号确定哪个slave与master进行数据通信

(3)然后发送数据或者接收数据,这根据读写信号决定

(4)每笔传输包括一个地址和控制周期,一个或多个数据周期

(5)支持突发传输、可分为增量突发和回环突发

二、AHB的时序分析

1. 零等待传输

第一个周期的上升沿,master驱动地址和控制信号;
第二个周期的上升沿,slave采样地址和控制信号,并将HREADY拉高;
如果是写操作,master会在第二个周期的上升沿传输要写入的数据;
如果是读操作,slave会在HREADY信号拉高后将读取的数据写入总线;
第三个周期的上升沿,
如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;
如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。
需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。

小结:

    • 第一个周期上升沿, M 送出地址与控制信号
    • 第二个周期上升沿, S 收到地址与控制信号。
    • 第三个周期上升沿, M 收到S 的响应信号。

slave可以及时处理master请求,但也可能存在slave太慢不能立即处理的情况。这时需要让master稍微等一等,需要slave插入一些等待的状态。如上图所示,HREADY信号在第二和第三周期拉低,意在告诉master,slave不能立即处理,需要master等待2个周期。在这里需要注意2点:
(1)如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成
(2)如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据

3. 连续传输

一次完整的数据传送会有多个传送周期,如下图下一笔地址可与上一笔数据同时在总线上,时序图的说明如下:

扩展数据周期的一个负效应是必需延长相应的下一笔传输的地址周期。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才能发起操作。