인텔 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에서 0x7FFF FFFF로 사용됩니다.
FPGA HPS 마스터와 MPU 마스터가 2GB보다 큰 메모리 공간에 액세스할 때 MPU는 DTS 파일에 정의된 별칭 주소를 사용하여 이러한 메모리 주소에 액세스합니다. FPGA-HPS 마스터는 F2H SDRAM 직접 모드와 F2H CCU 모드 모두에 대한 실제 주소 대신 동일한 별칭 주소를 사용해야 합니다.
다음은 인텔 Agilex® 7 SoC 장치의 4GB HPS EMIF 예입니다.
DTS에서 메모리는 아래와 같이 두 영역으로 정의됩니다. 그런 다음 FPGA-HPS 마스터 및 MPU는 2GB ~ 4GB 메모리 공간에 액세스하려면 0x1080000000 0x10FFFFFFFF 주소를 사용해야 합니다.
메모리 {
reg = ,
;
};
위의 별칭 주소가 있는 전체 4GB 메모리 공간에 대한 액세스를 활성화하려면 다음 레지스터도 그에 따라 설정해야 합니다. uboot 파일 uboot-socfpga\arch\arm\mach-socfpga\spl_agilex.c에서 이러한 레지스터를 설정할 수 있습니다.
writel(0x100000, 0xF8020110); region0addr_base
writel(0x0, 0xF8020114); region0addr_baseext
writel(0xFFFFFFFF, 0xF8020118); region0addr_limit(낮은 32비트)
writel(0x10, 0xF802011C); region0addr_limitext(상위 32비트)
writel(0x1, 0xF8020104); 지역 enable_set