저는 약 20년 정도 FPGA 관련된 일들을 해왔고, 대부분의 프로젝트에서 FPGA 내에 MCU를 포팅해서 진행했습니다. MCU를 FPGA 내에 포팅해서 사용하면 많은 장점이 있습니다. 외부에 별도로 MCU를 사용할 필요도 없고, MCU 파트와 LOGIC 파트로 나누어서 진행할 수도 있습니다.
저는 대부분의 FPGA(Spartan, Artix, Kintex, Virtex)에서 MCU를 포팅해서 사용했습니다. 기본적인 구조만 알면 대부분의 FPGA에 적용할 수 있습니다. 본 강의는 이러한 과정을 상세하게 설명하고 있습니다. 강의에선 FPGA 내에 MCU IP를 포팅해서 SOC(System On Chip)을 구현하는 방법을 설명합니다. 강의를 통해 FPGA로 프로그램하는 개발자분들의 스킬을 한 단계 업그레이드하길 바랍니다.
잠깐! ✋ MCU란?
마이크로컨트롤러 유닛(Micro Controller Unit)을 말해요. 단일 칩 내부에 프로세서, 메모리, 입출력 장치를 모두 갖춘 장치예요. 프로그래밍을 통해 제어나 연산 작업이 가능합니다. 자동차부터 가전제품, 장난감까지 넓은 분야에서 쓰이고 있어요. 특정 기능을 구현하기 위해 프로그래밍 과정을 거쳐야 해요.
본 강의는 모든 내용을 실습 보드(Arty A7-35T(100T), (Digilent 사))를 통해 직접 구현해 볼 수 있도록 소스를 제공합니다. 제공되는 소스는 현업에서 바로 사용할 수 있는 소스입니다. 저는 지난 15년 동안 이 솔루션을 모든 FPGA에 적용하여 진행하였습니다. 강의는 Xilinx의 Arty A7 보드를 기반으로 설명되어 있지만, Xilinx 사의 모든 FPGA에 적용할 수 있습니다. 강의에서 이해가 안 되는 부분은 인프런 커뮤니티 또는 제가 운영하는 카페를 통하여 질문을 올려주시면 답변해 드리도록 하겠습니다.
📢 수강 전 반드시 확인해주세요!
본 강의는 전자문서 형식으로 구성된 텍스트 강의입니다. 본 강의를 수강하시는 분들께는 무료 MCU IP를 비롯하여 강의에 있는 모든 소스 파일을 제공합니다.
강의 자료는 '섹션 0 - 자료 공유 링크 - 첨부파일'에서 다운받을 수 있습니다.
이런 분들께 추천해요 🙋♀️
Verilog로 FPGA를 설계한 경험이 있으신 분
C 언어를 이용하여 FW를 해보신 분
이런 걸 배워요 ✨
내용이 적지는 않습니다. 그러나 하나하나 이해해서 자신의 것으로 만든다면 향후 FPGA를 사용하는 일에 대부분 적용할 수 있을 것입니다 💪
System Block와 Bootloader 이해
MCU Memory 및 LOGIC 구현
Application FW 구현 및 응용
FW 다운로드를 위한 Windows Program 구현
상세 커리큘럼이 궁금하다면? 1개요 (5)2HW 구성(8)2.1 USB-JTAG를 이용하는 방법 (8) 2.2JTAG-HS3(HS2)를 이용하는 방법(9)2.3RS-232 커넥터(10)2.4Serial Flash 연결(10)3System Block(11)3.1Bootloader ROM(11)3.2Serial Flash(14)3.3Ext_Mem_SRAM(External Memory SRAM)(14)3.4FW_SRAM(14)3.5Int_Mem(Internal Memory)(14)3.6MCU Core(15)3.7LOGIC(15)3.8Register Map(15)4메모리 구성(16)4.1Ext_Mem_SRAM (External Memory SRAM)(15)4.2FW_SRAM(20)4.3Bootloader ROM(21)5Clock 구성(23)6Bootloader(26)6.1Sequence(26)6.2Memory Map(27)6.3코드 구현(29)6.3.1프로젝트 생성(29)6.4coe 파일 생성(35)6.5Bootloader 소스(36)6.5.1main()(36)6.5.2update_data()(38)7LOGIC 구현하기(40)7.1mcu_top(40)7.1.1mcu_core(40)7.1.2addr_map.v(42)7.1.3mcs_reg(45)7.2pwm_top(45)8Application fw(46)8.1프로젝트 생성(46)8.2프로젝트 빌드(51)8.3소스 분석(52)8.3.1main1.c(52)8.3.2ax_pwm.h(55)8.3.3ax_string.h(55)8.3.4al8051_func.h(56)8.3.5isp_reg.h(56)9Windows Application Program (Win_App)(57)9.1화면 구성(57)9.2App_fw download sequence(58)9.3pwm control protocol(62)9.3.1write pwm frequency(62)9.3.2write pwm duty(62)9.3.3read pwm frequency(63)9.3.4read pwm duty(63)10FPGA Configurtion file download(64)10.1프로젝트 환경 설정(64)10.2Configuration file download(64)11결과 확인(68)11.1pwm 확인(68)11.2버튼 확인(69)12UART Baudrate 변경(70)12.1UART Baudrate 설정(70)12.2Bootloader fw 변경(72)12.3Bootloader ROM 재생성(73)12.4mcuProtingTop.v 수정(75)12.5Application fw 수정(77)12.6결과 확인(78)13Application fw 에서 I2C 사용하기(81)13.1I2C Master Controller(81)13.1.1I2CTP – Timer Period Register(81)13.1.2I2CCR – Control and Status Register(83)13.1.3I2CSA – Slave Address Register(83)13.1.4I2CBUF – Receiver and Transmitter Register(84)13.2Logic 구성(84)13.2.1AL8051EX(84)13.2.2mcu_core.v(85)13.2.3mcu_top.v(86)13.2.4mcuPortingTop.v(87)13.2.5mcuPortingTop.xdc(87)13.3Application fw(88)13.4결과 확인(94)14W5500 고속 인터페이스 구현 (95)14.1시스템 블락 (96)14.2Logic 구현 (96)14.2.1clock (96)14.2.2fw_sram (98)14.2.3External memory (ext_sram) (99)14.2.4spi_sram (100)14.2.5Memory Map (101)14.2.6addr_map.v 수정 (102)14.2.7Bootloader fw 수정 (103)14.2.8mcs_reg 모듈 수정 (104)14.3W5500 SPI Timing (105)14.4SPI 인터페이스 구현 (106)14.4.1코드 구현 (106)14.4.2simulation (115)14.5Top Module 구현 (122)14.6Application fw 구현 (126)14.6.1외부 flash memory 사용하기 (125)14.6.2프로젝트 구성 (127)14.6.3flash api (129)14.6.4w5500 api (130)14.6.5main1.c (134) 14.6.6Build (137)14.7Windows Application Program (138)14.8결과 확인( 140)14.8.1Bitstream 다운로드( 143)14.8.2PC Network 환경 설정 (143)14.8.3Application fw 다운로드 (144)14.8.4전송 시간 측정( 148)14.9결론 (151) 15 참고자료 (152) 16 Revision History (153)
지식공유자 소개 ✒️
이력 사항
저는 20여 년 동안 대기업, 중소기업에서 개발자로 일해왔고 현재는 작은 기업을 운영하고 있습니다. CCTV용 ISP(Image Signal Processing) ASIC을 개발하였고 OLED 검사 장비, DAQ (Data Acquisition System) 등 FPGA를 이용한 많은 제품을 개발하였습니다. FPGA뿐만 아니라 FW 개발 (STM32, PIC32, AVR, ATMEGA 등), 회로 설계, Windows Program 등 많은 경험을 가지고 있습니다.