인프런 영문 브랜드 로고
인프런 영문 브랜드 로고
하드웨어

/

반도체

Verilog FPGA Program 1 (Arty A7-35T)

Verilog를 이용한 FPGA 구현

(5.0) 수강평 14개

수강생 178명

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

이런 걸
배워요!

  • Verilog RTL 설계

  • FPGA 설계

FPGA에 관심 있으셨다고요?
그렇다면 Verilog 하세요! 😁

베릴로그(Verilog)?

C 언어와 문법이 비슷한 베릴로그는 전자 회로 및 시스템에 이용되는 하드웨어 기술 언어(HDL)예요. 회로, 설계, 검증, 구현 등 다양한 용도로 이용돼요.

20년 이상 경력자가 알려주는 FPGA 설계 📑

Verilog를 이용하여 FPGA를 구현하는 것에 관심 있는 개발자분들 많죠? 하지만 이걸 자세히 설명한 강의를 찾는 건 매우 어려워요. 이제 20년 이상 현직자가 개발에 사용된 내용을 정리한 강의를 만나보세요! 강의 내용이 어렵게 느껴질 수 있지만, 3~4번 정도 정독하고 실습하다 보면, FPGA 개발자로 성장하기 위한 좋은 길잡이가 되어 줄 거예요. 

본 강의에서는 Verilog HDL을 이용하여 FPGA를 구현하는 내용을 자세히 다룹니다. Verilog 코드를 구현하고, Simulation을 통해서 결과를 확인하고, 최종적으로 Arty A7 보드에 구현한 내용을 다운로드해서 결과를 확인하는 모든 과정을 학습합니다. 또한, Xilinx 사에서 제공하는 IP(clock 관련, Memory 관련)도 다룹니다. 본 강의에서 설명된 내용을 이해하고 자신만의 코딩 방법을 익힌다면 FPGA 설계에 실력 있는 개발자가 될 것입니다.

📢 수강 전 반드시 확인해주세요!

  • 본 강의는 전자문서 형식으로 구성된 텍스트 강의입니다. 강의를 수강하시는 분들에게는 강의에 설명되어 있는 모든 소스 파일을 제공합니다. 강의는 추후 동영상으로 제작 예정입니다.
  • 사용하는 Tool은 vivado 2018.3이고, 실습에 사용되는 보드는 Arty A7-35T(100T) 입니다.
  • 강의 자료는 '섹션 0 - 자료 공유 링크 - 첨부파일'에서 다운받을 수 있습니다.

이런 걸 배워요 📚

vivado 툴의 사용법

Verilog 코딩

Tech bench 만들고
Simulation
하기

결과를 보드에
다운로드해서 확인하기


지식공유자의 한마디 🙋‍♀️

저는 20년 정도 FPGA를 통하여 개발을 진행해 왔습니다. ASIC도 만들어 출시한 경험이 있습니다. 그러나 아직도 FPGA의 세계를 완전히 이해하지는 못했습니다. 그만큼 FPGA 세계는 넓습니다. 툴에 대한 내용, HW적인 부분, Verilog에 대한 내용 등 많은 것을 알고 있어야 합니다. 지금까지 일하면서 느낀 것은, Verilog 나 FPGA를 잘 다루기 위해서는 자신만의 프로그램 포맷(코딩 룰)을 가지고 있어야 합니다. 본 강의에서는 이 부분을 자세히 설명합니다. 강의에서 설명된 내용을 익히고 자신만의 포맷으로 만들어 가시길 바랍니다.

본 강의는 Verilog 문법을 어느 정도 알고 있고, HW적인 내용을 이해하는 분들을 대상으로 합니다. Verilog HDL이 C언어와 비슷해서 C언어에 대해서 알고 있으면 도움이 됩니다. 또한 본 강의는 최종 결과물을 보드(Arty A7, Digilent 사)에 다운로드해서 결과를 확인합니다. Verilog HDL은 Simulation에서 결과를 확인하는 것으로 끝나면 안 됩니다. Verilog HDL은 반드시 FPGA 보드에 다운로드해서 동작을 확인해야 합니다. 본 강의를 수강하시는 분들은 먼저 내용을 보시고, 반드시 실습 보드를 구매해서 결과를 확인하시는 것을 권해 드립니다.

강의에서 이해가 안 되는 부분은 인프런 커뮤니티 또는 제가 운영하는 카페를 통하여 질문을 올려주시면 답변해 드리도록 하겠습니다.


강의 특징 ✨

