當 ECC 在 Intel Agilex® 7 SoC 裝置中的 HPS 外部記憶體介面 (EMIF) 中開啟時,記憶體位址會同時為 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 模式的實體位址。
以下是Intel Agilex® 7 SoC 裝置中 4GB HPS EMIF 的範例:
在 DTS 中,記憶體定義為兩個區域,如下所示。然後,FPGA對 HPS 主機和 MPU 必須使用從0x1080000000到0x10FFFFFFFF的位址,才能存取 2GB ~ 4GB 的記憶體空間。
記憶體 {
reg = ,
;
};
若要以上述別名位址啟用完整的 4GB 記憶體空間,也應相應設定下列暫存器。您可以在 uboot 檔案 uboot-socfpga\arch\arm\mach-socfpga\spl_agilex.c 中設定這些暫存器
寫入(0x100000、0xF8020110);region0addr_base
寫入(0x0、0xF8020114);region0addr_baseext
寫入(0xFFFFFFFF、0xF8020118);region0addr_limit(更低 32 位)
寫入(0x10、0xF802011C);region0addr_limitext(上 32 位)
寫入(0x1、0xF8020104);適用于各地區的enable_set