Skip to the content
4 layers68 × 29.3 mmSFP xSPI Bridge, the printed circuit board in 3D

Mostek OCTOSPI/QUADSPI/SPI <-> SFP na FPGA Gowin GW1N-9: lacze swiatlowodowe 100 Mbaud 8b/10b z programowym odzyskiem zegara, biblioteka C dla STM32

Size
68 × 29.3 mm
Copper layers
4
Thickness
1.61 mm
Parts
53
Nets
52
Pads
247
Tracks, vias
479, 494
Pours
125
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
9 Oct 2026
Updated
9 Oct 2026

Overview

SFP xSPI Bridge is an open-source printed circuit board by bartkepl, from the bartkepl/SFP-xSPI_Bridge repository on GitHub, published under the MIT licence. It is a 4-layer board of 68 × 29.3 mm with 53 parts on 52 nets, routed with 479 tracks and 494 vias.

It is built around the XL-1608SYGC-06, OT322525MJBA4SL and SMF3.3A. Its parts include 19 capacitors, 17 resistors, 3 diodes, 3 connectors and 2 inductors. It belongs with the fPGA and programmable logic and interfaces and adapters boards and the FPGA and CPLD boards of this library.

Main components

3

README

README.md

SFP-xSPI Bridge

Mostek OCTOSPI / QUADSPI / SPI ↔ SFP na FPGA Gowin GW1N-9

Moduł łączący dwa mikrokontrolery STM32 łączem światłowodowym punkt–punkt, bez stosu IP. Host zapisuje i odczytuje ramki przez OCTOSPI, QUADSPI lub zwykłe SPI; FPGA koduje je w 8b/10b i wysyła przez moduł SFP z prędkością 100 Mbaud, a po drugiej stronie odzyskuje zegar programowo (soft-CDR z nadpróbkowaniem). Tryb przezroczysty UART pozwala użyć pary mostków jako „przedłużacza” portu szeregowego, bez żadnego sterownika.

status hw fpga link host pcb license

Status: projekt FPGA ukończony i zweryfikowany w symulacji (testy modułów i testy end-to-end dwóch kompletnych mostków), biblioteka C dla STM32 gotowa i przetestowana na modelu mostka, schemat i PCB rev. A zweryfikowane (raport), pliki produkcyjne wygenerowane — przed zamówieniem prototypu. Uruchomienie sprzętowe według planu.

text
STM32 ══ xSPI ══ GW1N-9 ══ LVDS ══ SFP ~~~ światłowód ~~~ SFP ══ LVDS ══ GW1N-9 ══ xSPI ══ STM32

Płytka

SFP-xSPI Bridge — widok pod kątem

Góra (TOP)Dół (BOTTOM)
TOPBOTTOM

Płytka 4-warstwowa (JLC04161H-7628): pary LVDS na warstwie zewnętrznej nad ciągłą masą, płaszczyzna 3,3 V na warstwie wewnętrznej. Na płytce: klatka SFP, złącze hosta 2 × 10 (raster 1,27 mm), złącze programowania Tag-Connect TC2050 i zworka wyboru trybu. Zasilanie wyłącznie 3,3 V z hosta.

Wygenerowane PDF-y: schemat · PCB · interaktywny BOM.


Najważniejsze cechy

  • Łącze 100 Mbaud 8b/10b przez standardowy moduł SFP bez wewnętrznego CDR (100BASE-FX / OC-3 lub 1000BASE-X, MM / SM, duplex lub BiDi).
  • Programowy odzysk zegara — 4× nadpróbkowanie serializerami IDES8 (400 Msps), śledzenie fazy z histerezą, tolerancja odchyłki częstotliwości do ok. ±3900 ppm; oba końce na niezależnych generatorach, bez bufora elastycznego.
  • Ramki z CRC-32 (1–1024 B treści, pole TYPE do multipleksowania strumieni), kontrola przepływu XON/XOFF i gotowość odbiornika w sekwencji bezczynności — dane nie giną przy wolnym odbiorcy.
  • Interfejs hosta wzorowany na SPI NOR — instrukcja i adres na 1 linii, dane na 1, 4 lub 8 liniach, SDR, tryb 0, SCLK do 40 MHz; współpracuje z OCTOSPI / XSPI / QUADSPI w trybie pośrednim i ze zwykłym SPI.
  • Spójne rejestry — zatrzask przy opadnięciu CS, zapis stosowany po podniesieniu CS; FIFO TX 4 KiB i RX 8 KiB, przerwanie HOST_IRQ_N.
  • Tryb przezroczysty UART — zworka lub rejestr; 8N1, 115 200 bit/s domyślnie, do ok. 3 Mbit/s, opcjonalnie RTS/CTS.
  • Zarządzanie modułem SFP — I2C master w FPGA: pamięć A0h / A2h, automatyczny odczyt diagnostyki DDM, sygnały TX_DISABLE / TX_FAULT / LOS / MOD_ABS.
  • Diagnostyka łącza — liczniki błędów kodu, CRC, długości, ramkowania, przepełnień i utrat synchronizacji; pętla zwrotna wewnątrz FPGA i echo ramek.
  • Biblioteka C dla STM32 konfigurowana przez #define, z portami HAL dla OCTOSPI, XSPI, QUADSPI i SPI.