본 강의의 구성은 아래와 같습니다.

  • 코드 구현
  • Test bench를 이용한 Simulation 검증
  • 보드 검증

vivado 2018.3 버전을 통하여 각 과정이 어떻게 진행되는지 상세하게 설명해 드립니다.

실습내용은 아래와 같습니다.

  1. counter를 이용한 LED on/off
  2. SPI Master 구현
  3. SPI Slave 구현
  4. SPI Master / Slave 통신 구현 및 보드 검증
  5. Xilinx IP -1 (Clock Generator)
  6. Xilinx IP - 2 (Memory Generator)
  7. UART Controller 구현
  8. I2C Controller 구현
  9. NRZL Decoder 구현
  10. FMC Interface 구현

첫 번째 실습 내용은 counter입니다. counter는 단순하지만, 실제로 많이 사용되는 모듈입니다. counter를 설계하고 Test bench를 만들어 구현한 코드가 제대로 동작하는지 Simulation을 진행하고, 최종적으로 보드에 적용해서 led on/off 를 통하여 결과를 확인합니다.

두 번째 실습 주제는 SPI 통신입니다. SPI를 선택한 이유는, 여러 가지 인터페이스 중에 비교적 어렵지 않게 구현할 수 있고 실제로 많이 사용되는 인터페이스이기 때문입니다. 먼저 SPI Master를 구현하고 뒤에 SPI Slave를 구현합니다. 그리고 Master와 Slave의 통신을 구현하고 보드 상에서 제대로 동작하는지 확인합니다.

세번째 내용은 Xilinx에서 제공하는 IP 중에 많이 사용하고 어렵지 않게 접근할 수 있는 Clock과 Memory를 설명합니다.

네번째 내용은 UART 통신입니다. Uart Controller를 구현하고, PC와의 통신으로 검증까지 진행합니다.

다섯번째 실습 주제는 I2C 통신입니다. I2C 통신은 간단하게 보이지만 코드로 구현하는 것은 결코 쉽지 않습니다. SPI에 비해 2~3배의 난이도가 있습니다. I2C Master, Slave를 코드로 구현한다면 다른 인터페이스들도 어렵지 않게 구현할 수 있습니다. 코드를 구현하기 전에 스펙을 어떻게 잡고, SM(State Machine)을 어떻게 설계할 것인지에 대해서 자세하게 다룹니다. 구현된 I2C Controller는 보드에서 동작을 확인합니다.

여섯번째 내용은 v2.1에 새롭게 추가된 내용입니다. NRZL(Non-Return Zero Level) Decoder를 구현합니다. 특히 FIFO를 설계하고 사용하는 방법에 대해서 자세히 설명합니다. FIFO는 많은 분야에서 사용되는 매우 중요한 IP입니다. 본 장을 통하여 FIFO를 설계하고 구현하는 내용을 이해할 수 있습니다.

일곱번째 내용은 v2.3에 추가된 내용입니다. FMC(Flexible Memory Controller) Interface를 구현합니다. 특히 2개 이상의 clock을 사용할 때 흔히 발생하는 Timing Violation을 어떻게 해결하는지에 대한 내용이 포함되어 있습니다.

