하드웨어

/

반도체

Verilog FPGA Program 3 (DDR Controller, Arty A7-35T)

강의을 통하여 FPGA를 이용한 DDR Controller를 구현할 수 있습니다.

(5.0) 수강평 5

수강생 104

중급자를 위해 준비한
[임베디드 · IoT, 반도체] 강의입니다.

이런 걸
배워요!

  • DDR Controller

  • Frame Buffer

실력 있는 Verilog 개발자에게 필요한
DDR Memory Controller 스킬! ✨

FPGA로 구현하는
DDR Memory Controller 🛠️

FPGA에는 많은 기능이 IP 형태로 제공되고 있습니다. 그중에서 영상 데이터를 처리하는 데 주로 사용되는 DDR Controller에 대해서 설명합니다.

DDR Controller를 구현하는
두 가지 방법 🤔

1. 데이터 시트를 보고 그대로 구현

  • 경력이 오래된 분들이 주로 사용하는 방법입니다.
  • 시스템이 복잡해지면 일일이 코드로 구현하는 일이 만만치가 않습니다. 그래서 필요한 부분만 구현해서 사용하는 경우가 많은데, 프로젝트가 바뀔 때마다 매번 다르게 구현해야 하는 어려움이 있습니다.

2. Xilinx 사에서 제공하는 IP로 구현

  • 범용으로 사용할 수 있는 IP입니다. 한번 사용법을 익혀 두면 크게 변경하지 않아도 여러 프로젝트에 사용할 수 있습니다.
  • 처음에 사용법을 익히는 과정이 만만치 않습니다. Xilinx 사에서 많은 문서와 샘플 코드를 제공하지만, 정보가 너무 많아 활용하기 어렵습니다.

저자가 DDR Controller를 구현하면서 이러한 많은 어려움을 경험하였습니다. 뭔가 필요한 부분만 정리된 하나의 문서가 있으면 좋지 않을까 하는 생각을 많이 했습니다. 처음에는 필요한 부분만 이해하고 개발을 진행해서 DDR을 read / write 해 보고, 점점 더 이해도를 높여가는 것이 효율적입니다. 먼저 전체적인 구조를 이해하고, 나중에 세부적인 내용들을 이해하는 것이 효과적입니다. 본서는 DDR Controller를 처음 접하는 개발자들도 쉽게 접근할 수 있도록 구성되어 있습니다.

DDR Memory는 영상 데이터 처리에 있어 아주 중요합니다. 그러나 전문가가 아니면 접근하기가 어렵고 또한 이러한 전문적인 내용을 다루는 자료가 거의 없는 것이 현실입니다. 본 강의는 DDR Memory Controller를 구현하는 모든 내용을 다루고 있습니다. 또한 DDR Controller를 이용하여 Frame Buffer를 구현하는 내용을 상세히 설명하고 있습니다.

💾 수강 전 확인해주세요!

  • 본 강의는 PDF 형태의 텍스트 강의로, 별도 영상을 제공하지 않습니다.
  • 강의에 설명된 모드 소스 코드를 제공하여 드립니다.
  • Digilent 사에서 판매하는 Arty A7 개발 보드에서 실습을 진행합니다.

강의 특징 ✨

#1.
DDR Controlle의
모든 것을 담았어요

DDR Memory Controller에 대한 내용을 다루는 문서는 거의 없습니다. 본 강의는 모든 과정을 상세하게 설명하여 드립니다. Memory IP를 생성하고 Simulation 하는 과정부터 범용으로 사용 가능한 DDR Memory Controller 구현, 영상 데이터 처리를 위한 Frame Buffer를 구현하는 내용까지 모든 과정을 설명하고 있습니다. 또한 소스 코드마다 simulation을 통하여 검증하고 동작을 이해할 수 있도록 구성되어 있습니다.

본 강의의 내용을 모두 이해한다면 DDR Controller를 구현하는 것뿐만 아니라, Verilog를 활용한 FPGA 구현의 실력 있는 개발자가 될 것입니다.

#2.
Verilog 실력을
업그레이드해 봐요

Verilog를 배우고자 하는 분들에게 DDR Memory Controller는 매우 좋은 스킬입니다. 많은 개발경력을 가지고 있는 사람들도 DDR Memory Controller를 접해보지 못한 분들이 많이 있습니다. Verilog를 한 단계 업그레이드 할 기회를 제공하여 드립니다.

#3.
실무에 적용 가능한
소스 코드를
제공해요

본 강의를 구매하시는 분들에게는 강의에 설명된 모든 소스를 제공하여 드립니다. 제공되는 소스는 강의를 제작하면서 처음부터 하나하나 코딩하고 검증된 자료들로 구성되어 있습니다. 또한 현업에서 바로 사용할 수 있는 코드들로 구성되어 있습니다. 본 강의를 통하여 DDR Controller의 마스터가 되시길 바랍니다.


