Wiznet makers

bruno

Published June 17, 2026 ©

178 UCC

15 WCC

46 VAR

0 Contests

0 Followers

0 Following

Original Link

Combining High-Speed AHB Bus With Low-Speed EMIF Bus Using A Zero-Delay Bus Coupling Method

Combining High-Speed AHB Bus With Low-Speed EMIF Bus Using A Zero-Delay Bus Coupling Method

COMPONENTS
PROJECT DESCRIPTION

고속 AHB와 저속 W5300(EMIF)을 잇는 Zero-Delay 버스 커플링 컨트롤러

200MHz ARM 코어가 70MHz짜리 W5300에 접근할 때, AHB의 "16클록 타임아웃" 규칙은 통신을 실패시키거나 프로세서를 통째로 멈춰 세웁니다. 이 프로젝트는 FPGA 안에 "Zero-Delay 컨트롤러"를 두어, ARM이 주소·제어 신호만 2클록에 던지고 버스를 즉시 놓아주도록 만들어 이 구조적 충돌을 해소합니다.


COMPONENTS

Hardware components

  • 국산 SoC FPGA — Jingwei Qili(京微齐力) H7P20N0L176 (FPGA 패브릭 + Cortex-M3 코어 + 온칩 SRAM 통합, 최대 220MHz)
  • WIZnet W5300 — Hardwired TCP/IP 이더넷 컨트롤러 (16비트 병렬 버스, 본 실험의 EMIF 페리페럴)
  • 전원부 — 외부 입력 → 베이스플레이트 레귤레이터 → 3.3V / 1.8V / 0.95V 코어보드 공급
  • JTAG 다운로더, 로직 애널라이저(파형 검증용)

Software & Tools

  • Fuxi(伏羲) 2023 — Jingwei Qili EDA 툴체인 (합성·배치배선·비트스트림 생성)
  • ModelSim — RTL 시뮬레이션
  • Verilog HDL — Zero-Delay 컨트롤러 FSM 구현
  • ARM 측 C 드라이버 — Zero-Delay 컨트롤러 software driver

출처 안내 이 글은 Wiley 학술지 Concurrency and Computation: Practice and Experience (2026; 38:e70741, ISSN 1532-0634, DOI 10.1002/cpe.70741)에 게재된 논문 "Combining High-Speed AHB Bus With Low-Speed EMIF Bus Using A Zero-Delay Bus Coupling Method" (Yulong Liu 외, 합비공업대학)을 바탕으로, WIZnet Maker 관점에서 단순 번역이 아니라 기술적 의미를 재구성한 콘텐츠입니다. 원문은 W5300을 "저속 페리페럴 사례"로 다루지만, 본 글은 W5300이 왜 이런 커플링을 필요로 하는 디바이스인지를 WIZnet 생태계 독자의 시선으로 풀어 씁니다. 수치·구조는 공개된 원문에서 확인 가능한 값만 사용했고, 확인되지 않은 항목은 [확인 필요]로 표시했습니다.


작성자 / 출처 신뢰도

재구성·게시 (WIZnet Maker)

  • WIZnet Maker 에디토리얼 관점에서 재구성. 원 논문의 저자가 작성한 글이 아니며, 기술 해석·유사 콘텐츠 연결·확장 제안은 에디터의 재구성 결과입니다.

원 프로젝트(논문) 저자

  • 저자: Yulong Liu, Haonan Ding, Jinghui Gao, Liangliang Hu(교신저자), Liang Huang, Zhan Zhang, Jinzhang Xu
  • 소속: 합비공업대학(Hefei University of Technology) — 계측과학·광전자공학부 / 안후이성 측정이론·정밀계측 중점실험실 / 허페이 종합국가과학센터 에너지연구소(안후이 에너지연구소) / 전기공학·자동화학부
  • 교신저자 연락처: friendyhu@hfut.edu.cn
  • 게재 이력: 투고 2025-06-08, 수정 2026-03-19, 게재확정 2026-04-12
  • 연구비: 중국 국가자연과학기금 NSFC 12075072 · 12275063, 안후이성 대학협력혁신프로그램 GXXT-2022-011

