1. 基本传输
一次传输由两个阶段组成:
- 地址阶段:持续一个HCLK周期,除非由之前的总线传输扩展(被delay)。
- 数据阶段:可能需要多个HCLK周期,使用HREADY信号控制完成传输所需的时钟周期数。
HWRITE控制数据传输的方向,因此:
- HWRITE为高时,表示写传输,master在写数据总线HWDATA[31:0]上传播数据。
- HWRITE为低时,执行读传输,slave必须在读数据总线HRDATA[31:0]上生成数据。
最简单的传输是没有等待状态的传输,传输由一个地址周期和一个数据周期组成。 图3-1显示了一个简单的读传输,图3-2显示了一个简单的写传输。
在没有等待状态的简单传输中:
- master在HCLK的上升沿之后将地址和控制信号驱动到总线上。
- slave然后在下一个HCLK的上升沿上采样地址和控制信息。
- slave采样了地址和控制之后,可以开始驱动响应的HREADYOUT响应,这个响应在HCLK的第三个上升沿上由master采样。
这个简单示例演示了传输的地址阶段和数据阶段是如何在不同的时钟周期中发生的。任何传输的地址阶段发生在前一个传输的数据阶段期间,地址和数据的这种重叠是总线流水线特性的基础,并且能够在仍然为slave提供足够的时间来响应传输的同时,实现高性能操作。
slave可以在任何传输中插入等待状态以允许额外的完成时间。每个slave都有一个HREADYOUT信号,它在传输的数据阶段期间驱动此信号。互连负责组合所有slave的HREADYOUT信号,生成一个用于控制整体进度的单个HREADY信号。
图3-3显示了一个带有两个周期等待状态的读传输。
图3-4显示了一个带有一个周期等待状态的写传输。
注意 对于写操作,master在整个扩展周期中必须保持数据稳定。对于读传输,slave在传输即将完成之前不必提供有效数据。
当以这种方式扩展传输时,它有一个副作用,即会扩展下一个传输的地址阶段。 图3-5显示了三个到不相关地址A、B和C的传输,其中地址C的地址阶段被扩展。
在图3-5中:
- 到地址A和C的传输是零等待状态。
- 到地址B的传输是一个等待状态。
- 地址B的数据阶段的扩展传输的影响是地址C的地址阶段的传输也扩展。
2. 传输类型
传输可以分为四种类型,由HTRANS[1:0]控制。表3-1列出了这些类型。
HTRANS[1:0] | 类型 | 描述 |
---|---|---|
00 | IDLE | 表示不需要数据传输。当master不想执行数据传输时,使用IDLE传输。建议master使用IDLE传输来终止锁定传输。slave必须始终对IDLE传输提供零等待状态的OKAY响应,并且传输必须被slave忽略。 |
01 | BUSY | BUSY传输类型允许master在突发传输中间插入空闲周期。此传输类型表明master正在继续进行突发传输,但下一个传输不能立即进行。 当master使用BUSY传输类型时,地址和控制信号必须反映突发中的下一个传输。 只有未定义长度的突发可以有一个BUSY传输作为突发的最后一个周期。 slave必须始终对BUSY传输提供零等待状态的OKAY响应,并且传输必须被slave忽略。 |
10 | NONSEQ | 表示单个传输或突发传输的第一个传输。 地址和控制信号与先前的传输无关。 总线上的单个传输被视为长度为一的突发,因此传输类型是NONSEQUENTIAL(非顺序)。 |
11 | SEQ | 突发中剩余的传输是SEQUENTIAL(顺序的),地址与先前的传输相关。 控制信息与先前的传输相同。 地址等于先前传输的地址加上传输大小(以字节为单位),传输大小由HSIZE[2:0]信号指示。在回环突发的情况下,传输的地址在地址边界处回环。 |
图3-6 显示了NONSEQ、BUSY和SEQ传输类型的例子。
在图3-6中:
- T0-T1:以一个NONSEQ传输开始的4拍读操作。
- T1-T2:master无法执行第二拍,因此插入一个BUSY传输来延迟第二拍的开始。slave为第一拍提供读数据。
- T2-T3:master现在准备好开始第二拍,因此发出SEQ传输信号。master忽略slave在读取数据总线上提供的任何数据。
- T3-T4:master执行第三拍。slave为第二拍提供读数据。
- T4-T5:master执行最后一拍。slave无法完成传输,并使用HREADYOUT插入一个周期的等待状态。
- T5-T6:slave为第三拍提供读数据。
- T6-T7:slave为最后一拍提供读数据。
3. 锁定传输
如果master需要锁定访问,则还必须断言HMASTLOCK信号。此信号向任一slave指示当前传输序列是不可分割的,因此必须在处理任何其他传输之前进行处理。
通常使用锁定传输来维护信号量的完整性,确保在微处理器SWP指令的读阶段和写阶段之间,slave 不执行其他操作。
图3-7显示了微处理器SWP指令下的HMASTLOCK信号。
注意 在锁定传输之后,建议master插入一个IDLE传输。
大多数slave不需要实现HMASTLOCK,因为它们只能按照接收到的顺序执行传输。可以被多个master访问的slave,例如,多端口存储器控制器(MPMC)必须实现HMASTLOCK信号。
允许master在锁定传输序列的开始、中间或结束时对IDLE传输断言HMASTLOCK。在锁定传输序列的开始或结束时使用锁定IDLE传输是允许的,但不推荐,因为这种行为可能会对系统的仲裁产生不利影响。
也允许,但不推荐,master对多个IDLE传输断言HMASTLOCK,然后取消断言HMASTLOCK而不执行非IDLE传输。这种行为可能会对系统的仲裁产生不利影响。
要求锁定序列中的所有传输都必须是到同一个slave地址区域。
4. 传输大小
HSIZE[2:0] 表示数据传输的大小。表3-2列出了可能的传输大小。
HSIZE[2] | HSIZE[1] | HSIZE[0] | (bits) | 描述 |
---|---|---|---|---|
0 | 0 | 0 | 8 | 字节 |
0 | 0 | 1 | 16 | 半字 |
0 | 1 | 0 | 32 | 字 |
0 | 1 | 1 | 64 | 双字 |
1 | 0 | 0 | 128 | 4字线 |
1 | 0 | 1 | 256 | 8字线 |
1 | 1 | 0 | 512 | |
1 | 1 | 1 | 1024 |
注释 由HSIZE设置的传输大小必须小于或等于数据总线的宽度。例如,在32位数据总线上,HSIZE只能使用值0b000,0b001,0b010。
结合使用HSIZE和HBURST,确定包装突发的地址边界。
HSIZE信号与地址总线的时序完全相同,但在突发传输期间它们必须保持不变。