Specyfikacja

ParametrWartość
FPGAGowin GW1N-UV9QN48C6/I5 (GW1N-9C), konfiguracja AUTOBOOT z wewnętrznej pamięci Flash
Łącze100 Mbaud, 8b/10b, ramki z CRC-32, bez retransmisji (błędy zgłaszane hostowi)
Przepustowośćdo ok. 9,9 MB/s treści (ramki 1024 B)
Interfejs hostaSPI 1-x-1, QSPI 1-0-4, OCTOSPI 1-0-8; SDR, tryb 0, SCLK ≤ 40 MHz
BuforyFIFO TX 4 KiB, FIFO RX 8 KiB (BSRAM)
Tryb UART8N1, 115 200 bit/s (do ok. 3 Mbit/s), opcjonalnie RTS/CTS
Moduły SFPINF-8074i, bez wewnętrznego CDR; SFP+ nieobsługiwane
Złącze hosta2 × 10, raster 1,27 mm: 3,3 V, SCLK, CS, IO0…IO7, DQS, IRQ, RST
Zasilanie3,3 V, ok. 0,45 A (moduł SFP do 300 mA)
PCB4 warstwy, 68 × 29,3 mm, 1,6 mm
Zajętość FPGA4483 LUT/ALU (52 %), 7 z 26 BSRAM; clk_sys 50 MHz (Fmax 56 MHz)

Architektura

text
             xSPI (SCLK ≤ 40 MHz)                                       LVDS 100 Mbaud
  STM32 ════════════════════════╗                                   ╔════════════════ SFP
                                ▼                                   │
          xspi_slave ─▶ csr_regs ─┬─▶ FIFO TX ─▶ framer + CRC ─▶ 8b/10b ─▶ OSER8 ─▶ TLVDS_OBUF ─▶ TD±
                                  │
                                  ├─◀ FIFO RX ◀─ deframer + CRC ◀─ 8b/10b ◀─ comma align ◀─ soft-CDR ◀─ IDES8 ◀─ RD±
                                  │
                                  ├─▶ I2C master + DDM ─▶ SFP SCL / SDA
                                  └─▶ sygnały SFP, LED, HOST_IRQ_N

  tryb UART:  UART_RX ─▶ pakietyzacja (ramki TYPE 0x01) ─▶ FIFO TX      FIFO RX ─▶ UART_TX
  zegary:     CLK_25M ─▶ rPLL 200 MHz (serializery) ─▶ CLKDIV /4 ─▶ clk_sys 50 MHz (logika)

Decyzje projektowe z uzasadnieniem: rejestr ADR. Pełna koncepcja (piny, zegary, warstwa fizyczna, PCB, moduły, komendy, rejestry, uruchomienie): doc/sfp-xspi-bridge-plan.md.

Arkusze schematu

ArkuszPlikZawartość
rootSFP_xSPI_Bridge.kicad_schpołączenia hierarchiczne, otwory montażowe
EXT_IOext_io.kicad_schFPGA (zasilanie, konfiguracja, magistrala hosta), złącze hosta J3, Tag-Connect J2, zworki, TVS
SFPsfp.kicad_schklatka SFP, filtry zasilania modułu, terminacja i bias RX, generator 25 MHz, diody LED

Dokumentacja

DokumentZawartość
Interfejs hosta (datasheet)wyprowadzenia J3, parametry czasowe, komendy xSPI, mapa rejestrów, tryb UART, przykłady
Biblioteka C (STM32)konfiguracja, porty HAL, API, weryfikacja
Koncepcja konstrukcjiarchitektura, przydział pinów, zegary, PCB, moduły, uruchomienie
Weryfikacja płytki rev. ADRC / ERC, zgodność z przydziałem pinów i INF-8074i, pary LVDS, zasilanie, pliki produkcyjne
Projekt FPGAmoduły VHDL, testbenche, symulacja, wyniki syntezy
Testy end-to-enddwa mostki połączone łączem: SPI, QSPI, OSPI, UART — z przebiegami
Decyzje (ADR)kontekst, warianty i konsekwencje decyzji projektowych

