HN-I SAM的主要功能是将传入的地址映射到连接在HN-I下游的目标端点。这些端点可以是带有内存映射I/O空间的外设(如UART或GPIO)或物理内存(如SRAM或FLASH)。
地址区域(Address Regions):HN-I SAM支持最多三个地址区域(Address Regions 1, 2, 3),这些区域不能重叠。每个地址区域可以被编程为外设或物理内存,默认情况下,每个地址区域被映射为外设内存。
排序区域(Order Regions):每个地址区域可以包含一个排序区域(Order Regions),这些排序区域是地址空间的更小子集。在排序区域内,设备内存排序保证得以维持。
默认地址区域(Address Region 0):HN-I还提供了一个默认的地址区域(Address Region 0)
由下图可以看出,在HN-I整个地址映射空间挖出来三个地址区域,其余全是默认的address region0。
Boot Flash:启动闪存,用于存储设备启动时需要加载的代码或数据。
Address Region 0:地址区域0,是设备内存映射中的一个特定区域,通常用于访问Boot Flash等关键资源。
Order Region 0:排序区域0,是一个配置参数,用于指定在Address Region 0中哪些地址范围的访问请求需要被保证按顺序执行。
编程时机:Arm建议HN-I SAM仅在boot过程中进行编程,以确保在系统启动时正确配置地址映射。
排序区域大小:通过编程排序区域的大小,可以强制执行特定地址区域的严格排序。例如,将order region size设置为6'b111111可以强制在该地址区域内保持严格的排序。
禁用地址区域:如果新的请求可能落入新配置的地址区域或排序区域,并且这些请求需要与现有的pending请求保持排序,则必须禁用相应的address regions寄存器。
Address regions 和 order regions的最小地址粒度是4KB,这相当于AXI/ACE-Lite中最小slave地址空间粒度。the base address in the Address Region {1, 2, 3} Confifiguration Registers only includes bits[REQ_ADDR_WIDTH−1:12].
默认情况下,HN-I的整个地址空间都被映射到地址区域0
事务顺序:所有到地址区域0的事务都保持顺序。
- Order Region大小配置:地址区域0中的Order Region大小是可配置的,它决定了事务在地址区域0中如何被组织或排序。默认情况下,Order Region的大小设置为6'b111111,(
配置 order region size = 6'b111111 代表整个region 全是 order region 就不用真实计算其 size)这覆盖了HN-I的整个地址空间。但是,根据REQ_ADDR_WIDTH(请求地址宽度)的不同,Order Region的大小可以配置为更小的值:
- 当REQ_ADDR_WIDTH等于52时,Order Region大小配置为6'b101000。
- 当REQ_ADDR_WIDTH等于48时,Order Region大小配置为6'b100100。
- 当REQ_ADDR_WIDTH等于44时,Order Region大小配置为6'b100000。
这种配置允许根据具体的地址宽度需求来优化事务处理。
- Address Region 0的有效性:地址区域0始终是有效的,这意味着它不需要通过一个“有效”位(Valid bit)来启用或禁用
Address region0的寄存器配置:
其中该区域的order region是在低五位配置
该寄存器不需要valid位,因为address region0一直有效
- 默认配置:初始配置将Order Region 0的大小设置为32KB,这意味着从地址0x0000_0000_0000到0x0000_0000_8000的访问请求将被按顺序处理。然而,如果Boot Flash的实际物理位置不是从0x0000_0000_0000开始,而是从0x0000_0000_4000到0x0000_0000_C000(即不是32KB对齐的),那么按照默认的Order Region 0配置,可能会有一部分访问Boot Flash的请求没有被正确排序,从而可能导致问题。
- 确保顺序:为了确保所有对Boot Flash的访问请求都按顺序进行,需要将Order Region 0的大小至少配置为64KB(从0x0000_0000_0000到0x0000_0000_FFFF),这样可以覆盖Boot Flash的整个物理范围(即使它不是从0x0000_0000_0000开始的),从而确保所有相关的访问请求都被排序。但这种配置可能会影响到其他设备的访问性能,如SPI1、SPI2和CFG Reg 2,因为它们的访问也需要被排序。
- 优化性能:另一种方法是优化Boot Flash的映射,使其与Address Region 0的起始地址对齐(即Boot Flash从0x0000_0000_0000开始)。这样,就可以将Order Region 0的大小设置为32KB,同时满足对Boot Flash访问的顺序要求,并且不会不必要地影响其他设备的访问性能。
Address region1
地址从0x0000_0000_2000开始,size=8KB
整个address region1都被视为一个order region(
)
Addess region2
地址从0x0000_0002_0000开始,size=128KB
整个address region2都被视为一个order region(因为是6'b111111,就代表整个地址区域保序)
Address region3
地址从0x0000_0020_0000开始,size=1MB
2^3*4KB=32KB,在1MB的范围内,每32KB保序