一、AHB-lite总线基础
AHB-Lite总线解决了高性能集成设计的要求。他是一个总线接口,支持单个总线主机,并提供高带宽操作。AHB支持以下性能:
(1)突发传输
(2)单时钟沿操作
(3)非三态实现
(4)宽数据总线配置
一个典型的AHB系统包括
(1)可支持高带宽传输的主干总线
(2)AHB主机
(3)AHB从机
最常见AHB-lite主机有高性能的CPU和DMA设备等,从机有内存设备,外部存储器接口,以及高带宽的外设。低带宽的外设也可以作为AHB-lite的从机但是必须挂在到APB桥上。如下图所示:
如下图所示的是一个具有1个主机3个从机的AHB-lite系统,
如图所示,该系统的总线互连逻辑包括一个地址解码器、一个多路复用器。解码器将总线传来的地址通过解码选择从机,从机通过多路器将数据反馈给主机。
二、AHB-lite接口信号
1、全局信号
HCLK |
时钟信号 |
HRESETN |
复位信号 |
2、主机信号
名字 |
目的对象 |
描述 |
HADDR |
从机和解码器 |
32位的地址总线 |
HBURST[2:0] |
从机 |
突发传输的类型,具体后面再讲 |
HMASTLOCK |
从机 |
主机标号,判断当前的传输由哪个主机控制 |
HPROT |
从机 |
协议类型,标记传输使用协议的额外信息 |
HSIZE[2:0] |
从机 |
指明一次传输的位宽 |
HTRANS[1:0] |
从机 |
当前传输的类型,主要包括四种类型 IDLE,BUSY,NONSEQUENTAL, SEQUENTAL(具体后面详细介绍) |
HWDATA[31:0] |
从机 |
写数据总线,主机发送到从机的总线 |
HWRITE |
从机 |
传输方向控制,当为高电平时为写,低电平的时候为读 |
3、从机信号
名字 |
目的对象 |
描述 |
HRDATA[31:0] |
多路复用器 |
从机发送数据到总机,读数据总线 |
HREADYOUT |
多路复用器 |
当该信号为高电平时,表明传输已经完成,当该信号为低电平时,传输周期延迟,当前还未结束传输。 |
HRESP |
多路复用器 |
当为低电平时,该信号指明传输状态是OKEY。 当为高电平时,该信号指明传输状态是ERROR。 |
4、解码器信号
名称 |
目的对象 |
描述 |
HSELXa |
从机 |
标记哪一个从机被选中,由地址解码产生 |
三、传输过程
AHB传输的过程:
1、从机获取总线使用权:主机向判决器发送总线请求信号,判决器发送应答后主机可以开始传输。
2、数据传输:主机向从机传输数据,分为两个部分:
(1)发送地址和控制信号:包括地址,位宽,突发类型等控制信号,仅一个时钟周期
(2)数据传输:进行数据交换,一个或多个时钟周期
3、从机应答:主机通过HRESP和HREADY标记完成状态,对于HRESP,有以下状态
(1)OKEY:标记传输完成,当HRESP为该状态且HREADY拉高时,传输完成
(2)ERROR:传输有错
(3)RETRY和SPLIT:标记传输未完成,主设备仍需要占用总线
3.1基本传输
1、地址/控制传输:传输地址信息和控制信息,仅占一个时钟周期
2、数据传输:可能需要多个时钟周期,由信号HREADY决定(拉高才算数据结束)
3.1.1无等待传输
1、读时序
2、写时序
主要包括三个过程
(1)在第一个时钟上升沿,主机将地址信息和数据信息发送到总线上。(HWRITE为传送方向控制信息,为高是写,为低是读)
(2)在第二个时钟上升沿,从机采集地址和控制信息
(3)在从机采集到地址和控制信息后,主机在下一个时钟上升沿采样从机响应信号HREADY,若为高则传输完成。
3.1.2有等待传输
1、读时序
2、写时序
有等待传输下,数据传输阶段可以扩展,即在HREADY拉高之前,数据传输阶段不结束。要求写数据在HREADY拉高前保持稳定,主机在HREADY拉高后采样读数据。 对于写操作来说,主机保持数据稳态直到扩展的周期,对于读操作来说,从机不需要一直保持,只需要在将要结束传输时提供数据,如图所示。
当数据传输阶段被扩充后,他会对下一个传输阶段造成影响。例如B的读数据扩展造成了C的地址扩展。
3.2 传输类型
HTRANS[1:0] |
类型 |
描述 |
b00 |
IDLE |
标志主机占有AHB总线,但是没有数据传输发生。从机需要使用OKAY状态回应该类型 |
b01 |
BUSY |
标志主机占有AHB总线并在进行突发传输,但下一个传输不能立刻发生。从机需要使用OKAY状态回应 |
b10 |
NONSEQ |
标志主机当前发送的地址和控制信号与上一次传输无关(单次传输就是该状态) |
b11 |
SEQ |
标记主机处于突发传输的中间部分,即当前发送的地址和控制信号与上一次地址和控制信号有关 |
例子如下:
第一次传输,开启一次突发传输,因此该地址与上一次传输无关,使用类型NONSEQ。第二次传输,无法立刻进行传输,因此使用BUSY标记延迟一个周期,延迟后可以进行传输,且处于突发传输中,因此地址与上一次地址有关,使用SEQ标记。之后均为猝发传输,均使用SEQ类型
3.3 传输类型
HSIZE[2] |
HSIZE[1] |
HSIZE[0] |
Size |
Description |
0 |
0 |
0 |
8 |
Byte |
0 |
0 |
1 |
16 |
Halfword |
0 |
1 |
0 |
32 |
Word |
0 |
1 |
1 |
64 |
Doubleword |
1 |
0 |
0 |
128 |
4-word line |
1 |
0 |
1 |
256 |
8-word line |
1 |
1 |
0 |
512 |
- |
1 |
1 |
1 |
1024 |
- |
注意:传输位宽一定要小于或者等于数据总线的位宽,例如32bit的数据位宽,HSIZE必须只能试着用b000,b001,b010。
3.3 突发传输
突发传输有4、8、16、、无定义长度传输以及单个数据传输。
传输分为两大类:
增量突发:传输过程中传输地址递增。下一次传输的地址是上一次地址加上一个增量
回卷突发:猝发的地址范围被限制在一个固定范围之内,传输地址递增,若是超出则回到地址范围的开始的地址。例如从0x34进行增量为4,范围为16的回卷猝发,地址顺序为0x34、0x38、0x3c,0x30
HBURST[2:0] |
类型 |
描述 |
000 |
SINGLE |
单个传输 |
001 |
INCR |
无限制长度的增量突发传输 |
010 |
WRAP4 |
4拍回卷突发 |
011 |
INCR4 |
4拍增量突发 |
100 |
WRAP8 |
8拍回卷突发 |
101 |
INCR8 |
4拍增量突发 |
110 |
WRAP16 |
16拍回卷突发 |
111 |
INCR16 |
16拍增量突发 |
注意一次猝发传输不能跨越1kB的地址区间,且传输的起始地址必须与数据类型对应,例如传输字数据的二进制起始地址必须满足后两位为00。
3.3 .1 突发终止
1、在未定义传输长度的情况,也就是无限制长度传输
2、在定义了固定长度的突发后,不允许主机发送一个BUSY信号结束传输。
3、在单个突发的时候,不允许使用BUSY信号结束突发。
4、若猝发传输是提前终止的,如总线控制权被剥夺,那么主机需要在可以进行传输时重建猝发传输。例如一个4拍传输仅发送了一拍就终止,主机需要使用INCR类型的猝发构建3拍传输以重建。
5、突发也可以被以下两种方式结束
(1)从机发送error响应
(2)多系统。。。(这个这里不讲,需要时在添加)
3.3 .2 例子讲解
1、4拍回卷突发
因为传输方式是突发为4拍回卷突发且位宽是Word也就是32位的。所以地址回卷为16byte的边界(4×4byte)
2、4拍增量突发
3、无定义长度突发
第一个突发执行写操作,包含两个halfword的突发从地址ox20开始,地址按照两个字增加,第二个突发执行读操作,,包含三个word的传输,地址开始为0X5C,并且按照4个字节地址增加。
3.4等待传输中的问题
从机使用HREADY去插入等待状态如果他们需要更多的时间去提供或者抓取数据,在这个等待过程中主机可以在一定的约束下改变传输的类型和地址。
3.4 .1 在等待过程中传输类型改变
当从机请求等待状态时,主机禁止改变传输类型,除非以下几种情况
(1)当前处于IDLE传输中
(2)BUSY传输中,固定的突发长度
(3)BUSY传输中,没有定义传输的长度
(4)从机反馈ERROR
1、IDLE传输
在等待期间主机可以从IDLE状态下改变为NONSEQ状态。当传输类型变为NONSEQ状态,HTRANS信号必须一直保持这个状态直到HREADY变为高电平。(IDLE状态下不传送数据,所以在HREADY拉低的情况下,地址可以一直改变,直到变为不是IDLE的状态)如上图所示,主机给地址Z设置的传输状态是IDLE,在HREADY拉低后,主机该改变了传输状态为NONSEQ并且初始化了INCR4无限制突发方式给地址B。在HREADY为低电平的时候,主机一直保持为HTRANS不变。
2、BUSY传输
在等待传输期间,对于一个固定长度的突发来说,主句被允许将传输状态由BUSY变为SEQ。当HTRANS变为SEQ时,主机必须保持这个信号一直不变,知道HREADY变为高电平。
3、从机反馈错误
在T3-T4时,从机响应error信号,此时主机将传输类型修改为IDLE,并且修改了地址。
四、从机响应信号
HRESP信号解析
HRESP |
反馈 |
描述 |
0 |
OKEY |
传输完全成功,或者请求额外的周期完成从机传输数据,此时这个信号代表了当前传输成功或者依然进行中。 |
1 |
ERROE |
在传输攻错中发生了一个错误。对于HREADY在第二个周期中被断言的错误条件,需要两个周期响应。 |
下表中表明了一个完成的传输响应是由HRESP信号与HREADY信号组成的。
HRESP |
HREADY |
|
|
0 |
1 |
0 |
处于传输中 |
传输成功 |
1 |
错误响应,第一个时钟周期 |
错误,第二个时钟周期 |
这里我们分析下最后一种情况,
虽然OKAY响应可以在一个周期内给出,但错误响应需要两个周期。为了启动错误响应,从驱动器HRESP高表示错误,而驱动HREADY低延长一个额外的周期传输。在下一个循环中,HREADY被驱动到高位以结束传输,HRESP被驱动到高位以指示错误。
由于总线的流水线特性,所以需要两个周期的响应。当一个slave开始发出一个错误响应时,下面的传输地址已经被广播到总线上了。两个周期的响应为主服务器提供了足够的时间来取消下一次访问,并在下一次传输开始之前使HTRANS[1:0]空闲。
在T2-T3时从机发出了一个错误信号,这是第一个错误周期,此时HREADY处于低电平。在T3到T4时,此时从机再次发出了一个错误周期,这是最后一个错误响应,此时HREADY拉高。此时主机改变了传输状态为IDLE,这样取消了B地址上传送的数据。
原文:https://www.cnblogs.com/tedymafpga/p/13542818.html