Dokumentacja jako serwis MkDocs (mkdocs 1.6, mkdocs-material 9.x):

text
python -m mkdocs serve        # podgląd: http://127.0.0.1:8000

Szybki start

FPGA — Gowin EDA (projekt vhdl/sfp_bridge/sfp_bridge.gprj, VHDL-2008):

text
cd vhdl/sfp_bridge
gw_sh build.tcl               # synteza, PnR i bitstream

Bitstream: vhdl/sfp_bridge/impl/pnr/sfp_bridge.fs, programowanie przez JTAG (Gowin Programmer lub openFPGALoader).

Symulacja — GHDL 5 (VHDL-2008), na Windows w WSL; modele prymitywów z instalacji Gowin EDA:

text
$env:GOWIN_SIMLIB = "<Gowin EDA>\IDE\simlib\gw1n"   # PowerShell
cd vhdl\sim
.\run_tests.ps1               # wszystkie testbenche; .\view.ps1 <tb> — przebieg w GTKWave

Firmware — biblioteka w firmware/sfp_bridge/: skopiować config/sfpb_config_template.h jako sfpb_config.h, ustawić transport i uchwyt peryferium, wywołać sfpb_init(&dev, NULL). Testy na PC: make -C firmware/tests.

Bez hosta — dwa mostki ze zwartą zworką MODE_SEL i dwa konwertery USB-UART (115 200 8N1) tworzą przezroczysty kanał szeregowy przez światłowód.


Weryfikacja

ObszarZakresWynik
Moduły FPGA24 samosprawdzające testbenche GHDL, testy mutacyjnePASS
Łączedwa końce z odchyłką 200 ppm i jitterem, CDR do ±1000 ppm i ±0,3 UIPASS
End-to-enddwa kompletne mostki (modele prymitywów Gowin): SPI, QSPI, OSPI, UART zworką i rejestremPASS
Syntezapełny układ, ograniczenia czasowe spełnione (clk_sys 56 MHz, clk_host 44 MHz)OK
Biblioteka C207 sprawdzeń na modelu mostka, 17 mutacji wykrytych; kompilacja portów dla L4R5, H563, F446, L476, G0B1PASS
PCBDRC i ERC bez błędów, przydział pinów 100 % zgodny z .cst, pary LVDS w regułachOK
Sprzęturuchomienie prototypu rev. Ado wykonania

Roadmap

  • Koncepcja — architektura, dobór FPGA i modułów SFP, protokół łącza, interfejs hosta
  • Schemat i PCB rev. A w KiCad 10
  • FPGA — wszystkie moduły, integracja, ograniczenia czasowe, testy end-to-end
  • Biblioteka C dla STM32 z testami na modelu mostka
  • Weryfikacja płytki i pliki produkcyjne rev. A
  • Zamówienie i montaż prototypu
  • Uruchomienie — konfiguracja FPGA, tryb UART przez światłowód, xSPI, I2C / DDM
  • Pomiary — wykres oczkowy RD±, BER ≥ 10¹² bitów, różne moduły i tłumiki optyczne
  • Rozszerzenia — 125 Mbaud, kolejna rewizja PCB z uwagami z uruchomienia

Struktura repozytorium

text
.
├── doc/          # dokumentacja (MkDocs): koncepcja, datasheet, ADR, opisy modułów, testy end-to-end
├── firmware/     # biblioteka C dla STM32 (sfp_bridge), przykład, testy na PC
├── media/        # rendery 3D płytki
├── pcb/          # projekt KiCad 10 (schemat hierarchiczny, PCB, reguły DRC, biblioteka lokalna, jobsety)
├── prod/         # pliki produkcyjne: Gerbery (.zip), PDF schematu i PCB, interaktywny BOM
└── vhdl/         # projekt FPGA (Gowin EDA): źródła, ograniczenia, testbenche i skrypty symulacji

Pliki produkcyjne generują jobsety KiCad: gen_prod.kicad_jobset (PDF, BOM), gen_gerber.kicad_jobset (Gerbery, wiercenia), gen_media.kicad_jobset (rendery 3D).