신뢰도 메모

  • 저널은 병렬·분산 컴퓨팅 분야 정식 피어리뷰 학술지(Wiley)로 확인됨. 논문에 이해상충 없음(no conflicts of interest) 명시.
  • 저자들의 개인 GitHub / 커뮤니티 활동 / SNS / 소속 외 회사 정보 → [확인 필요] (공개 출처로 별도 확인되지 않음. 추측하지 않음)
  • 실험 데이터는 "교신저자에게 합리적 요청 시 제공"으로 명시되어, 오픈 데이터셋·오픈 RTL 형태로 공개되어 있지는 않음 [확인 필요]

신규 콘텐츠 요약

  • 무슨 프로젝트인가 — 고속 AHB(ARM)와 저속 EMIF(병렬 버스) 페리페럴 사이의 클록·타임아웃 불일치를, FPGA 내부 "Zero-Delay 컨트롤러"로 해소하는 버스 커플링 설계 및 검증.
  • 사용 칩 — 국산 SoC FPGA(Jingwei Qili H7P20N0L176, ARM Cortex-M3 + FPGA 통합), 페리페럴로 WIZnet W5300.
  • 프로토콜 — AHB(AMBA), EMIF(외부 메모리 인터페이스 / 병렬 버스), W5300의 TCP·UDP·IP·ARP·ICMP 하드와이어드 스택.
  • 플랫폼 — Verilog HDL + Fuxi 2023 + ModelSim, 200MHz AHB / 70MHz EMIF 조건의 온보드 검증.
  • 핵심 가치 — 1회 액세스 지연을 2 AHB 클록으로 고정(약 98% 감소), AHB의 16클록 타임아웃 제약을 제거, **72 LUT(0.62%)**의 초경량 자원으로 비동기 FIFO 대비 단순한 동기 FSM 구현.

유사한 기존 콘텐츠

선정 기준: 단순 키워드 일치가 아니라 칩(W5300) / 버스(16비트 병렬·EMIF) / 플랫폼(FPGA) / 응용(고속 이더넷) 중 2개 이상이 겹치는 것 우선.

1. Implementing High-Speed Ethernet Communication with WIZnet W5300 and FPGA (irina)

  • 링크: https://maker.wiznet.io/irina/projects/implementing-high-speed-ethernet-communication-with-wiznet-w5300-and-fpga/
  • 유사한 이유: **W5300 + FPGA + 16비트 병렬 버스(D[15:0], CS/RD/WR/RESET, A[3:0] 디코딩)**라는 인터페이스 구조가 본 논문과 정확히 동일한 출발점. 실제 RF 신호처리 시스템 사례.
  • 다른 점: irina 글은 "어떻게 배선·전원(PoE)·주소 디코딩을 구성하는가"라는 연결 가이드에 초점. 본 논문은 그 연결 위에서 호스트 버스(AHB)의 타임아웃·블로킹을 어떻게 없애는가라는 한 단계 위 문제를 다룸.
  • 연결 포인트: irina 글로 W5300↔FPGA 물리 인터페이스를 익힌 뒤, 본 글의 Zero-Delay FSM을 "그 인터페이스를 구동하는 상태기계"로 얹으면 자연스러운 후속편이 됨.

2. FPGA high speed TCP/IP communication using W5300 TOE Shield (mhanuel, 조회수 최상위)

  • 링크: https://maker.wiznet.io/mhanuel/contest/fpga-tcp-ip-communication-using-wiznet-toe-shield-and-tang/
  • 유사한 이유: W5300을 제어하는 Verilog FSM을 FPGA(Tang Nano 9K, GOWIN)로 직접 구현. 본 논문의 Zero-Delay 컨트롤러와 "FSM이 W5300의 CS/RD/WR 타이밍을 만든다"는 핵심 메커니즘이 동일.
  • 다른 점: mhanuel 글은 I/O 절약을 위해 8비트 직접주소 모드를 택하고 ARM 호스트 없이 FPGA가 직접 마스터. 본 논문은 ARM(AHB) ↔ FPGA ↔ W5300의 3계층에서 ARM의 버스 점유 시간을 줄이는 것이 목표라 "ARM 해방"이라는 추가 축이 있음.
  • 연결 포인트: mhanuel의 FSM을 "Zero-Delay 컨트롤러의 EMIF 측 하위 FSM"으로 본다면, 본 논문은 거기에 AHB 측 핸드셰이크(control-status 신호)와 드라이버를 결합한 형태로 설명 가능.

