Thumbnail
하드웨어 반도체

Verilog FPGA Program 3 (DDR Controller, Arty A7-35T) 대시보드

(5)
4개의 수강평 ∙  94명의 수강생
110,000원

월 22,000원

5개월 할부 시
지식공유자: alex
총 208개 수업
수강기한: 
무제한
수료증: 발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변이 제공되는 강의입니다
폴더에 추가 공유

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

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

✍️
이런 걸
배워요!
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 검증까지 진행할 수 있길 기대합니다)

본 강의의 마지막 부분은 v2.2에서 새롭게 추가되었습니다. ISE14.7 툴에서 Spartan6 DDR Memory Controller를 구현하는 내용입니다. 툴이나 FPGA가 바뀌어도 Memory Controller를 구현할 수 있는 스킬을 배우게 됩니다.

상세 커리큘럼 (목차)
  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. 참고 자료

이전 강의 함께 보기 👀


예상 질문 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 입니다.
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++

입니다.

커리큘럼 총 208 개
이 강의는 수업 노트, 첨부 파일이 제공됩니다. 미리보기를 통해 콘텐츠를 확인해보세요.
섹션 1. HW 구성
HW 구성 - 0
HW 구성 - 1
HW 구성 - 2
HW 구성 - 3
섹션 2. DDR Controller IP 생성
DDR Controller IP 생성 - 0
DDR Controller IP 생성 - 1
DDR Controller IP 생성 - 2
DDR Controller IP 생성 - 3
DDR Controller IP 생성 - 4
DDR Controller IP 생성 - 5
DDR Controller IP 생성 - 6
DDR Controller IP 생성 - 7
DDR Controller IP 생성 - 8 미리보기 DDR Controller IP 생성 - 9 미리보기
DDR Controller IP 생성 - 10
DDR Controller IP 생성 - 11
DDR Controller IP 생성 - 12
DDR Controller IP 생성 - 13
DDR Controller IP 생성 - 14
DDR Controller IP 생성 - 15
DDR Controller IP 생성 - 16
DDR Controller IP 생성 - 17
DDR Controller IP 생성 - 18
DDR Controller IP 생성 - 19 미리보기
DDR Controller IP 생성 - 20
DDR Controller IP 생성 - 21
DDR Controller IP 생성 - 22
DDR Controller IP 생성 - 23 미리보기
DDR Controller IP 생성 - 24
섹션 3. Simulation
Simulation - 0
Simulation - 1
Simulation - 2
Simulation - 3
Simulation - 4
Simulation - 5
Simulation - 6
Simulation - 7 미리보기 Simulation - 8 미리보기
Simulation - 9
Simulation - 10
섹션 4. User Interface Logic 구현
User Interface Logic 구현 - 0 미리보기 User Interface Logic 구현 - 1 미리보기
User Interface Logic 구현 - 2
User Interface Logic 구현 - 3 미리보기 User Interface Logic 구현 - 4 미리보기
User Interface Logic 구현 - 5
User Interface Logic 구현 - 6
User Interface Logic 구현 - 7
User Interface Logic 구현 - 8
User Interface Logic 구현 - 9
User Interface Logic 구현 - 10
User Interface Logic 구현 - 11 미리보기
User Interface Logic 구현 - 12
User Interface Logic 구현 - 13 미리보기
User Interface Logic 구현 - 14
User Interface Logic 구현 - 15
User Interface Logic 구현 - 16
User Interface Logic 구현 - 17
User Interface Logic 구현 - 18
User Interface Logic 구현 - 19
User Interface Logic 구현 - 20
User Interface Logic 구현 - 21
User Interface Logic 구현 - 22
User Interface Logic 구현 - 23
User Interface Logic 구현 - 24
User Interface Logic 구현 - 25
User Interface Logic 구현 - 26
User Interface Logic 구현 - 27 미리보기 User Interface Logic 구현 - 28 미리보기
User Interface Logic 구현 - 29
User Interface Logic 구현 - 30
User Interface Logic 구현 - 31
User Interface Logic 구현 - 32
User Interface Logic 구현 - 33
User Interface Logic 구현 - 34
User Interface Logic 구현 - 35
User Interface Logic 구현 - 36
User Interface Logic 구현 - 37
User Interface Logic 구현 - 38
User Interface Logic 구현 - 39
User Interface Logic 구현 - 40
User Interface Logic 구현 - 41
User Interface Logic 구현 - 42
User Interface Logic 구현 - 43
섹션 5. Frame Buffer 구현
Frame Buffer 구현 - 0 미리보기
Frame Buffer 구현 - 1
Frame Buffer 구현 - 2
Frame Buffer 구현 - 3
Frame Buffer 구현 - 4
Frame Buffer 구현 - 5
Frame Buffer 구현 - 6 미리보기 Frame Buffer 구현 - 7 미리보기 Frame Buffer 구현 - 8 미리보기
Frame Buffer 구현 - 9
Frame Buffer 구현 - 10
Frame Buffer 구현 - 11
Frame Buffer 구현 - 12
Frame Buffer 구현 - 13
Frame Buffer 구현 - 14
Frame Buffer 구현 - 15
Frame Buffer 구현 - 16 미리보기
Frame Buffer 구현 - 17
Frame Buffer 구현 - 18 미리보기
Frame Buffer 구현 - 19
Frame Buffer 구현 - 20
Frame Buffer 구현 - 21
Frame Buffer 구현 - 22
Frame Buffer 구현 - 23
Frame Buffer 구현 - 24
Frame Buffer 구현 - 25
Frame Buffer 구현 - 26
Frame Buffer 구현 - 27
Frame Buffer 구현 - 28 미리보기
Frame Buffer 구현 - 29
Frame Buffer 구현 - 30
Frame Buffer 구현 - 31
섹션 6. Spartan6 DDR Controller 구현
Spartan6 DDR Controller 구현 - 0 미리보기 Spartan6 DDR Controller 구현 - 1 미리보기 Spartan6 DDR Controller 구현 - 2 미리보기
Spartan6 DDR Controller 구현 - 3
Spartan6 DDR Controller 구현 - 4
Spartan6 DDR Controller 구현 - 5
Spartan6 DDR Controller 구현 - 6
Spartan6 DDR Controller 구현 - 7
Spartan6 DDR Controller 구현 - 8
Spartan6 DDR Controller 구현 - 9
Spartan6 DDR Controller 구현 - 10
Spartan6 DDR Controller 구현 - 11
Spartan6 DDR Controller 구현 - 12
Spartan6 DDR Controller 구현 - 13
Spartan6 DDR Controller 구현 - 14
Spartan6 DDR Controller 구현 - 15
Spartan6 DDR Controller 구현 - 16
Spartan6 DDR Controller 구현 - 17
Spartan6 DDR Controller 구현 - 18
Spartan6 DDR Controller 구현 - 19
Spartan6 DDR Controller 구현 - 20
Spartan6 DDR Controller 구현 - 21
Spartan6 DDR Controller 구현 - 22
Spartan6 DDR Controller 구현 - 23
Spartan6 DDR Controller 구현 - 24
Spartan6 DDR Controller 구현 - 25
Spartan6 DDR Controller 구현 - 26
Spartan6 DDR Controller 구현 - 27
Spartan6 DDR Controller 구현 - 28
Spartan6 DDR Controller 구현 - 29
Spartan6 DDR Controller 구현 - 30
Spartan6 DDR Controller 구현 - 31
Spartan6 DDR Controller 구현 - 32
Spartan6 DDR Controller 구현 - 33
Spartan6 DDR Controller 구현 - 34
Spartan6 DDR Controller 구현 - 35
Spartan6 DDR Controller 구현 - 36
Spartan6 DDR Controller 구현 - 37
Spartan6 DDR Controller 구현 - 38
Spartan6 DDR Controller 구현 - 39
Spartan6 DDR Controller 구현 - 40
Spartan6 DDR Controller 구현 - 41
Spartan6 DDR Controller 구현 - 42
Spartan6 DDR Controller 구현 - 43
Spartan6 DDR Controller 구현 - 44
Spartan6 DDR Controller 구현 - 45
Spartan6 DDR Controller 구현 - 46
Spartan6 DDR Controller 구현 - 47 미리보기 Spartan6 DDR Controller 구현 - 48 미리보기 Spartan6 DDR Controller 구현 - 49 미리보기 Spartan6 DDR Controller 구현 - 50 미리보기 Spartan6 DDR Controller 구현 - 21 미리보기 Spartan6 DDR Controller 구현 - 52 미리보기
Spartan6 DDR Controller 구현 - 53
Spartan6 DDR Controller 구현 - 54
Spartan6 DDR Controller 구현 - 55
Spartan6 DDR Controller 구현 - 56
Spartan6 DDR Controller 구현 - 57
Spartan6 DDR Controller 구현 - 58
Spartan6 DDR Controller 구현 - 59
Spartan6 DDR Controller 구현 - 60
Spartan6 DDR Controller 구현 - 61
Spartan6 DDR Controller 구현 - 62
Spartan6 DDR Controller 구현 - 63
Spartan6 DDR Controller 구현 - 64
Spartan6 DDR Controller 구현 - 65
Spartan6 DDR Controller 구현 - 66
Spartan6 DDR Controller 구현 - 67
Spartan6 DDR Controller 구현 - 68
Spartan6 DDR Controller 구현 - 69
Spartan6 DDR Controller 구현 - 70
Spartan6 DDR Controller 구현 - 71
Spartan6 DDR Controller 구현 - 72
Spartan6 DDR Controller 구현 - 73
Spartan6 DDR Controller 구현 - 74
Spartan6 DDR Controller 구현 - 75
Spartan6 DDR Controller 구현 - 76
Spartan6 DDR Controller 구현 - 77
Spartan6 DDR Controller 구현 - 78
Spartan6 DDR Controller 구현 - 79
Spartan6 DDR Controller 구현 - 80
Spartan6 DDR Controller 구현 - 81
Spartan6 DDR Controller 구현 - 82
섹션 7. 기타
기타 - 0
기타 - 1
기타 - 2
강의 게시일 : 2022년 12월 08일 (마지막 업데이트일 : 2023년 10월 25일)
수강평 총 4개
수강생분들이 직접 작성하신 수강평입니다.
5
4개의 수강평
5점
4점
3점
2점
1점
VIEW 추천 순 최신 순 높은 평점 순 낮은 평점 순 평점 순 높은 평점 순 낮은 평점 순
soi897 thumbnail
5
DDR controller를 쓰려고 해 봤는데, Xilinx에서 제공하는 공식 User Guide는 수백 페이지나 되는데다가 싹 다 영어여서 읽기 매우 힘들었습니다. 거기다 IP 구성할 때 설정해야 할 옵션이 너무 많아서 제대로 활용하기 어려웠습니다. 하지만 이 강의의 도움을 받으신다면 설계 능력을 보다 쉽게 함양할 수 있습니다. 이 강의는 IP를 어떻게 구성하면 좋을지/옵션은 어떻게 선택하면 좋을지부터 차근차근 자세히 알려 주는 강의입니다. 더 나아가 User Interface 로직을 추가하는 방법까지 알려 주기 때문에, 응용하는 데 무리가 없습니다. 메모리 컨트롤러 IP를 실무에 활용하고자 하시는 분들 / 기초를 쌓고 싶으신 분들에게 이 강의를 추천드립니다.
2022-12-17
지식공유자 alex
수강평 감사드립니다. 저도 오랫동안 FPGA를 다루어 보았지만, DDR Controller를 구현하는 것이 너무도 어려웠고, 무엇보다 어떻게 시작해야 할지 막막했었습니다. 본강의는 이러한 고민을 가졌던 경험을 바탕으로 만들었습니다. FPGA를 조금만 다뤄보신 분이라면 누구나 ddr controller를 구현하고 실무에서 바로 사용할 수 있도록 구성하였습니다. 본 강의을 통하여 실무에 많은 도움이 되시길 바랍니다. 감사합니다~!!
2022-12-17
appleid7133 thumbnail
5
많은 도움이 됨
2023-06-01
지식공유자 alex
도움이 되셨다니 감사합니다. 오늘 하루도 즐거운 시간 되세요. ~!!
2023-06-01
kimjw0319 thumbnail
5
잘 정리된 내용이네요
2024-01-30
정하늘 thumbnail
5
MCU 할 때는 RAM에 대해 (요즘 자원이 풍부해서)큰 고민 없이 했었습니다. 그런데 FPGA나 Zynq를 하면서 HW공부하다 보니 RAM에 대한 고민을 하게 되면서 어려움을 많이 느꼈는데, 이 강의가 든든한 힘이 되었습니다. 계속 좋은 강의 자료 부탁드립니다~!
2023-04-20
지식공유자 alex
수강평 감사드립니다. MCU 환경과 FPGA 개발 환경은 많이 다른 것 같습니다. 어쩌면 딴세상일지 모르지요 ㅎ 강의 통해 도움되셨다니 감사합니다. 행복한 개발자, 능력있는 개발자 되시길 바랍니다. 감사합니다 ~!!
2023-04-20