当在 英特尔 Agilex® 7 SoC 设备的 HPS 外部内存接口 (EMIF) 中打开 ECC 时,内存地址将生成用于 F2H SDRAM 直接模式和 F2H CCU 模式的 ECC 数据。因此,即使在FPGA对 HPS SDRAM 直接模式下,它要求FPGA对 HPS 主使用相同的 MPU 内存地址。否则,可能会触发 ECC 错误。ECC 关闭时,此限制不适用。
当FPGA对 HPS 主机和 MPU 主主访问小于 2GB 的内存空间时,内存地址便会从 0x0000 0000 到 0x7FFF FFFF 使用。
当FPGA对 HPS 主主和 MPU 主访问大于 2GB 的内存空间时,MPU 使用 DTS 文件中定义的锯齿地址访问这些内存地址。FPGA 转 HPS 主必须使用相同的别名地址,而非 F2H SDRAM 直接模式和 F2H CCU 模式的物理地址。
以下是英特尔 Agilex® 7 SoC 设备中的 4GB HPS EMIF 示例:
在 DTS 中,内存定义为两个区域,如下所示。然后,FPGA对 HPS 主机和 MPU 必须使用从 0x1080000000 到 0x10FFFFFFFF 的地址才能访问 2GB ~ 4GB 的内存空间。
内存 {
reg = ,
;
};
要启用带有上述别名地址的完整 4GB 内存空间,还应相应设置以下寄存器。您可以在 uboot-socfpga\arch\arm\mach-socfpga\spl_agilex.c 中设置这些寄存器
写入(0x100000、0xF8020110);region0addr_base
写入(0x0、0xF8020114);region0addr_baseext
writel(0xFFFFFFFF、0xF8020118);region0addr_limit(32 位更低)
写入(0x10、0xF802011C);region0addr_limitext(32 位上方)
写入(0x1、0xF8020104);区域enable_set