3. Altera Nios II + WIZnet W5300 (lawrence)

  • 링크: https://maker.wiznet.io/lawrence/projects/altera-nios-iiwiznet-w5300/
  • 유사한 이유: 소프트코어 CPU(Nios II) + FPGA + W5300 16비트 병렬 버스로 하드웨어 가속 TCP 서버(~80Mbps) 구성. "프로세서 + FPGA + W5300 병렬 버스"라는 이종(heterogeneous) 구조가 본 논문과 같은 계열.
  • 다른 점: lawrence 글은 Nios II에서 C 드라이버로 W5300을 폴링/제어(여전히 CPU가 전송 동안 관여). 본 논문은 그 폴링 구간을 FPGA로 떼어내 CPU를 전송 도중 해방하는 것이 핵심 차별점.
  • 연결 포인트: 동일한 "soft/hard CPU + W5300" 구조에서, 본 논문의 control-status 핸드셰이크 패턴을 적용하면 lawrence 설계의 CPU 점유율을 추가로 낮출 수 있음.

차이점과 확장 가치

기존 WIZnet Maker의 W5300+FPGA 콘텐츠 대부분은 **"W5300을 어떻게 물리적으로 연결하고 FSM으로 구동하는가"**에 머뭅니다. 본 프로젝트의 차별점은 한 계층 위, 즉 **"고속 호스트 버스(AHB)가 저속 W5300을 기다리느라 멈추거나 타임아웃 나는 문제"**를 정면으로 다룬다는 데 있습니다. 즉 W5300을 "FPGA가 직접 모는 디바이스"가 아니라 "ARM SoC의 메모리맵 페리페럴"로 둘 때 생기는 실전 문제를 해결합니다.