상세 커리큘럼이 궁금하다면?
  1. 개요
  2. HW 구성
    1. USB-JTAG를 이용한 방법
    2.  JTAG-HS3을 이용한 방법
  3. Counter를 이용한 LED 제어
    1. 기능정의
    2. 프로젝트 생성
    3. 프로젝트 화면 구성
    4. 소스 코드 추가
    5. Text Editor 설정
    6. 코드 구현
    7. XDC 구현
    8. Generate Bitstream
    9. Download Bitstream
    10. 결과 확인
  4. Simulation
    1. Simulation source file 추가
    2. tb_led_counter.v 코드 구현
    3. Simulation 진행
    4. Simulation 결과
  5. Spi Master 구현
    1. 스펙
    2. 프로젝트 생성
    3. 소스 코드 추가
    4. 코드 구현
      1. Port 정의
      2. State 정의
      3. 코드 구현
      4. 타이밍 다이어그램
    5. Simulation
      1. Test bench 구현
      2. Simulation 결과 확인
  6. Spi Slave 구현
    1. 스펙
    2. 소스 코드 추가
    3. 코드 구현
      1. Port 정의
      2. State 정의
      3. 코드 구현
    4. Simulation
      1. Test bench 구현
      2. Simulation 결과 확인
  7. Spi 통신 구현
    1. 버튼 노이즈 제거
      1. 버튼 회로
      2. 코드 구현
      3. Simulation
    2. SPI Task 구현
      1. Port 정의
      2. 버튼 노이즈 제거
      3. State 정의
      4. 코드 구현
    3. Simulation
      1. Test bench 구현
      2. Simulation 결과 확인
    4. Bitstream 생성, 다운로드
  8. Xilinx IP 사용
    1. Clock 생성
    2. Clock IP Test
      1. 스펙
      2. 코드 구현
      3. xdc 파일 
      4. Bitstream 생성, 다운로드
    3. Memory 생성
      1. Block Memory Generator
    4. Memory Test
      1. Single Port RAM 
      2. Simple Dual Port RAM
      3. 그 외의 메모리
  9. UART Controller 구현
    1. Uart Tx 구현
      1. 코드 구현
      2. Simulation
    2. Uart Rx 구현
      1. FIFO 생성
      2. 코드 구현
      3. Simulation
    3. Uart Controller 구현
    4. LoopBack 구현
      1. 구성
      2. 코드 구현
      3. Simulation
      4. Bitstream 생성
      5. 결과 확인
  10. I2C Controller 구현
    1. I2C Controller 스펙
      1. Start, Stop Condition
      2. 8bits 데이터 전송
      3. Slave ID
      4. I2C Write 데이터 구조
      5. I2C Read 데이터 구조
    2. I2C Master 구현
      1. i2c_master write신호 분석
      2. i2c_master read신호 분석
      3. i2c_master 코드 구현
      4. i2c_master simulation
      5. 결과 확인
      6. i2c_master8x8 구현
      7. i2c_master8x8 simulation
    3. I2C Slave 구현
      1. I2C Slave 신호 분석
      2. i2c_slave8x8 코드 구현
      3. i2c_reg8x8 구현
      4. i2c_slave8x8, i2c_reg8x8 simulation
    4. I2C TASK
      1. i2c_task 코드 구현
      2. 결과 확인
  11. NRZL Decoder 구현
    1. 시스템 개요
    2. 코드 구현
      1. 프로젝트 생성
      2. 코드 구현
      3. data_counter 구현
      4. noise_reduction 구현
      5. data_encoder 구현
      6. nrzlDecTop 구현
      7. xdc 구현
      8. Generate Bitstream & 다운로드, 확인
      9. 결론
  12. FMC Interface 구현
    1. FMC Timing
    2. 코드 구현
      1. 프로젝트 생성
      2. fmc_model.v
      3. simulation fmc_model
      4. fmc_interface.v
      5. sys_host.v
      6. spram_32x8192
      7. simulation fmc_interface
      8. fmc_top.v
      9. fmc_top.xdc
    3. Bitstream 생성
    4. Timing 오류 해결
    5. 보드 다운로드 및 결과 확인
    6. 보드 다운로드 및 결과 확인
  13. Revision Histrory (283)

예상 질문 Q&A 💬

Q. 강의를 듣는 대상자는 누구인가요?

Verilog 문법을 어느 정도(초급) 알고 있고, HW에 대한 기본지식을 가지고 있어야 합니다.

Q. 강의를 듣기 위해서 준비해야 할 사항이 있나요?

강의는 실습 보드(Arty A7 -35T or 100T, Digilent 사 제품)에서 진행됩니다만 보드가 준비되지 않았다면 먼저 강의를 듣고, 강의에 설명된 내용대로 (코딩 및 Simulation) 진행 후 추후에 보드가 준비되면 실습을 진행하시면 됩니다. 또한 보드에 다운로드하기 위하여 JTAG-HS2(or HS3)를 사용합니다.

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

본 강의는 Xilinx 사의 FPGA를 대상으로 합니다. SW 툴은 vivado 2018.3 버전을 사용합니다. sw 설치에 대한 내용은 포함되어 있지 않습니다. 강의 수강 전에 sw tool(vivado 2018.3 or 이후)을 설치해 주시길 바랍니다.


지식공유자 소개 ✒️

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


이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • FPGA에 관심 있으신 분

  • Verilog에 관심 있으신 분

  • Verilog 레벨업을 원하시는 분

  • FPGA 레벨업을 원하시는 분

선수 지식,
필요할까요?

  • Verilog HDL

  • FPGA

안녕하세요
alex입니다.

수강생 수

1,412

수강평 수

48

강의 평점

4.8

강의 수

17

저는 지난 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++

입니다.

커리큘럼

전체

330개

수업 자료

가 제공되는 강의입니다.

강의 게시일: 
마지막 업데이트일: 

수강평

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