FPGA MCU 포팅,
내 기술로 만들어서 레벨업 해요! ✨
FPGA 개발자 성장의 기회,
MCU 포팅 🔦
저는 약 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)
2 HW 구성 (8)
2.1 USB-JTAG를 이용하는 방법 (8)
2.2 JTAG-HS3(HS2)를 이용하는 방법 (9)
2.3 RS-232 커넥터 (10)
2.4 Serial Flash 연결 (10)
3 System Block (11)
3.1 Bootloader ROM (11)
3.2 Serial Flash (14)
3.3 Ext_Mem_SRAM(External Memory SRAM) (14)
3.4 FW_SRAM (14)
3.5 Int_Mem(Internal Memory) (14)
3.6 MCU Core (15)
3.7 LOGIC (15)
3.8 Register Map (15)
4 메모리 구성 (16)
4.1 Ext_Mem_SRAM (External Memory SRAM) (15)
4.2 FW_SRAM (20)
4.3 Bootloader ROM (21)
5 Clock 구성 (23)
6 Bootloader (26)
6.1 Sequence (26)
6.2 Memory Map (27)
6.3 코드 구현 (29)
6.3.1 프로젝트 생성 (29)
6.4 coe 파일 생성 (35)
6.5 Bootloader 소스 (36)
6.5.1 main() (36)
6.5.2 update_data() (38)
7 LOGIC 구현하기 (40)
7.1 mcu_top (40)
7.1.1 mcu_core (40)
7.1.2 addr_map.v (42)
7.1.3 mcs_reg (45)
7.2 pwm_top (45)
8 Application fw (46)
8.1 프로젝트 생성 (46)
8.2 프로젝트 빌드 (51)
8.3 소스 분석 (52)
8.3.1 main1.c (52)
8.3.2 ax_pwm.h (55)
8.3.3 ax_string.h (55)
8.3.4 al8051_func.h (56)
8.3.5 isp_reg.h (56)
9 Windows Application Program (Win_App) (57)
9.1 화면 구성 (57)
9.2 App_fw download sequence (58)
9.3 pwm control protocol (62)
9.3.1 write pwm frequency (62)
9.3.2 write pwm duty (62)
9.3.3 read pwm frequency (63)
9.3.4 read pwm duty (63)
10 FPGA Configurtion file download (64)
10.1 프로젝트 환경 설정 (64)
10.2 Configuration file download (64)
11 결과 확인 (68)
11.1 pwm 확인 (68)
11.2 버튼 확인 (69)
12 UART Baudrate 변경 (70)
12.1 UART Baudrate 설정 (70)
12.2 Bootloader fw 변경 (72)
12.3 Bootloader ROM 재생성 (73)
12.4 mcuProtingTop.v 수정 (75)
12.5 Application fw 수정 (77)
12.6 결과 확인 (78)
13 Application fw 에서 I2C 사용하기 (81)
13.1 I2C Master Controller (81)
13.1.1 I2CTP – Timer Period Register (81)
13.1.2 I2CCR – Control and Status Register (83)
13.1.3 I2CSA – Slave Address Register (83)
13.1.4 I2CBUF – Receiver and Transmitter Register (84)
13.2 Logic 구성 (84)
13.2.1 AL8051EX (84)
13.2.2 mcu_core.v (85)
13.2.3 mcu_top.v (86)
13.2.4 mcuPortingTop.v (87)
13.2.5 mcuPortingTop.xdc (87)
13.3 Application fw (88)
13.4 결과 확인 (94)
14 W5500 고속 인터페이스 구현 (95)
14.1 시스템 블락 (96)
14.2 Logic 구현 (96)
14.2.1 clock (96)
14.2.2 fw_sram (98)
14.2.3 External memory (ext_sram) (99)
14.2.4 spi_sram (100)
14.2.5 Memory Map (101)
14.2.6 addr_map.v 수정 (102)
14.2.7 Bootloader fw 수정 (103)
14.2.8 mcs_reg 모듈 수정 (104)
14.3 W5500 SPI Timing (105)
14.4 SPI 인터페이스 구현 (106)
14.4.1 코드 구현 (106)
14.4.2 simulation (115)
14.5 Top Module 구현 (122)
14.6 Application fw 구현 (126)
14.6.1 외부 flash memory 사용하기 (125)
14.6.2 프로젝트 구성 (127)
14.6.3 flash api (129)
14.6.4 w5500 api (130)
14.6.5 main1.c (134)
14.6.6 Build (137)
14.7 Windows Application Program (138)
14.8 결과 확인( 140)
14.8.1 Bitstream 다운로드( 143)
14.8.2 PC Network 환경 설정 (143)
14.8.3 Application 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 등 많은 경험을 가지고 있습니다.