흥미롭게도 WIZnet 리셀러 게시물 "ARM + FPGA + Ethernet core board (STM32F407Z + A3P400Q208 + W5300)" (https://maker.wiznet.io/WIZnet/resellers/arm-fpga-ethernet-core-board-stm32f407z-a3p400q208-w5300-industrial-grade-stability/)는 "W5300의 주소·데이터·제어·상태 라인을 ARM에 직결하면 FPGA 없이도 통신 가능"이라고 소개합니다. 본 논문은 바로 그 직결 구조의 한계(고클록에서 타임아웃/블로킹)를 짚고, FPGA를 단순 배선이 아닌 지능형 디커플링 계층으로 재정의합니다.

확장 방향:

  • mhanuel·simons의 GOWIN/TangNano FSM에 본 논문의 control-status 핸드셰이크를 이식해, 저가 FPGA에서도 "ARM 해방형" W5300 드라이버를 재현.
  • W5300뿐 아니라 W6100/W5500 등 다른 WIZnet 칩(또는 다른 저속 병렬 페리페럴)으로 동일 패턴을 일반화.
  • 멀티마스터 SoC(다중 코어)에서 16클록 타임아웃이 실제로 전송 실패를 일으키는 시나리오의 정량 재현.

PROJECT DESCRIPTION

문제 제기: 200MHz로 도는 ARM 코어가, 호스트 인터페이스가 70MHz에 불과한 W5300에 레지스터 하나를 읽고 쓰려 할 때 — AHB는 슬레이브 응답을 최대 16클록까지만 기다립니다. 클록이 120MHz를 넘어가면 W5300의 유효 홀드타임(읽기 119ns, 쓰기 105ns)을 채우는 데 16클록을 초과하고, 멀티마스터 환경에서는 아비터가 버스를 강제 회수해 전송이 실패합니다. 싱글마스터에서는 실패는 없지만 ARM이 전송 내내 버스를 붙잡고 놀게 됩니다. 그렇다면, 고속 코어가 저속 페리페럴에 "자주, 원자적으로(atomic)" 접근하는 임베디드의 흔한 상황에서, 어떻게 하면 타임아웃도 없고 CPU도 놀지 않게 만들 수 있을까요?

이 프로젝트의 답은 "기다림을 FPGA에 위임한다"입니다. ARM은 주소·제어·데이터를 2클록 안에 FPGA의 Zero-Delay 컨트롤러로 넘기고 즉시 버스를 놓습니다. 느린 EMIF 타이밍(CS#·RD#·WR#·주소 유지)은 FPGA가 W5300 데이터시트대로 자율 수행하고, 완료는 control-status 신호로 ARM에 알립니다. 비동기 FIFO처럼 클록 도메인을 버퍼로 격리하는 대신, 단순한 동기 상태기계 + 핸드셰이크 신호로 같은 목적(타임아웃 제거)을 더 적은 자원으로 달성하는 것이 설계 철학입니다.


0. 핵심 기술 / 부품 — AHB, EMIF, 그리고 W5300

핵심: 이 프로젝트는 "빠른 프로토콜(AHB)"과 "느린 디바이스(EMIF로 붙는 W5300)" 사이의 시간 격차를 메우는 일입니다.

  • AHB(AMBA High-performance Bus) — ARM SoC의 온칩 고속 버스. 파이프라인·고대역폭이 장점이지만, 멀티플렉서 기반 중앙집중 인터커넥트라 아비터가 응답 없는 슬레이브를 최대 16클록 뒤 강제 회수합니다. 이 타임아웃이 저속 페리페럴과의 직결을 어렵게 만드는 근본 원인입니다.
  • EMIF(External Memory Interface) — 프로세서·FPGA와 외부 디바이스를 잇는 병렬 버스. SRAM/SDRAM/NOR Flash 등 다양한 메모리와 설정 가능한 타이밍을 지원합니다. 유연하지만 본질적으로 저속이며, 타이밍을 디바이스 데이터시트에 맞춰 정확히 만들어줘야 합니다.
  • WIZnet W5300 — Hardwired TCP/IP 이더넷 컨트롤러. SPI 기반의 W5500과 달리 16비트 병렬 호스트 버스를 제공해 더 높은 처리율을 노립니다. 8개 독립 소켓, TCP/UDP/IP/ARP/ICMP를 하드웨어로 처리하고, CS·RD·WR·RESET·INT 제어선을 갖습니다. 본 논문 기준 최대 동작 클록 70MHz, 유효 읽기 홀드 ≥119ns·쓰기 홀드 ≥105ns. → W5300이 "병렬 버스 + 정해진 홀드타임"을 요구하는 디바이스라는 점이 바로 EMIF 커플링이 필요한 이유입니다.

1. 개발 도구 / 플랫폼 — 국산 SoC FPGA + Fuxi 2023

핵심: 검증 플랫폼은 ARM 코어와 FPGA 패브릭을 한 칩에 담은 국산 이종 컴퓨팅 SoC입니다.

  • Jingwei Qili H7P20N0L176 — FPGA 프로그래머블 로직 + 고성능 Cortex-M3 + 대용량 온칩 SRAM 통합. 최대 220MHz. 임베디드 비전·고대역폭 센서·디스플레이·산업제어를 겨냥한 칩으로, "ARM이 마스터, FPGA가 슬레이브 로직"이라는 본 설계 구조를 한 칩 안에서 그대로 실험할 수 있게 해줍니다.
  • Fuxi(伏羲) 2023 — 합성·배치배선·비트스트림 생성을 담당하는 Jingwei Qili EDA 툴체인. 여기서 만든 비트스트림을 JTAG으로 보드에 다운로드.
  • ModelSim — RTL 단계 시뮬레이션으로 FSM 천이를 먼저 검증한 뒤 온보드 테스트로 넘어가는 흐름.

이 부분은 국산화(중국) FPGA 생태계를 보여주는 사례이기도 합니다. WIZnet 칩이 특정 벤더 FPGA에 종속되지 않고 다양한 패브릭(Xilinx, GOWIN, Jingwei Qili 등)과 병렬 버스로 결합 가능하다는 점에서, 앞의 유사 콘텐츠들과 함께 보면 "FPGA 무관 W5300 구동" 레퍼런스 집합이 됩니다.


2. 동작 원리 — "지연을 옮긴다"

핵심: 전송 시간을 줄이는 게 아니라, 그 시간 동안 누가 기다리는가를 ARM에서 FPGA로 옮깁니다.

전통 방식에서 ARM은 EMIF 동작이 끝날 때까지 AHB를 붙잡고 대기합니다. Zero-Delay 방식은 이렇게 동작합니다.

  1. ARM이 **제어 신호 + 대상 주소(+쓰기 데이터)**를 AHB로 전송 → 제어 단계·데이터 단계로 최소 2클록 소요.
  2. 전송 즉시 FPGA가 control-status 신호를 high로 올리고, ARM은 버스를 놓고 다른 태스크 실행.
  3. FPGA의 Zero-Delay 컨트롤러가 AHB 주소를 감시하다가 자기 주소공간이면 오프셋 주소와 HWRITE를 내부 레지스터에 래치하고, W5300 데이터시트 타이밍대로 EMIF 시퀀스를 자율 수행.
  4. 동작이 끝나면 control-status 신호를 low로 내려 ARM에 "다음 작업 가능"을 알림(인터럽트/폴링 핸드셰이크).

이 구조 덕분에 ARM 입장에서 한 번의 액세스 임계경로는 **항상 2클록(L_zero = 2)**으로 고정됩니다.


3. 장치 A 구현 — ARM(AHB) 측: 드라이버와 버스 해방

핵심: ARM 측 소프트웨어 드라이버의 임무는 "최소한만 던지고 빠지는 것"입니다.

ARM은 control-status 신호가 유효해질 때까지 대기 → 제어/주소(쓰기면 데이터)를 AHB로 전송 → 버스 해방. 이후엔 control-status 신호를 폴링(또는 인터럽트 대기)하며 다른 연산을 수행합니다. 읽기에서는 길이 관리를 위해 카운터 CNT를 사용하며, Read Length만큼 데이터를 얻으려면 Read Length + 1회 읽기가 필요합니다(초기 무효 데이터 1개를 버리는 W5300형 FIFO/indirect 읽기 특성 반영).

핵심 동작을 의사코드로 요약하면:

# ARM 측 Zero-Delay 드라이버 (의사코드)
def zerodelay_access(addr, is_write, data=None, read_len=None):
    wait_until(control_status == VALID)      # 핸드셰이크 대기
    drive_AHB(addr, HWRITE=is_write, data)   # 2클록: 제어+(데이터)
    release_AHB_bus()                        # 즉시 버스 해방 → 타 태스크 수행
    if is_write:
        wait_until(control_status == LOW)    # 완료 신호
    else:
        cnt = read_len
        while cnt >= 0:                      # Read Length+1 회
            if control_status == VALID:
                if cnt == read_len: discard()   # 초기 무효 데이터 폐기
                else: save_prev_data()
                send_target_addr(); cnt -= 1

본 글은 원문의 전체 코드를 옮기지 않고 핵심 흐름만 의사코드로 압축했습니다. 실제 신호 명세와 타이밍은 원 논문 본문·Supporting Information(Figure S1/S2) 참조.


4. 장치 B 구현 — FPGA Zero-Delay 컨트롤러 FSM

핵심: FPGA 측은 control-status를 게이트로 삼아 읽기/쓰기 두 갈래의 상태 시퀀스를 돌리는 동기 상태기계입니다.

컨트롤러는 IDLE에서 Status CheckoutHWRITE 판별 → READ / WRITE 분기로 진행합니다.

읽기 경로

  • control-status 유효 → 첫 클록에 CS# low
  • 래치된 HWRITE=low(읽기) → WD# high, RD# low, EMIF 데이터 버스 Hi-Z, 오프셋 주소를 EMIF 주소 버스로 출력
  • 이 상태 30클록 유지CS# high를 8클록 유지(주소 라인 유지) → CS# 상승엣지에서 EMIF 데이터를 내부 레지스터로 래치
  • control-status low & HWRITE low → 내부 레지스터 → AHB 읽기 데이터 버스 전달(1클록)

쓰기 경로

  • control-status 유효 → 첫 클록에 CS# low
  • HWRITE=low → WD# low, RD# high, AHB 쓰기 데이터를 내부 레지스터에 래치(→ EMIF 데이터 버스 연결)
  • 이 상태 20클록 유지CS# high 8클록 유지(주소 라인 유지) → control-status low로 내려 쓰기 완료 통지
# FPGA Zero-Delay 컨트롤러 FSM (의사코드)
state IDLE: if addr in my_space and status_valid -> latch(addr,HWRITE); status<=HIGH; goto OP
state OP:
    CS# <= 0
    if HWRITE == READ:
        RD#<=0; WD#<=1; EMIF_DATA<=Hi-Z; EMIF_ADDR<=offset   # 30 clk
        CS#<=1 (hold 8 clk); latch EMIF_DATA -> reg
        drive AHB_RDATA <= reg                                # 1 clk
    else: # WRITE
        WD#<=0; RD#<=1; reg<=AHB_WDATA -> EMIF_DATA           # 20 clk
        CS#<=1 (hold 8 clk)
    status <= LOW; goto IDLE

5. 핵심 통신 / 제어 로직 — control-status 핸드셰이크 + 타이밍 모델

핵심: 이 설계의 심장은 단 하나의 핸드셰이크 신호(control-status)와, EMIF 측 고정 다단 타이밍입니다.

control-status 신호 상태는 읽기/쓰기 레지스터의 적재 상태로 결정됩니다. 레지스터가 가득 차면 다음 클록 상승엣지에 신호를 low로 내려 "ARM은 다음 동작을 수행하라"는 의미를, 쓰기 신호가 high면 신호를 high로 올려 "새 요청 금지"를 표현합니다. 이 단일 신호가 두 클록 도메인을 안전하게 잇는 동기화점 역할을 합니다(메타스테이빌리티 방지를 위한 도메인 간 동기화는 설계 전제로 명시됨).

타이밍 모델(요약):

  • EMIF 측: T_read,EMIF = T_setup + T_read_data + T_hold + T_release (쓰기는 T_write_data로 치환)
  • 전통 방식 AHB 소비 클록: N = T_operate / T_AHB (블로킹 지연 L_block = 2 + T_operate/T_AHB, 이 값이 16 초과 시 타임아웃)
  • 비동기 FIFO: L_async = K_async + T_operate/T_AHB, K_async = D + 2 (D=4 → 6). 타임아웃은 막지만 CPU는 여전히 블로킹.
  • Zero-Delay: N_write = 2·Clk_AHB, N_read = 4·Clk_AHB (읽기는 한 전송에 두 번 읽기가 들어가 신호 처리에 4클록), 임계경로 지연 L_zero = 2로 고정.

핵심 의미: 전통·비동기 방식의 지연은 T_operate/T_AHB에 비례해 페리페럴이 느릴수록 나빠지지만, Zero-Delay의 ARM 측 지연은 **페리페럴 속도와 무관하게 상수(2클록)**입니다.


6. 검증 / 예외 처리 — 시뮬레이션 → 로직 애널라이저 → 타임아웃 제거

핵심: RTL 시뮬레이션과 200MHz 온보드 측정이 일치함을 보여, 설계가 셋업·홀드 요건을 충족함을 입증합니다.

  • 파형 검증: 로직 애널라이저 4채널(제어상태/쓰기데이터/읽기데이터/동작구간)로 측정. 읽기는 control-status high 후 2클록 뒤 진입 → 30클록 데이터 전송 → 8클록 유지. 쓰기는 동일 패턴에 20클록 전송 구간. 시뮬레이션 결과와 온보드 결과가 일치.
  • 예외(타임아웃) 처리: 전통 방식에서는 120MHz까지만 멀티마스터 전송 가능(그 이상에서 읽기/쓰기가 16클록 초과 → 멀티마스터 시 ARM이 전송 완료 전 버스 해방 → 전송 실패). Zero-Delay 방식은 200MHz에서도 안정 전송, 16클록 한계 자체를 제거.
  • 읽기 무효 데이터 처리: CNT == Read Length일 때 초기 데이터 폐기 후 다음 지점부터 유효 데이터 수집 → W5300형 읽기에서 첫 샘플이 무효가 되는 문제를 카운터 로직으로 흡수.

7. 네트워크(W5300) & 결과

핵심: 저속 W5300을 200MHz 호스트에 붙이고도, 1회 액세스 지연을 2클록으로 고정하며 자원은 1% 미만만 사용합니다.

성능(200MHz AHB / 70MHz EMIF, W5300 기준):

항목전통 블로킹비동기 FIFOZero-Delay
단일 읽기 지연(AHB cyc)약 119약 1232
단일 쓰기 지연(AHB cyc)약 91약 952
CPU 블로킹전 구간 블로킹전 구간 블로킹없음(해방)
멀티마스터 최대 클록120MHz(FIFO로 회피)200MHz 안정
자원(LUT)약 120180–290 + 230 reg (+BRAM 가능)72 LUT(0.62%)
  • 절감량: 단일 전송 시 읽기 22클록·쓰기 21클록 절감(약 98% 지연 감소). 100회 전송 시 읽기 2398클록, 쓰기 2100클록 절감.
  • 자원: 72 LUT(0.62%), 159 레지스터(0.69%), 51 I/O(31.29%), PLL 1개(50%), BRAM 미사용 → 비동기 FIFO보다 단순하면서 자원 효율적.
  • 활용 함의: W5300의 TCP/UDP 하드와이어드 스택은 그대로 살리고, 호스트 ARM은 네트워크 레지스터 액세스 동안 다른 실시간 태스크를 병행 → 멀티코어 ARM의 엣지 컴퓨팅 적용성 향상.

Takeaways

  • 타임아웃은 회피가 아니라 제거 대상이 될 수 있다. 비동기 FIFO가 타임아웃을 "우회"한다면, Zero-Delay는 호스트가 기다리지 않게 만들어 16클록 제약 자체를 무력화한다.
  • 느린 페리페럴(W5300 같은 병렬 버스 디바이스)일수록 이득이 커진다. ARM 측 지연이 상수(2클록)이므로, 페리페럴이 느릴수록 절감 클록 수가 비례해 증가한다.
  • 단순한 동기 FSM + 단일 핸드셰이크 신호만으로 비동기 FIFO에 준하는 효과를, 더 적은 LUT로 얻을 수 있다(72 LUT vs 180–290 LUT).
  • W5300을 "FPGA가 직접 모는 칩"이 아니라 "ARM SoC의 메모리맵 페리페럴"로 쓸 때 생기는 실전 문제를 정조준한 사례다.

개선 여지

  • 데이터 가용성: RTL/드라이버가 오픈되어 있지 않고 "요청 시 제공" 형태라, 재현·포팅에는 추가 정보가 필요하다 [확인 필요].
  • 버스 점유 역전 시나리오 미다룸: 원문 스스로 "ARM이 다른 태스크로 버스를 점유하는 시간이 Zero-Delay 전송 시간보다 길어질 수 있는 경우는 논외"로 명시 → 실제 멀티태스크 부하에서의 종단 지연은 별도 검토 필요.
  • W5300 홀드타임 가정: 읽기/쓰기 홀드타임의 일부를 "최소값만 고려"했다고 밝힘 → 실제 W5300 데이터시트 전체 타이밍 마진과의 정합성 검증이 추가로 권장됨.
  • 단일 칩 검증: Jingwei Qili H7 한 플랫폼에서만 검증 → 타 FPGA(GOWIN, Xilinx 등) 포팅 시 타이밍 재튜닝 필요.

신규 설계 시 참고

  • WIZnet W5300을 병렬 버스로 호스트에 붙일 때, 호스트 버스의 타임아웃/블로킹 정책을 먼저 확인하라. SPI 기반(W5500/W6100)과 달리 W5300의 홀드타임이 고속 호스트의 대기 한계를 넘길 수 있다.
  • FPGA를 "단순 핀 확장 배선"이 아니라 타이밍 디커플링 계층으로 설계하면, 호스트 CPU 점유율을 구조적으로 낮출 수 있다(특히 멀티마스터/멀티코어 SoC).
  • 핸드셰이크는 단일 control-status 신호로 충분할 수 있다. 다만 두 클록 도메인 간 동기화(메타스테이빌리티 방지)는 반드시 설계 전제로 포함하라.
  • 읽기 경로의 **초기 무효 데이터 폐기 로직(Read Length + 1)**은 W5300형 디바이스에서 흔한 함정이므로 카운터로 명시적으로 처리하라.

Documents

Documents
Comments Write