학습 내용 📚

본 강의는 DDR Controller IP를 생성하는 과정과 생성된 IP가 어떻게 동작하는지 Simulation을 통하여 동작 과정을 이해하고, 생성된 IP를 이용하여 범용적으로 사용할 수 있는 DDR Controller를 설계합니다. 마지막으로 영상데이터 처리를 위한 Frame 버퍼를 구현하는 과정을 설명합니다.

본 강의는 오랫동안 ISP(Image Signal Processing) 개발을 진행했던 저자의 경험을 바탕으로 구성되었습니다. 본서의 내용들은 실무에 바로 적용할 수 있는 코드들입니다. 내용이 다소 어려운 부분들이 포함될 수 있지만, 이해되지 않는 부분들은 2-3번 정도 정독하시고, 코드들을 Simulation 하면서 동작 내용을 복습해보세요.

본 강의는 Digilent 사에서 판매하는 Arty A7 개발 보드에서 실습을 진행합니다. FPGA를 다루는 데 있어서 HW에 적용하고 그 결과를 확인하는 것은 매우 중요합니다. Simulation으로 구현하는 것은 한계가 있습니다. 반드시 HW에서 검증해야 합니다. (본서의 마지막 장에서 다루는 프레임 버퍼에 대한 내용은 적당한 HW를 찾지 못해서 Simulation으로만 검증을 진행하는 아쉬움이 있습니다. 추후 적당한 보드를 찾아서 HW 검증까지 진행할 수 있길 기대합니다)

1장은 전반적인 내용에 대한 개요입니다.

2장은 실습에 사용되는 Arty A7 보드에 대해서 설명합니다.

3장은 DDR Controller IP를 생성하는 방법과 User Interface Logic에 대해서 설명합니다.

4장은 생성된 DDR Controller IP Simulation을 통하여 동작 특성을 이해합니다. 이는 범용으로 사용가능한 DDR Controller를 구현하는데 매우 중요합니다.

5장은 범용으로 사용가능한 DDR Controller를 구현하고, 이를 이용하여 DDR Memory의 전 영역을 Read/Write 하는 것을 구현합니다. 또한 Bitstream을 생성해서 보드에서 결과를 확인합니다.

6장은 5장에서 구현한 범용 DDR Controller를 이용하여 영상 데이터 처리를 위한 Frame Buffer를 구현합니다.

7장은 v2.2에서 새롭게 추가된 내용입니다. Spartan6에서 DDR Memory Controller를 구현합니다. 툴은 ISE 14.7을 사용합니다.

8장은 v2.3에서 추가된 내용입니다. Memory Access 속도에 관한 내용을 살펴보고, 최대 속도를 구현하기 위한 내용을 다루게 됩니다.

9장은 v2.4에서 추가된 내용입니다. 16bits DDR Memory 2개를 사용하여 32Bits Interface를 구현합니다.