Referencje

  • Gowin Semiconductor: DS100 (GW1N series), UG114 (GW1N-9 pinout), UG286 (zegary), UG289 (programowalne I/O), UG290 (programowanie i konfiguracja), UG284 (schematy), SUG935 (ograniczenia fizyczne)
  • SFF Committee: INF-8074i (SFP MSA), SFF-8472 (diagnostyka modułów SFP)
  • IEEE 802.3, klauzula 36 (kod 8b/10b, 1000BASE-X PCS)
  • AMD/Xilinx XAPP224, XAPP523 — odzysk danych z nadpróbkowania
  • STMicroelectronics: dokumentacja peryferiów OCTOSPI / XSPI / QUADSPI i sterowników HAL STM32Cube

Licencja

MIT © 2026 bartkepl

Parts

53
QtyValueFootprintReferences
12100nCapacitor_SMD:C_0603_1608MetricC1, C2, C3, C4, C5, C6, C7, C8, C10, C12, C13, C19
710kResistor_SMD:R_0603_1608MetricR1, R3, R4, R5, R6, R8, R16
710uCapacitor_SMD:C_0603_1608MetricC9, C11, C14, C15, C16, C17, C18
41kResistor_SMD:R_0603_1608MetricR2, R7, R14, R15
4MountingHole_PadMountingHole:MountingHole_2.7mm_M2.5_DIN965_PadH1, H2, H3, H4
21uHInductor_SMD:L_0805_2012MetricL1, L2
24.7kResistor_SMD:R_0603_1608MetricR13, R17
249.9 1%Resistor_SMD:R_0402_1005MetricR9, R10
2LEDLED_SMD:LED_0603_1608MetricD2, D3
2SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP1, JP3
11.2kResistor_SMD:R_0603_1608MetricR12
12.1kResistor_SMD:R_0603_1608MetricR11
1Conn_02x10_Odd_EvenConnector_PinHeader_1.27mm:PinHeader_2x10_P1.27mm_VerticalJ3
1GW1N-6&9_QN48Package_DFN_QFN:QFN-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm_ThermalViasU1
1OT322525MJBA4SLOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmY1
1SFPConnector:Connector_SFP_and_CageJ1
1SMF3.3ADiode_SMD:D_SOD-123FD1
1SolderJumper_3_OpenJumper:SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mmJP2
1TC2050Connector:Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_VerticalJ2

Similar boards

  • 4 layers70 × 50 mmFinalized bluetooth remote, the printed circuit board in 3D

    Finalized bluetooth remote

    3pnguyen/esp32-bluetooth-media-keyboard

    Electronic project that provides the same control as wireless earbuds.

    62 partsMIT
  • 2 layers61 × 61.2 mmScooter board, the printed circuit board in 3D

    Scooter board

    d0ng3o/esp32_turd_scooter_controller

    Open-source ESP32-C3 replacement control board + ESP-IDF firmware for a decommissioned Bird One e-scooter, plus the reverse-engineered Lishui one-wire bus protocol.

    39 partsGPL-3.0
  • 4 layers65 × 56.5 mmHashat, the printed circuit board in 3D

    Hashat

    skot/hashat

    A Bitcoin ASIC mining HAT for Raspberry Pi

    109 parts27
  • 4 layers190 × 100 mmRioctrl controller, the printed circuit board in 3D

    Rioctrl controller

    festlv/rioctrl-hw

    Hardware design for modular CNC controller

    281 parts16CERN-OHL-S-2.0
  • 8 layers76 × 65.1 mmTi135 card, the printed circuit board in 3D

    Ti135 card

    johonkanen/efinix_soc_board

    Efinix Ti135N484I3 Linux control card for the AC lab PSU baseboard (KiCad 10, scripted schematic)

    410 parts
  • 4 layers200 × 216 mmIntegrated, the printed circuit board in 3D

    Integrated

    KarpelesLab/ledger_implant_detector

    A small hand-held tool for spotting extra conductive structures hidden inside the plastic shell of a hardware wallet (e.g. a Ledger).

    101 parts

Questions

How big is the SFP xSPI Bridge PCB?

It measures 68 × 29.3 mm and has 4 copper layers, 1.61 mm thick.

What parts does the SFP xSPI Bridge use?

53 parts, built around the XL-1608SYGC-06, OT322525MJBA4SL and SMF3.3A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the SFP xSPI Bridge KiCad files?

From the bartkepl/SFP-xSPI_Bridge repository on GitHub, at the commit this page was made from: the board is pcb/SFP_xSPI_Bridge.kicad_pcb and its schematic pcb/SFP_xSPI_Bridge.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the SFP xSPI Bridge design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).