最近面试时,被问到了AMBA总线的概念。因此在此对AMBA的三个总线进行梳理,一边加深印象。
首先,先讲一讲AHB总线-高级高性能总线。这是soc芯片中应用最广泛的片上总线。他主要有以下及部分构成:
主机:AHB主机可以提供地址合控制信息发起读写操作;在同意时刻只允许一个主机占用总线。
从机:从机应该在给定的地空间范围内响应总线上的读写操作,并且将传输是成功,失败还是等待数据传输的信息返回给主机。
仲裁器:仲裁器只允许同意时刻一个主机发起传输。
译码器:对传输中的地址信号进行译码,并提供给从机一个选择信号。
首先AHB支持两种形式的突发传输:1.增量突发,在地址边界不进行回环。2.回环突发,在特定的地址边界进行回环。
而每次的数据传输包括:1.一个地址合控制信号传输。
2.一个或者多个数据周期。之所以可以多个数据周期,是因为我们可以通过ready来延长数据,当ready为高时,表示传输完成,当此信号为低时,表明要在传输过程中插入等待状态来允许从机有足够的时间来提供或者采样数据。
在传输中从机海可以通过响应信号来告诉主机自己的状态:
下面讲一讲传输方式:1基本传输
1.在第一个周期上升沿,主机驱动地址和控制信号。
2.第二个周期的上升沿,从机采样地址和控制信号,并将ready拉高。如果是写操作,主机在第二个上升沿传输要写入的数据。如果是读操作,从机会在ready信号拉高后将数据写入总线。
3.第三个周期上升沿,如果是写操作,主机获得ready高信号,表明从机已经接受数据,操作成功。如果是读操作,主机获得ready高信号,表明此时的读数据有效并且接受下来。
这里值得注意的是,ready信号在数据有效期间应该已知为高,并且延迟到第三个周期的上升沿,确保主机的正确采样。
2.等待状态的传输
在这个传输状态中,从机可以插入等待状态到任意周期中,来扩展传输完成允许的附加时间。例如此图,ready在第二个和第三个周期拉低,这是在告诉主机,从机不能马上处理,需要让主机等待2个周期。我们要注意:
1.对于写操作来说,主机总线必须保持扩展周期中的数据稳定。
2.对于读操作来说,从机不需要一开始久提供数据,只需要在ready拉高后才给出有效数据。
第三种传输:多重传输
我们都知道AHB中可以扩展传输,但是扩展传输有一点不好:他必须延长相应的下一笔传输的地址周期,从图中我们可以看到,A和C是零等待传输,B加入了一个等待周期,因此相应的C的地址周期需要扩展。
下面详细解释一下时序图:
1.第一个周期中,主机发起操作A,驱动地址和控制信号。
2.第二个周期,从机收到来自总线的请求,将ready拉高。在第二个周期上升沿中,主机发现操作B需要执行,并且检查到上一个周期ready为高,则发起第二个操作B。
3.第三个周期,主机获取ready为高,因此A操作完成。在第三个周期的上升沿中,主机发现操作C需要执行,并且检查到上个周期ready为高,因此发起操作C。在第三个周期上升沿后中,我们发现从机繁忙插入了一个等待状态,因此将ready拉低。
4.第四个周周期,主机获取ready为低,知道从机希望等待,因此主机保持和一拍一样的信号。低四个周期上升沿过后,从机处理完了事务,将ready拉高,表示可以继续处理。
5.第五个周期,主机获取heady为高,知道从机已经可以处理B操作,在第五个周期上升沿后,B操作完成。
6.在第六个周期上升沿后,操作C结束。
我们一定要注意:hready一定程度上表明了从机流水线的能力,HAB是两个pipe,即总线上最多有两个未完成的transfer。
下面我们来详细讲解一下burst。
burst传输可以分成:
1.增量突发,在地址边界不进行回环。访问来女婿地址,并且每次传输地址会依靠上一笔的地址来递增。
2.回环突发,在特定的地址边界进行回环。例:回环长度=4;每四个字节要对齐在16字节的范围内,例如第一个地址是0x34,则传送的顺序为 0x34、 0x38、0x3C、0x30。
下面还有几个重要概念需要讲解清楚:
1.AHB中的所有操作,都要要求给出的地址是对齐的。地址对齐,这是储存空间的一种划分,对齐地址都是所传输数据宽度的整数倍。如下图。我么们可以看到,对其地址时所传输数据宽度的整数倍。
2.对于同一个burst来说,每次数据的宽度是一样的。
3.地址边界:只有对于回环操作才有地址边界这一说,地址边界和对齐地址和拍数有关。
例如,4拍的回环操作,每一拍时4byte的宽度,因为是4拍的回环操作,所以第四个对齐地址是地址边界,所以边界是0*0c,0*1c,0*2c,0*3c
下面讲一下增量突发的时序:
1.第一个周期上升沿,总线将地址和控制信号打入总线。此时是一个新的burst的开始,因此transfer的类型是NONSEQ的。
2。因为主机不能再第二个周期中处理第二拍,因此主机使用BUSY来为自己延长一个周期的时间,虽然此处延长了,但是主机也需要给出第二拍的transfer的地址和控制信号。
3.从机在第三个周期上升沿采集到主机的busy信号,知道了主机要等一拍,所以从机会忽略这个BUSY transfer.
4.主机在第二个周期休息了一个周期,在第三个周期主机发起了第二个transfer,这个transfer是同一个BURST的,因此transfer的类型是SEQ。
5.在第五个周期,从机将ready拉低,告诉主机需要等待一个周期。
6在t8时刻完成最后一个transfer传输。
我们一定要注意,虽然从机会忽略BUSY transfer,但是主机也需要给出下一拍的地址和控制信息。
而回环传输和递增传输唯一的区别就是地址不同,一共四拍,一共s四个地址,每个地址个各不相同,这四个地址是一个回环地址,起始地址决定了回环操作的回环范围。