상세 커리큘럼 (목차)
  1. 개요
  2. HW 구성
    1. USB-JTAG를 이용하는 방법
    2. JTAG-HS2(or JTAG-HS3) 커넥터
  3. DDR Controller IP 생성
    1. 프로젝트 생성
    2. Memory IP 생성
    3. Memory IP 구조
    4. User Interface Block
    5. User Interface 신호
      1. Address/Command 관련 신호
      2. Write 관련 신호
      3. Read 관련 신호
      4. 기타 신호
    6. User Interface Timing
      1. Address/Command Timing
      2. Write Timing
      3. Read Timing
  4. Simulation
    1. Simulation 환경 설정
    2. Simulation
    3. Simulation 결과 확인
      1. init_calib_complete
      2. reset, clock
      3. Write Timing 분석
      4. Read Timing 분석
  5. User Interface Logic 구현
    1. 개요
      1. Write Timing 정의
      2. Read Timing 정의
      3. 코드 구조
    2. Write Module 구현
      1. mig7_write8 모듈 구현
      2. mig7_write8 모듈 simulation
      3. mig7_write 모듈 구현
      4. mig7_write 모듈 simulation
    3. Read Module 구현
      1. mig7_read8 모듈 구현
      2. mig7_read8 모듈 simulation
      3. mig7_read 모듈 구현
      4. mig7_read 모듈 simulation
    4. User Interface 모듈 구현 (ddr_test 모듈)
      1. Test Scenario
      2. Write Sequence
      3. Read Sequence
      4. ddr_test 모듈 구현
      5. ddr_test 모듈 simulation
    5. mig_top Module 구현
    6. Top Module 구현
    7. Top Module Simulation
    8. Bitstream 생성
    9. Bitstream 다운로드 & 확인
  6. Frame Buffer 구현
    1. 데이터 준비
    2. Image Decoder
      1. 코드 구현
      2. Simulation
    3. Frame Buffer 개요
    4. frame_write
      1. frame_write 모듈 구현
      2. frame_write 모듈 simulation
    5. frame_read
      1. frame_read 모듈 구현
      2. frame_read 모듈 simulation
    6. 영상 데이터를 이용한 Frame Buffer 확인
      1. image_dec.v
      2. mig_top_frame.v
      3. Arty35Top_frame.v
      4. tb_arty35Top_frame.v
      5. simulation
      6. 이미지 확인하기
  7. Spartan6 DDR Controller 구현
    1. 프로젝트 생성
    2. IP 생성
    3. 7.3 mcb review
    4. simulation을 통한 동작 확인
      1. calib_done
      2. c3_clk0, c3_rst0
      3. write timing
      4. read timing
    5. 코드 구현
      1. mcb_write_128x16
      2. simulation mcb_write_128x16
      3. mcb_write
      4. simulation mcb_write
      5. mcb_read_128x16
      6. simulation mcb_read_128x16
      7. mcb_read
      8. simulation mcb_read
    6. 전 영역 read/write 구현
      1. mcb_test
      2. simulation mcb_test
      3. tb_mcb_top
    7. 결론
  8. DDR3 Memory Access 속도
    1. mig7_write8 수정
    2. mig7_read8 수정
    3. mig7_write_top 수정
    4. mig7_read_top 수정
    5. ddr_test 수정
    6. define.v 수정
    7. MIG7 Memory Interface IP 수정
    8. clk_gen 수정
    9. Arty35Top.v 수정
    10. Bitstream 생성 및 결과 확인 216
  9. 32Bits Interface 구현
    1. 프로젝트 생성
    2. Memory IP 생성
    3. Simulation을 통한 생성된 IP 동작 이해
      1. clock 신호
      2. init_calib_complete
      3. Memory read / write
    4. User Interface 구현
      1. mig32_read8.v mig32_write8.v 수정
      2. mig32_read_top, mig32_write_top 수정
      3. ddr32_test 수정
    5. mig32_top 모듈 simulation
    6. 결론
  10. 참고 자료
  11. Revision History

이전 강의 함께 보기 👀


예상 질문 Q&A 💬

Q. Verilog 초보자들도 가능한가요?

Verilog에 대한 기본적인 지식이 있어야 합니다. 관련 지식이 없으면 어려울 수 있습니다.

Q. 준비 사항이 있나요?

코드를 구현하고 검증하기 위하여 Arty A7 보드를 사용합니다. 보드가 준비되면 구현한 내용을 직접 확인해 볼 수 있습니다. 그러나 모든 소스를 simulation 할 수 있게 구성되어 있어서 먼저 강의를 듣고 보드가 준비되면 나중에 검증해도 됩니다.

Q. 프로그램 툴은 무엇을 사용하나요?

Xilinx 사의 vivado 2018.3을 사용합니다. 2018.3 이후 버전이면 가능합니다.


지식공유자 소개 ✒️

저는 20여 년 동안 대기업, 중소기업에서 개발자로 일해왔고 현재는 작은 기업을 운영하고 있습니다. CCTV용 ISP(Image Signal Processing) ASIC을 개발하였고 OLED 검사 장비, DAQ (Data Acquisition System) 등 FPGA를 이용한 많은 제품을 개발하였습니다. FPGA뿐만 아니라 FW 개발 (STM32, PIC32, AVR, ATMEGA 등), 회로 설계, Windows Program 등 많은 경험을 갖고 있습니다. 그동안 제가 쌓아온 폭넓은 경험을 바탕으로 여러분의 학습에 도움이 되기를 소망합니다.


이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • FPGA를 이용한 영상 데이터 처리

  • Frame Buffer 구현

  • Verilog 배우고 싶은신 분

  • FPGA 배우고 싶으신 분

선수 지식,
필요할까요?

  • Verilog

  • vivado

  • FPGA

안녕하세요
alex입니다.

저는 지난 20여년 동안 대기업, 중소기업에서 개발자로 일해왔고

현재는 작은 기업의 대표로 있습니다.

주요 경력사항은

  • Verilog HDL을 이용한 FPGA 설계

    • CCTV용 ISP ASIC 개발 (약 10년)

    • OLED Display 검사장비 개발 (약 3년)

    • FPGA를 이용한 장비 개발

  • MCU FW

    • STM32

    • PIC32

    • AVR, ATMEGA

    • DSP (TI)

  • Windows Application Program

    • Visual Studio MFC, C++

입니다.

커리큘럼

전체

254

수업 자료

가 제공되는 강의입니다.

강의 게시일: 2022년 12월 08일
마지막 업데이트일: 2024년 07월 06일

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!