インテル AGILEX 7 SoC デバイスの HPS 外部メモリー・インターフェイス (EMIF) で® ECC がオンになっている場合、メモリーアドレスは F2H SDRAM ダイレクトモードと F2H CCU モードの両方の ECC データを生成します。そのため、FPGAから HPS へのマスターは、FPGAから HPS の SDRAM ダイレクトモードでも、MPU で同じメモリーアドレスを使用する必要があります。それ以外の場合、ECC エラーがトリガーされる可能性があります。ECC がオフの場合、この制限は適用されません。
FPGAから HPS へのマスターと MPU マスターが 2GB 未満のメモリースペースにアクセスすると、メモリーアドレスが 0x0000 0000 から FFFF 0x7FFF使用されます。
FPGAから HPS へのマスターと MPU マスターが 2GB を超えるメモリースペースにアクセスすると、MPU は DTS ファイルで定義されたエイリアス・アドレスを使用して、これらのメモリーアドレスにアクセスします。FPGAから HPS へのマスターでは、F2H SDRAM ダイレクトモードと F2H CCU モードの両方で、物理アドレスの代わりに同じエイリアスアドレスを使用する必要があります。
以下は、インテル Agilex® 7 SoC デバイスの 4GB HPS EMIF の例です。
DTS では、メモリーは以下のように 2 つの領域に定義されます。次に、FPGAから HPS へのマスターと MPU は、0x1080000000からのアドレスを使用して、0x10FFFFFFFFする必要があります。2GB ~ 4GB のメモリースペースにアクセスします。
memory {
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