当英特尔® Stratix® 10 SX 设备的 HPS 外部内存接口 (EMIF) 上打开纠错码 (ECC) 时,内存地址生成面向 F2H 和 F2SDRAM0/1/2 接口的 ECC 数据。即使使用 F2SDRAM0/1/2 接口,FPGA对 HPS 大师也需要使用相同的 MPU 内存地址。否则可能会触发 ECC 错误。ECC 关闭时,此限制不适用。
当FPGA对 HPS 主机和 MPU 主主访问小于 2 GB 的内存空间时,内存地址便会从 0x0000 0000 到 0x7FFF FFFF 使用。
当FPGA对 HPS 主和 MPU 主访问大于 2 GB 的内存空间时,MPU 使用 DTS 文件中定义的锯齿地址访问这些内存地址。FPGA对 HPS 主必须为所有 F2SDRAM0/1/2 接口使用相同的别名地址而非物理地址。
以下是英特尔® Stratix® 10 SX 设备中 4 GB HPS EMIF 的示例:
在 DTS 中,内存定义为两个区域,如下所示。然后,FPGA对 HPS 主机和 MPU 必须使用从 0x1080000000 到 0x10FFFFFFFF 的地址才能访问 2 GB ~ 4 GB 的内存空间。
内存 {
reg = ,
;
};
要启用带有上述别名地址的完整 4 GB 内存空间,还应相应设置以下 F2SDRAM 防火墙寄存器:
#Example,F2SDRAM0 区域 0 配置,您可在 U-Boot 源中配置它们,即 uboot-socfpga\arch\arm\mach-socfpga\spl_s10.c
写入(0x1000000、0xF8020210);region0addr_base
写入(0x0,0xF8020214);region0addr_baseext
写入(0xFFFFFFFF,0xF8020218);region0addr_limit(32 位更低)
写入(0x10、0xF802021C);region0addr_limitext(32 位上方)
写入(0x1,0xF8020204);区域enable_set