경량 AXI-4 DDR3 컨트롤러
요약
본 IP는 Verilog로 작성된 경량 DDR3 메모리 컨트롤러입니다. FPGA 프로젝트를 목표로 하며, 최대 성능보다는 단순성과 LUT 사용량을 중시할 때 적합합니다. 낮은 클럭 속도(< 125MHz)에서 동작하여 복잡성을 줄이고 다양한 FPGA 환경을 지원하는 것이 특징입니다.
핵심 포인트
- 낮은 클럭(<= 125MHz)으로 DDR3 컨트롤러의 복잡성 감소
- LUT 사용량을 최소화한 경량 IP로, Xilinx/Lattice 등 다수 FPGA 지원
- AXI-4 인터페이스를 통해 버스트 기능 및 높은 순차적 성능 제공
- 오픈 소스로 공개되어 누구나 무료로 활용 및 수정 가능
Github: https://github.com/ultraembedded/core_ddr3_controller
이 IP는 Verilog로 작성된 소형 DDR3 메모리 컨트롤러입니다. 이 컨트롤러는 FPGA 프로젝트를 목표로 하며, 필요한 대역폭이 DDR3 DRAM이 제공할 수 있는 수준보다 낮고, 최대 DDR 성능을 극대화하는 것보다 단순성과 LUT 사용량이 더 중요할 때 적합합니다.
현재 Xilinx 7 시리즈(Artix, Kintex) 및 Lattice ECP5 FPGA를 지원하며, 추후 다른 FPGA 전용 DFI 호환 PHY가 추가될 수 있습니다.
이 프로젝트의 아이디어는 DDR3를 DDR 부품이 지원하는 최대 클럭 주파수보다 훨씬 낮은 클럭 주파수로 구동하여, 버스 인터페이스에 더 많은 여유와 허용 오차(tolerance)를 제공함으로써 DDR3 컨트롤러가 요구하는 복잡성을 줄이는 것입니다. 이는 외부 DDR 메모리 인터페이스 속도보다는 팹릭(fabric) 속도가 설계의 제한 요소인 일부 FPGA 프로젝트에서 의미가 있을 수 있으며, 일반적으로는 SDR DRAM을 사용할 수 있었지만 (이용 가능성, 용량, 비트당 비용 등의 이유로 인해) 사용되지 않았던 경우에 해당합니다.
DDR3는 매우 높은 신호 전송률(signalling rate)을 가지고 있어, 이것이 안정적으로 작동하려면 다음과 같은 복잡성이 추가됩니다:
- 읽기/쓰기 레벨링 (Read/write levelling)
- ZQ 보정 (ZQ calibration)
일반 동작 모드(DLL-on 모드)에서 DDR3는 최소 클럭 주파수(300MHz 이상)를 가집니다. 하지만, DDR3 DLL을 끄고(대부분의 DRAM 부품에서 가능) 125MHz 이하의 주파수로 구동하는 것이 가능합니다.
DLL-off 모드(이 메모리 컨트롤러가 활용하는 방식)는 DDR3 부품에 구현하기 위한 선택적 기능으로 명시되어 있지만, 인기 있는 DDR3 부품들은 실제로 이를 구현하고 있으며 (테스트를 통해 잘 작동한다는 것이 입증되었습니다)!
설계 목표 (Design Targets)
- DDR3 PHY의 복잡도를 낮추고, 타이밍 클로저(timing closure)를 용이하게 하며, 디자인 LUT 사용량을 줄이기 위해 낮은 DDR 클럭 속도(< 125MHz)에서 동작.
- 여러 FPGA 벤더/툴체인 지원.
- 높은 성능 (클럭 속도 대비)의 순차적 읽기/쓰기 성능 달성.
- 버스트 기능이 있는 AXI-4 타겟 포트 지원.
- 상용 DDR3 코어(예: Xilinx MIG)보다 훨씬 작게 구현 (더 적은 FPGA LUT 사용).
- 오픈 소스이며, 무료로 사용 및 수정 가능.
주요 기능 (Features)
- INCR 버스트를 지원하는 32비트 AXI-4 타겟 포트.
- 최대 8개의 열린 로우(open rows)를 지원하여, 하나의 열린 로우 내에서 백투백 읽기/쓰기 버스트가 가능함.
- 메모리 컨트롤러 코어와 PHY 간의 표준화된 DFI 인터페이스.
- 사용 가능한 PHY: Xilinx 7 시리즈, Lattice ECP5
성능 / 면적 (Performance / Area)
순차적 버스트 접근에 대한 성능은 양호합니다. 동일한 유형(읽기 또는 쓰기)의 버스트는 이미 열려 있는 로우로 파이프라인 처리되기 때문입니다. 현재 읽기/쓰기 재정렬(re-ordering)/합병(coalescing) 기능은 없으므로, 무작위 읽기/쓰기 성능은 최적화되지 않을 수 있습니다 (이는 향후 릴리스에서 다루어질 수 있음).
Digilent Arty A7에서 100MHz로 동작 시 (최대 400MBytes/s의 대역폭 사용 가능), 순차적인 읽기/쓰기를 수행한 결과는 다음과 같습니다:

면적 측면에서는 Xilinx Artix 7 (XC7A35T)에서 코어(AXI-4 브리지로 연결된 작은 UART 포함)가 사용하는 면적은 다음과 같습니다:

참고할 점은, 동일한 프로젝트에 Xilinx MIG DDR3 컨트롤러를 사용했을 경우 FPGA LUT의 33%를 차지하는 반면, 이 코어는 9%만을 사용한다는 것입니다.
테스트 (Testing)
시뮬레이션으로 검증되었으며, 다음 FPGA 보드에서 실제 구동되었습니다:
- Digilent Arty A7 (Xilinx Artix + MT41K128M16JT-125)
- LambaConcept ECPIX-5 (Lattice ECP5 + MT41K256M16RE-125)
성능 및 오류 검사는 이 RAM Tester를 사용하여 수행되었습니다. 또한, 이 보드들은 DDR에 비디오 프레임 버퍼 접근으로 스트레스가 가해지는 동시에 Linux를 안정적으로 부팅할 수 있었습니다.
향후 과제
약점/개선 영역;
- ECP5 PHY는 최적화되지 않았습니다 - DQS 입력에서 캡처하는 대신 내부 클럭에 읽기 데이터 캡처를 맞추는 것에 의존합니다. 이는 테스트된 보드/클럭 속도에서는 안정적으로 작동하지만, 정말 수정이 필요합니다!
- AXI-4 WRAP 버스트 지원 - 이들은 종종 중요 워드를 먼저 가져오는 캐시 컨트롤러와 함께 사용됩니다.
- 읽기/쓰기 트래싱 성능 개선을 위해 코어 전면에 선택적 DDR 스케줄러 로직 추가 (재정렬 및 병합).
- PHY 모듈에는 튜닝 가능한 지연 시간이 있으므로, 통합 노력을 단순화하기 위해 시작 시 자동으로 튜닝되면 좋을 것입니다 (비록 이것이 LUT 사용량을 증가시키겠지만).
통합
이 코어를 FPGA 프로젝트에 통합하는 데 도움이 필요하면 다음으로 연락주세요:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기