FPGA MCU Porting Update
FPGA MCU Porting Update
Title: FPGA MCU Porting Update (v1.4)
This post is a notice regarding updates to the 'STM32 FreeRTOS Implementation' lecture (Author: alex). The main update focuses on the 'W5500 High-Speed Interface Implementation'.
Key Content Summary:
System Implementation Method: The W5500's SPI interface was implemented in RTL, and a 4KB internal SRAM was included to enable a high-speed interface.
W5500 Write Operation:
The MCU stores the data to be transmitted in the SRAM.
When a command is given to the SPI Controller, the data from the SRAM is transmitted to the W5500.
It was confirmed to operate at a speed of 11 Mbps with the jumper connected, and during board fabrication, it was verified to reach up to 24 Mbps (theoretically 33 Mbps).
W5500 Read Operation:
Checks whether the W5500 has received data. This method involves the SPI Controller fetching data at high speed upon reception, storing it in SRAM, and the MCU reading it.
Other Information: Students who have purchased the course can access updated electronic documents and materials via the provided download link.
[Role of the W5500]
In this course, the primary role of the W5500 is to handle Ethernet communication with external devices.
Specifically, it is as follows:
Network Communication Processing: The W5500 is an Ethernet controller chip with an embedded hardware TCP/IP stack. This chip reduces the load on the main processor (MCU) by processing complex network communications (TCP, UDP, IP, etc.) in hardware.
SPI-based High-speed Communication: To achieve the goal of this course, 'implementing high-speed interfaces,' it connects to an SPI Controller designed within the FPGA to perform the role of transmitting and receiving data at high speeds. The method involves the MCU storing data to be sent in SRAM, which the W5500 then transmits externally via the network, and storing the data back into SRAM upon receiving it from the outside.
To summarize, the W5500 serves as a core communication module that enables embedded systems (specifically the FPGA in this course) to connect to the Internet or a local network to exchange data. It appears the instructor structured this content to facilitate hands-on practice in controlling the W5500 chip to communicate with external devices.
=======================
[FPGA] AMD(구 Xilinx)의 Artix-7 칩을 쓴, Digilent의 Arty A7 보드
제목: FPGA MCU 포팅 업데이트 (v1.4)
이 글은 'STM32 FreeRTOS 구현' 관련 강의(작성자: alex)의 업데이트 소식을 알리는 공지사항입니다. 주된 업데이트 내용은 'W5500 고속 인터페이스 구현'입니다.
핵심 내용 요약:
시스템 구현 방식: W5500의 SPI 인터페이스를 RTL로 구현하고, 내부에 4KB SRAM을 두어 고속 인터페이스를 가능하게 했습니다.
W5500 Write 동작:
MCU가 전송할 데이터를 SRAM에 저장합니다.
SPI Controller에 명령을 주면 SRAM의 데이터를 W5500으로 전송합니다.
점퍼 연결 상태에서 11Mbps의 속도로 동작하는 것을 확인했으며, 보드 제작 시 최대 24Mbps(이론상 33Mbps)까지 확인되었습니다.
W5500 Read 동작:
W5500의 데이터 수신 여부를 체크합니다.
데이터 수신 시 SPI Controller가 고속으로 데이터를 가져와 SRAM에 저장하고, MCU가 이를 읽어오는 방식입니다.
기타 안내: 강의를 구매한 수강생들은 제공된 다운로드 링크를 통해 업데이트된 전자문서와 자료를 받을 수 있습니다.
[W5500 의 역할]
해당 강의에서 W5500의 주된 역할은 외부 디바이스와의 이더넷(Ethernet) 통신을 담당하는 것입니다.
구체적으로 살펴보면 다음과 같습니다.
네트워크 통신 처리: W5500은 하드웨어 TCP/IP 스택을 내장한 이더넷 컨트롤러 칩입니다. 이 칩은 복잡한 네트워크 통신(TCP, UDP, IP 등)을 하드웨어적으로 처리하여 메인 프로세서(MCU)의 부하를 줄여주는 역할을 합니다.
SPI 기반 고속 통신: 이 강의의 목표인 '고속 인터페이스 구현'을 위해, FPGA 내부에 설계된 SPI Controller와 연결되어 데이터를 고속으로 송수신하는 역할을 수행합니다. MCU가 보낼 데이터를 SRAM에 저장하면, W5500이 이를 네트워크를 통해 외부로 전송하고, 외부에서 데이터를 받으면 다시 SRAM에 저장하는 방식입니다.
정리하자면, W5500은 임베디드 시스템(이 강의에서는 FPGA가 해당)이 인터넷이나 로컬 네트워크에 연결되어 데이터를 주고받을 수 있도록 해주는 핵심 통신 모듈의 역할을 합니다. 강의자는 이 W5500 칩을 제어하여 외부 디바이스와 통신하는 것을 실습하기 위해 해당 내용을 구성한 것으로 보입니다.
[Q&A]
[Q] 이 강의료? 강사?
132,000원
강사 : alex
한글 본명: 김태경
(주)아이힐 대표이사입니다. (이메일 alex@ihil.co.kr, 연락처 010-6243-0395 / 031-890-6243)
블로그(ihil.tistory.com) 운영중!
(주)아이힐 이라는 1인회사 운영중
FPGA 개발보드 판매: 자체 제작한 HIL-A35T (Xilinx Artix-7 계열) 보드를 네이버 스마트스토어(ihil)를 통해 판매합니다. 인프런 강의와 연동되는 실습용 보드입니다.
소프트웨어: 성경 읽기 앱 바이블WG(BibleWG)를 개발·배포하고 있습니다.
[Q&A 2] FPGA 에서 이더넷을 W5500 으로 만들면 아주 편하고 주요 장점들이 있나? 아니면 Software Stack 으로 해도 큰 문제 없나?
결론부터 말하면 둘 다 유효하고, 갈리는 기준은 처리량·소켓 수·팀 역량 세 가지입니다. 다만 앞 그림의 구성(직접 만든 소프트코어 MCU + Artix-7 35T)에서는 W5500이 명백히 합리적인 선택입니다. 이유를 나눠서 보겠습니다.
Software Stack으로 가면 실제로 무엇을 해야 하나
Arty A7에 PHY가 이미 있으니 "그냥 lwIP 올리면 되지 않나" 싶지만, 사이에 들어갈 게 꽤 많습니다.
FPGA 쪽: Ethernet MAC IP 코어, MII/RMII 인터페이스, 클럭 도메인 크로싱, 패킷 DMA, 링 버퍼. MAC은 참조 클럭이 별도라 CDC를 잘못 짜면 간헐적으로 패킷이 깨지는데, 이런 버그는 재현이 어렵습니다. Xilinx AXI Ethernet Lite는 무료지만 기능이 제한적이고, 제대로 된 TEMAC은 유료 IP입니다.
소프트웨어 쪽: lwIP는 최소 구성으로도 코드 40~60KB에 버퍼 포함 RAM 수십 KB를 요구합니다. Artix-7 35T의 BRAM 총량이 200KB 남짓이니 DDR3를 끌어와야 하고, 그러면 MIG(메모리 컨트롤러)까지 붙어서 설계가 훨씬 무거워집니다.
그리고 결정적으로 — lwIP는 포팅 레이어(sys_arch)를 CPU/컴파일러에 맞춰 작성해야 합니다. MicroBlaze나 RISC-V처럼 툴체인이 성숙한 코어면 기존 포팅을 갖다 쓰지만, 직접 설계한 MCU 코어라면 이걸 처음부터 만들어야 합니다. 강의 맥락상 이게 가장 큰 장애물로 보입니다.
W5500이 가져가는 것
| W5500 | Software Stack | |
|---|---|---|
| FPGA 자원 | SPI 컨트롤러만 (수백 LUT) | MAC + DMA + 버퍼 (수천 LUT + BRAM) |
| 필요 RAM | 거의 없음 (칩 내부 32KB) | 수십~수백 KB |
| 개발 기간 | 며칠 | 수 주~수 개월 |
| 실효 처리량 | SPI 속도에 종속 | 회선 속도까지 |
| 동시 소켓 | 8개 고정 | 제한 없음 |
| 프로토콜 | TCP/UDP/ICMP/IGMP | 원하는 대로 |
핵심 장점은 패킷 버퍼가 FPGA 밖에 있다는 것입니다. W5500이 32KB를 자체적으로 들고 있으니 FPGA는 필요할 때 꺼내오기만 하면 됩니다. 그림에서 SRAM이 4KB뿐인데도 동작하는 이유가 이겁니다. 소프트웨어 스택이었으면 이 4KB로는 어림도 없습니다.
또 하나, 타이밍 제약이 사라집니다. SPI는 느리고 단순한 동기 인터페이스라 제약 조건 잡기가 쉽습니다. 반면 RMII는 50MHz 소스 동기 신호라 setup/hold 마진 확보에 신경 써야 하죠.
그럼 언제 Software Stack이 필요한가
W5500의 진짜 한계는 SPI 대역폭입니다. 그림의 11Mbps는 잘 튜닝한 수치이고, 이론적 상한을 감안해도 20~30Mbps 근방이 현실적 천장입니다. 100Mbps 회선을 다 쓰려면 SPI 방식으로는 불가능합니다.
그래서 이런 경우엔 소프트웨어 스택(또는 FPGA 내 하드웨어 MAC)으로 가야 합니다.
[유사 UCC들 비교] Maker 사이트의 FPGA 관련 글 80개 분석 결과.
W5500 프로젝트가 총 26건, 이외에도 W5300(8건), W5100S(1건) 등
나머지는 보드, 모듈 등을 사용하거나, 위즈네트 제품 언급이 모호함.
응용 분야는 산업/제어 22, 교육·데모 17, 계측/DAQ 11, 모션·로봇 9, 네트워크/보안 4 순입니다.
1. W5500을 FPGA에 이용하는 이유
FPGA에 이더넷을 붙이려면 선택지가 셋인데, UCC인 IEEE 논문(FPGA Based Solution For Ethernet Controller...)이 이 딜레마를 정확히 짚습니다. FPGA 기반 이더넷은 고가의 상용 IP 코어를 쓰거나, 높은 수준의 HDL 전문성으로 TCP/IP 코어를 직접 개발해야 하는데, W5500 같은 내장 TCP/IP 외부 컨트롤러는 간단하고 저렴하면서도 높은 전송률을 제공해 코딩 복잡도와 개발 비용·시간을 줄여준다는 것이 핵심 논리입니다.
FPGA(Field Programmable Gate Array)에서 네트워크 통신을 구현할 때 소프트웨어 스택(LwIP 등)이나 FPGA 내부 논리 회로(Soft MAC/IP)를 이용하는 대신 W5500 하드웨어 TCP/IP 칩을 연결하는 핵심 이유는 다음과 같습니다.
① FPGA 논리 자원(Logic Elements, BRAM)의 획기적 절약
FPGA 내부에 TCP/IP 스택, MAC 계층, 버퍼 등을 Verilog/VHDL 코드로 직접 구현(Full Soft IP)하면 수천~수만 개의 Logic Element(LE)와 Block RAM 자원이 소모됩니다. W5500은 TCP/IP, MAC, PHY가 하나로 통합된 하드웨어 칩(TOE)이므로 FPGA의 자원 낭비를 극도로 줄일 수 있습니다.
② RTL 개발 난이도 감소 및 개발 기간 단축
4계층 네트워킹 프로토콜(ARP, IP, ICMP, UDP, TCP)과 패킷 재전송, 타이머 제어 등을 하드웨어 HDL 코드로 작성하는 것은 타이밍 클로저(Timing Closure) 및 검증 이슈로 인해 매우 복잡합니다. W5500을 이용하면 단순한 SPI 통신 상태 머신(FSM) 제어만으로 이더넷을 구동할 수 있습니다.
③ Softcore CPU(MicroBlaze, RISC-V 등)의 연산 부하 경감
FPGA 내부에 소프트코어 프로세서를 올릴 때, 소프트웨어 TCP/IP 스택을 구동하면 CPU 자원과 메모리의 상당 부분이 네트워크 처리에 할당됩니다. W5500이 TCP/IP 처리 전체를 오프로드(Offload)해주므로 CPU는 본래의 메인 로직(모션 제어, 데이터 처리)에만 100% 집중할 수 있습니다.
④ 시스템 높은 신뢰성 및 보안성
OS 기반의 소프트웨어 네트워크 스택에서 발생할 수 있는 메모리 오버플로우, OS 크래시, 소프트웨어 버그로부터 독립적입니다. 하드웨어 로직으로 통신이 고정 구동되므로 다운 없는 안정적인 산업용 제어 환경 구축이 가능합니다.
⚡ 2. FPGA + W5500 조합의 장점
핀 수 절감 및 소형 FPGA 적용 가능
W5500은 SPI 인터페이스(4~6핀)를 사용하므로, 핀 자원이 부족한 소형 FPGA(Tang Nano 20K, GateMate, Basys-3, Spartan 계열 등)에서도 손쉽게 이더넷 통신을 추가할 수 있습니다.
고속 SPI (최대 80MHz) & 버스트 모드 지원
W5500은 최대 80MHz SPI 클럭 및 버스트 모드(Burst Mode)를 지원하여, Verilog 컨트롤러 설계 시 속도 향상 및 효율적인 데이터 전송이 가능합니다.
하드웨어 8개 독립 소켓 (Multi-Socket) 지원
최대 8개의 독립적인 소켓을 하드웨어 수준에서 제공합니다. 이를 통해 TCP Server, TCP Client, UDP 통신 등을 독립 채널로 동시에 운용(예: 제어 명령 채널, 데이터 모니터링 채널, 상태 알림 채널 분리)할 수 있습니다.
통신 회로의 단순화로 인한 저비용/저전력 구현
External PHY나 별도의 MAC 칩을 구성할 필요 없이 W5500 단일 칩으로 RJ45 커넥터만 연결하면 되므로 PCB 아트웍 및 단가 구조가 단순해집니다.
교육용으로도 매우 적합하다.
W5500을 이용하면 학생이 다음을 순차적으로 학습할 수 있습니다.
- SPI Master RTL
- FSM
- 레지스터 접근
- FIFO 및 SRAM
- 인터럽트
- TCP/UDP socket
- softcore CPU 연동
- FPGA와 외부 IC의 역할 분담
⚠️ 3. FPGA + W5500 조합의 단점 및 한계
대역폭(Throughput)의 한계 (10/100M Fast Ethernet 및 SPI 병목)
W5500은 10/100Mbps 이더넷 PHY를 탑재하고 있으며, SPI 버스로 통신하기 때문에 실효 속도가 수십 Mbps 수준으로 제한됩니다.
W5500 SPI 클럭은 최대 80MHz를 지원하지만, SPI는 직렬 인터페이스입니다.
80MHz라 해도 이론적인 원시 전송량은 약 80Mbit/s이며, 실제로는 오버헤드가 있습니다.
IEEE 논문 XC7Z020에 구현해 1KB 패킷 UDP 기준 최대 32Mbps를 보고했는데, 이게 현실적인 상한선입니다. 100Mbps 회선을 못 채우고, 기가비트는 아예 불가능합니다.
한계점: 기가비트(1Gbps) 통신이나 초고해상도 비디오 스트리밍, 고속 Lidar 데이터 실시간 전송에는 대역폭이 부족합니다.
(※ 데이터셋에서도 초고속/대용량 병열 처리가 필요한 시스템은 16비트 파라렐 버스를 지원하는 W5300이나 FPGA 내부 MAC IP + External PHY 방식을 채택하고 있습니다.)
HDL로 드라이버를 짜는 부담이 생각보다 큽니다.
MCU라면 WIZnet ioLibrary를 그대로 쓰지만, FPGA에서는 소켓 레지스터 폴링, TX/RX 라이트·리드 포인터 갱신, 인터럽트 클리어를 전부 상태 머신으로 풀어야 합니다. 목록에 "다중 소켓으로 확장하는 법"이 독립된 글로 존재한다는 것 자체가, 소켓 하나를 넘어가는 순간 난이도가 급증한다는 방증입니다.
커스텀/특수 프로토콜 확장 불가
W5500 내부의 TCP/IP 스택은 하드웨어 ASIC 레지스터로 고정되어 있어, 표준 TCP/UDP/IP 이외의 독자적인 L2 커스텀 패킷, 특수 필터링, 신규 프로토콜 수정 및 변경이 불가능합니다.
SPI Controller / FSM 직접 설계 필요
RISC-V나 MicroBlaze 등 Softcore 없이 Pure Verilog/VHDL(RTL)로만 제어할 경우, W5500의 레지스터 맵과 SPI 타이밍을 제어하는 FSM(Finite State Machine)을 직접 개발해야 합니다.

