AXI4协议为由AxCACHE编码识别的内存类型引入了新的名称。表格A4-5显示了AXI4的AxCACHE编码和相关联的内存类型。一些内存类型在AXI3中有不同的编码,这些在括号中显示。
注意
在读取通道和写入通道上,相同的内存类型可以有不同的编码。这提供了与AXI3 AxCACHE定义的向后兼容性。
在AXI4中,对于特定的内存类型,使用多个AxCACHE值是合法的。表格A4-5显示了首选的AXI4值,以及括号中的合法AXI3值。
表格 A4-5 内存类型编码
ARCACHE[3:0] | AWCACHE[3:0] | 内存类型 |
---|---|---|
0000 | 0000 | 设备不可缓冲 |
0001 | 0001 | 设备可缓冲 |
0010 | 0010 | 正常非缓存不可缓冲 |
0011 | 0011 | 正常非缓存可缓冲 |
1010 | 0110 | 写直通不分配 |
1110 (0110) | 0110 | 写直通读分配 |
1010 | 1110 (1010) | 写直通写分配 |
1110 | 1110 | 写直通读写分配 |
1011 | 0111 | 写回不分配 |
1111 (0111) | 0111 | 写回读分配 |
1011 | 1111 (1011) | 写回写分配 |
1111 | 1111 | 写回读写分配 |
所有在表格A4-5中未显示的值都是保留的。 |
1. 内存类型要求
1.1 设备非缓冲型
设备非缓冲型内存所要求的行为是:
- 写入响应必须从最终目的地址获取。
- 读取数据必须从最终目的地址获取。
- 事务不可修改。
- 读不应预取。写入不应合并。
- 来自同一ID的相同从设备的所有不可修改的读写事务(AxCACHE[1] = 0)必须保持有序。
1.2 设备缓冲型
设备缓冲型内存所要求的行为是:
- 写入响应可以从中间点获取。
- 写入事务必须及时的在最终目的地址可见。
- 读取数据必须从最终目的地址获取。
- 事务不可修改。
- 读不应预取。写入不应合并。
- 来自同一ID的相同从设备的所有不可修改的读写事务(AxCACHE[1] = 0)必须保持有序。
注意
- 以上两种设备内存类型都是不可修改的。在本协议规范中,设备内存和不可修改内存这两个术语可以互换使用。
- 对于读取事务,设备非缓冲型和设备缓冲型内存类型所需的行为没有区别。
1.3 普通非缓存型缓冲内存
普通非缓存型缓冲内存所要求的行为是:
- 写入响应可以从中间点获取。
- 写入事务必须及时的在最终目的地址可见。没有机制可以确定何时写入事务在其最终目的地址可见。
- 读取数据可以从中间缓存副本获取
- 事务是可修改的。
- 读取可以预取。
- 写入可以合并。
- 对于读写事务,都需要进行缓存查找。
- 来自同一ID的地址重叠的读写事务必须保持有序。
- “不分配”属性是一个分配提示,即出于性能原因,建议内存系统不要为这些事务分配空间。然而,并没有禁止对读写事务进行分配。
1.4 写直通模式不分配
写直通模式不分配内存类型所要求的行为是:
- 写入响应可以从中间点获取。
- 写入事务必须及时的在最终目的地址可见。没有机制可以确定何时写入事务在其最终目的地址可见。
- 读取数据可以从中间缓存副本获取。
- 事务是可修改的。
- 读取可以预取。
- 写入可以合并。
- 对于读写事务,都需要进行缓存查找。
- 来自同一ID的地址重叠的读写事务必须保持有序。
- “不分配”属性是一个分配提示,即出于性能原因,建议内存系统不要为这些事务分配空间。然而,并没有禁止对读写事务进行分配。
1.5 写直通读分配
写直通读分配内存类型所要求的行为与写通不分配内存相同。但在这种情况下,分配提示是出于性能原因:
- 推荐对读取事务进行分配
- 不推荐对写入事务进行分配
1.6 写直通写分配
写直通写分配内存类型所要求的行为与写直通不分配内存相同。但在这种情况下,分配提示是出于性能原因:
- 不推荐对读取事务进行分配
- 推荐对写入事务进行分配
1.7 写直通读写分配
写直通读写分配内存类型所需的行为与写通不分配内存相同。但在这种情况下,分配提示是出于性能原因:
- 推荐对读取事务进行分配
- 推荐对写入事务进行分配
这些描述涉及到内存系统中不同类型的写直通(Write-through)策略,以及它们对读取和写入事务的分配建议。写通策略确保写入操作完成后,数据在缓存和主存中都是一致的。同时,分配提示(allocation hint)是给内存系统的建议,用于优化性能,但不是强制性的规则。
1.8 写回不分配
写回不分配内存类型所要求的行为是:
- 写入响应可以从中间点获取。
- 写入事务不需要在最终目的地址可见。
- 读取数据可以从中间缓存副本获取。
- 事务是可修改的。
- 读取可以预取。
- 写入可以合并。
- 对于读写事务,都需要进行缓存查找。
- 来自同一ID的地址重叠的读写事务必须保持有序。
- “不分配”属性是一个分配提示,即出于性能原因,建议内存系统不要为这些事务分配空间。然而,并没有禁止对读写事务进行分配。
1.9 写回读分配
写回读分配内存类型所要求的行为与写回不分配内存相同。但在这种情况下,分配提示是出于性能原因:
- 推荐对读取事务进行分配
- 不推荐对写入事务进行分配
1.10 写回写分配
写回写分配内存类型所要求的行为与写回不分配内存相同。但在这种情况下,分配提示是出于性能原因:
- 不推荐对读取事务进行分配
- 推荐对写入事务进行分配
1.11 写回读写分配
写回读写分配内存类型所需的行为与写回不分配内存相同。但在这种情况下,分配提示是出于性能原因:
- 推荐对读取事务进行分配
- 推荐对写入事务进行分配
这些描述涉及到内存系统中不同类型的写回(Write-back)策略,以及它们对读取和写入事务的分配建议。写回策略允许写入操作首先在缓存中完成,然后根据需要将数据写入主存。分配提示(allocation hint)是给内存系统的建议,用于优化性能,但不是强制性的规则。
2. 各种内存类型的应用场景
以下是一些AXI内存类型的应用场景:
-
设备非缓冲型(Device Non-bufferable):
- 适用于不需要缓存的设备,如I/O设备,因为对这些设备的读写操作需要直接反映在最终目的地。
-
设备缓冲型(Device Bufferable):
- 适用于可能需要缓冲的设备,如某些类型的网络接口或图形处理器,允许写入操作在最终目的地变得可见之前完成。
-
普通非缓存型缓冲(Normal Non-cacheable Bufferable):
- 适用于不需要缓存但可能需要缓冲的普通内存访问,如某些类型的数据流处理。
-
写通(Write-through):
- 适用于需要保证数据一致性的场景,如实时系统或数据库操作,确保写入操作立即反映在缓存和内存中。
-
写回(Write-back):
- 适用于对性能要求高且可以容忍一定数据不一致性的场景,如图形渲染或视频处理,可以提高写入性能。
-
写通不分配(Write-through No-allocate):
- 类似于写通,但不推荐对读写事务进行分配,适用于性能敏感且不需要缓存分配的场景。
-
写回不分配(Write-back No-allocate):
- 类似于写回,但不推荐对读写事务进行分配,适用于需要提高写入性能且对数据一致性要求不高的场景。
-
写通读分配/写分配(Write-through Read-allocate/Write-allocate):
- 适用于需要对读取或写入操作进行缓存分配的场景,以优化性能。
-
写回读分配/写分配(Write-back Read-allocate/Write-allocate):
- 适用于需要对读取或写入操作进行缓存分配的场景,以优化性能,同时使用写回策略。
在实际应用中,选择合适的AXI内存类型取决于具体的系统需求,包括性能、数据一致性、功耗和硬件资源等因素。设计者需要根据系统的具体要求和约束来选择最合适的内存类型和策略。