六、数据传输
AHB的数据传输由如下两部分组成
地址阶段:一个周期
数据阶段:一个或多个周期(取决于HREADY)
6.1基本传输
6.1.1无等待的数据传输
第一个时钟沿:第一个时钟上升沿之后,主机在将地址和控制信号驱动到总线上;
第二个时钟沿:然后第二个时钟上升沿,从机采样地址和控制信息;
第二个时钟上升沿后,从机将响应信号和数据发送到总线上
第三个时钟沿:主机采样从机响应信号和数据,传输完成。
6.1.2等待的数据传输
有等待传输下,数据传输阶段可以扩展,即在HREADY拉高之前,数据传输阶段不结束。
要求写数据在HREADY拉高前保持稳定,主机在HREADY拉高后采样读数据
注意:
如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成。
如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。
6.1.3流水线传输
表示了三次传输到无关的地址A、 B和C。
即将传输分为地址-数据两个部分流水进行,本次传输的地址必然在上一次地址之后,本次传输的数据必定紧跟在本次传输地址之后。
地址 A 和 C 的传输都是无等待,地址 B 的传输是一个等待状态;
传输到地址 B 的扩展数据相位对传输到地址 C 的扩展地址相位有影响(必须B传输完成后,C才能传输);
6.2传输类型(HTRANS)
IDLE(00):标志主机占有AHB总线,但是没有数据传输发生。从机需要使用OKAY状态回应该类型
两次brust传输中间主机发IDLE
BUSY(01):标志主机占有AHB总线并在进行brust传输,但下一个传输不能立刻发生。从机需要使用OKAY状态回应
一次burst中间用busy。
NONSEQ(10):标志主机当前发送的地址和控制信号与上一次传输无关(单次传输就是该状态)
表示一次burst的第一个传输或者一个单一传输。
SEQ(11):标记主机处于brust传输的中间部分,即当前发送的地址和控制信号与上一次地址和控制信号有关
burst传输从第二个开始
第一次传输,开启一次burst传输,因此该地址与上一次传输无关,使用类型NONSEQ。
第二次传输,无法立刻进行传输,因此使用BUSY标记延迟一个周期(一次burst中间用busy)。
延迟后可以进行传输,且处于burst传输中,因此地址与上一次地址有关,使用SEQ标记之后均为brust传输,均使用SEQ类型。
6.3burst类型(HBURST)
burst传输分为两类:
incermenting burst(增量模式):传输过程中传输地址递增。下一次传输的地址是上一次地址加上一个增量
wrapping burst(回环模式):burst的地址范围被限制在一个固定范围之内,传输地址递增,若是超出则回到地址范围的开始的地址。
HBURST[2:0] | 类型 | 描述 |
000 | SINGLE | 单个传输 |
001 | INCR | 无限制长度的增量猝发传输 |
010 | WRAP4 | 4拍回环 |
011 | INCR4 | 4拍增量 |
100 | WRAP8 | 8拍回环 |
101 | INCR8 | 8拍增量 |
110 | WRAP16 | 16拍回环 |
111 | INCR16 | 16拍增量 |
对于wrapping burst的理解(以HSIZE=10 32bit=4byte)
4byte 4beat*4byte=16 byte 且 16=0x10
0x10的倍数不能跨过0x10\0x20\0x30\0x40\,如果遇到要往回弹
4byte 8beat*4byte=32 byte 且32=0x20
不能跨过 0x20倍数 如果遇到要往回弹
0x34-0x38-0x3c-0x20-0x24-0x28-0x2c-0x30
起始地址是倍数(8byte 4beat)则跟增量模式一样
8byte*4beat=32 byte=0x20
20-24-28-2c-30-34-38-3c
T1:地址和控制信号(32bit、4beat回环 4*4=16=0x10)
T2:HREADY为低等待
T3:HREADY为高
T4:完成数据传输
两个半字传输:在地址 0x20 处开始。半字传输地址增加为 2。
三个字传输:在地址 0x5C 处开始。字传输地址增加为 4。
6.4控制信号
和传输类型和突发类型一样每次传输将会有一组控制信号以提供传输的附加信息。这些控制信号和地址总线有严格一致的时序。然而,在一次突发传输过程中它们必须保持不变。
6.4.1传输方向
当 HWRITE 为高,该信号表示一个写传输并且主机将数据到写数据总线上,HWDATA[31:0]。
当该信号为低时将会执行一个读传输并且从机必须产生数据到读数据总线 HRDATA[31:0]。
6.4.2传输大小
HSIZE[2:0] | 大小 | 描述 |
000 | 8位 | 字节 |
001 | 16位 | 半字 |
010 | 32位 | 字 |
011 | 64位 | |
100 | 128位 | 4字线 |
101 | 256位 | 8字线 |
110 | 512位 | |
111 | 1024位 |
传输大小和 HBURST[2:0]信号一起决定回环突发的地址边界。
32bit=4byte;4byte*4beat=16byte=0x10
6.4.3保护控制(很少使用)
HPROT[3:0],提供总线访问的附加信息并且最初打算是给那些希望执行某种保护级别的模块使用的
6.5地址译码
HSELx由地址译码器产生,用于指示哪个从机被选中。
只有当前的地址数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。
6.6响应信号
6.6.1.HREADY
HREADY信号标志传输是否完成:0-未完成,需要延长周期;1-已完成
6.6.2.HRESP
HRESP用于标记传输完成的状态:
OKAY(00):传输完成
ERROR(01):传输错误,例如协议错误或写入只读地址
RETRY(10):传输未正常完成,需要重新尝试传输。该响应不会改变优先级
SPLIT(11):传输未正常完成,需要从下一个地址重新启动传输。该响应可能改变优先级
6.7仲裁
仲裁器保证一个时刻仅有一个主设备占有总线,因此当有多个主设备提出访问请求时,仲裁器通过仲裁信号仲裁哪一个主设备获得总线使用权。
主机获取总线控制权分为两个步骤:
1.主机分别通过HBUSREQx和HLOCKx分别向仲裁器申请获取或锁定总线控制权
2.仲裁器分配总线控制权