Skip to the content
PCBKitNew board
4 layers100 × 64 mmS6la8, the printed circuit board in 3D

Open-source 8-channel logic analyzer: FX2LP + Spartan-6, with a sigrok driver. Design in progress, not yet built or tested.

Size
100 × 64 mm
Copper layers
4
Thickness
1.61 mm
Parts
155
Nets
172
Pads
684
Tracks, vias
3,142, 734
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
13 Oct 2026
Updated
16 Oct 2026

Overview

S6la8 is an open-source printed circuit board by OutBlade, from the OutBlade/s6la8 repository on GitHub. It is a 4-layer board of 100 × 64 mm with 155 parts on 172 nets, routed with 3,142 tracks and 734 vias.

It is built around the CY7C68013A-56PVXC, XC6SLX9-2TQG144C and SN74LVC245APWR(LX), with the TLV62569DBVR-TP, USBLC6-2SC6 and 24LC128-I/SN among its other parts. Its parts include 61 resistors, 58 capacitors, 14 ICs, 5 connectors and 4 diodes. It belongs with the sensors and measurement and fPGA and programmable logic boards and the FPGA and CPLD boards of this library.

Main components

11

README

README.md

s6la8

An open-source 8-channel logic analyzer built around a Cypress/Infineon CY7C68013A (FX2LP) USB controller and a Xilinx Spartan-6 XC6SLX9 FPGA, with a driver for sigrok.

s6la8 is a working name.

Status: design complete, not yet built or tested on hardware

The design files are complete and pass every check that can run without hardware. No board has been manufactured and no bitstream has been built yet, so build and test prototypes before ordering a batch (see docs/manufacturing.md).

PartState
Schematic (hardware/s6la8.zen)Complete, 155 parts. KiCad ERC: 0 errors; 7 "power pin not driven" findings are downgraded to warnings in the project file because the rails are fed by regulator outputs and the generated sheet has no power flags. Not yet reviewed by a second person
PCB layout (hardware/eda/s6la8.kicad_pcb)Fully routed. KiCad DRC: 0 errors, 0 unconnected, 1 warning (the probe header's silkscreen was trimmed at the board edge on purpose). Schematic parity: only naming differences. USB pair routed as a coupled 90 ohm pair. No signal- or power-integrity simulation
Manufacturing package (hardware/release.py)Gerbers, drill, JLCPCB BOM and pick-and-place, STEP, schematic and assembly PDFs, fab notes. Refuses to build unless DRC is clean
Enclosure (case/)Printable tray and lid (OpenSCAD), checked against KiCad's 3D model of the populated board: no collisions. Not yet printed
FX2 firmware (firmware/)Compiles with SDCC (4.0 KB of code). Never run
FPGA gateware (gateware/)Streaming, triggered capture into block RAM (32 K samples) or SDRAM (32 M samples), and board authentication pass simulation, the SDRAM against a model that checks the datasheet timing; Verilator lint clean; Yosys estimate 45 % of the LUTs. No ISE build yet, so pinout and timing are unverified
libsigrok driver (host/driver/)Compiles against libsigrok. Never run against a device
Production tools (tools/)Key generation, per-board provisioning and end-of-line test. Never run against a device

Board render

Enclosure

The schematic is in docs/schematic.pdf: one large generated sheet (2.7 x 1 m), best read zoomed in on screen.

Design

  • 8 channels through a 74LVC8T245 whose input side runs from the target's own supply (1.65 V to 5.5 V), with series resistors and ESD protection.
  • XC6SLX9 samples, triggers (four stages, level and edge) and buffers.
  • FX2LP carries data over USB 2.0 high speed in synchronous slave-FIFO mode, loads the FPGA bitstream (slave serial) and gives the host register access.
  • 256 Mbit SDRAM as a 32 M-sample deep buffer at up to 100 MS/s; the driver uses it automatically for captures over 32 K samples.
  • Fallback: a 74LVC245 copies the buffered probes onto FX2 port B, so the board is intended to work as a plain 24 MS/s fx2lafw analyzer with any released sigrok, with the FPGA unconfigured.

Rates implemented in gateware: up to 100 MS/s into the buffer, up to 25 MS/s streaming. 200 MS/s is a goal, not a feature.

Layout

The board is 100 x 64 mm, four layers (signal / GND / 3.3 V / signal). The flow is scripted and repeatable:

text
pcb layout hardware/s6la8.zen          # sync footprints and nets (Zener)
python layout/place.py eda/s6la8.kicad_pcb     # seed placement
python layout/route.py eda/s6la8.kicad_pcb     # Freerouting
python layout/fanout.py eda/s6la8.kicad_pcb    # plane vias
python layout/patch.py dump|rip|apply ...      # leftovers, see the file header
python layout/patch_solve.py ...               # grid router with rip-up (needs numpy)

(place.py, route.py, fanout.py and patch.py run with KiCad's bundled Python.)

The leftover pass is a plain grid router. It closed the connections Freerouting left open by cutting neighbouring tracks near a boxed-in pad and joining them again around the new copper. The tracks it lays are legal but not pretty (many short 0.05 mm jogs), and it moved parts of FD1, FD4, FD7, FLAGA, SLOE, MODE, SD_BA0, SD_DQ1 and SD_DQ12 without any regard for length or impedance.

layout/usb_pair.py re-routes the USB pair as a coupled pair and layout/silk.py sets up the production silkscreen; both can run again after pcb layout.

The leftover pass is a plain grid router. It closed the connections Freerouting left open by cutting neighbouring tracks near a boxed-in pad and joining them again around the new copper. One pin (FPGA pin 54, GND) needed a placement change: decoupling capacitors C40 (1.2 V) and C46 (3.3 V) swapped places so that the 1.2 V track no longer crosses the ground pin's exit. The grid router's tracks are legal but not pretty, and it moved parts of FD1, FD4, FD7, FLAGA, PKTEND, SLOE, MODE, SD_BA0, SD_DQ1 and SD_DQ12 without regard for length; none of these is critical at the rates implemented.

Before ordering a batch:

  1. Build the gateware in Xilinx ISE and confirm the pinout and timing.
  2. Build five prototypes and run the bring-up list in docs/manufacturing.md.
  3. Check every footprint against the datasheet of the exact part ordered.

Copy protection

The FPGA bitstream checks that it runs on a board you provisioned:

  • Every Spartan-6 has a factory-programmed, unique 57-bit Device DNA. (The XC6SLX9 has no bitstream encryption; only the LX75 and larger do.)
  • At the end-of-line test, tools/eol.py reads the DNA and writes SipHash-2-4(key, DNA) into the EEPROM. The key is 128 bits from tools/provision.py newkey and never leaves your machine.
  • A production bitstream (make -C gateware/ise bitstream PRODUCTION=1) contains the key, recomputes the hash and refuses to capture if it does not match. The sigrok driver says so plainly.
  • A cloned board has a different DNA. Making it work needs the key, which means reverse-engineering the undocumented Spartan-6 bitstream format, or patching the check out of the bitstream. Both are possible for a determined expert but far beyond copying a PCB.

Limits, and a decision for you. This repository is published under GPL and CERN-OHL-S, which explicitly allow anyone to build and sell copies. The open default build (auth_key_dev.vh) does not enforce the check, so a cloner can simply build their own unrestricted bitstream from this repository. The scheme only protects your product if the production gateware and key stay private: keep gateware/ (you are its sole author, so you may relicense it) and the key out of public repositories from now on, and protect the product name with a trademark. The firmware is derived from fx2lafw and stays GPL-2.0; the libsigrok driver stays GPL-3.0.

Manufacturing

text
python hardware/release.py A      # -> hardware/release/revA/

Cost, supplier choice, import and the German legal requirements (CE, WEEE, packaging) for a run of 100 are in docs/manufacturing.md. The enclosure is in case/: PETG, no supports, four M3x12 screws into heat-set inserts.

Building

Everything except the bitstream builds in the development container:

text
./dev.sh make -C firmware             # FX2 firmware -> firmware/build/s6la8-fx2.fw
./dev.sh make -C gateware sim lint    # simulation and lint
./dev.sh bash host/build.sh           # libsigrok with the s6la8 driver

On PowerShell use .\dev.ps1 instead of ./dev.sh.

The bitstream needs Xilinx ISE 14.7 WebPACK, which is x86-64 only (there is no open-source place-and-route for Spartan-6). On an x86-64 machine:

text
make -C gateware/ise bitstream            # PRODUCTION=1 for the locked build

On an Arm machine the same build runs in an x86-64 container; see gateware/ise/README-docker.md.

The hardware is described in Zener and generates a KiCad 10 project in hardware/eda/. hardware/gen_pins.py derives the FPGA pin constraints from the schematic.

USB identity

The firmware currently uses the pid.codes test ID 1209:0001. That is for development only and must be replaced by an assigned ID before any board is distributed.

Licenses

PartLicense
host/driver/, gateware/GPL-3.0-or-later
firmware/GPL-2.0-or-later (derived from sigrok-firmware-fx2lafw); bundled fx2lib is LGPL-2.1-or-later
hardware/CERN-OHL-S-2.0
hardware/lib/Symbols and footprints copied from the KiCad libraries (CC-BY-SA 4.0 with the KiCad library exception)

Full texts are in LICENSES/.

Parts

155
QtyValueFootprintReferences
39100nF 6.3Vstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC10, C11, C12, C13, C14, C15, C16, C17, C20, C21, C22, C23, C24, C25, C26, C27 +23
14100kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR1, R2, R3, R9, R11, R13, R15, R17, R19, R21, R23, R28, R40, R61
1133stdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR7, R24, R29, R30, R31, R32, R33, R34, R35, R36, R43
10100stdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR8, R10, R12, R14, R16, R18, R20, R22, R27, R60
910kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR37, R38, R39, R41, R51, R52, R57, R58, R59
71kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR25, R42, R45, R46, R47, R48, R54
5USBLC6-2SC6OutBlade_s6la8_lib:SOT-23-6U2, U3, U4, U5, U6
422uF 6.3Vstdlib_kicad-footprints_Capacitor_SMD:C_0805_2012MetricC2, C3, C5, C6
44.7kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR44, R49, R50, R53
4M3 DIN965 TopBottomstdlib_kicad-footprints_MountingHole:MountingHole_3.2mm_M3_DIN965_Pad_TopBottomH1, H2, H3, H4
310uF 10Vstdlib_kicad-footprints_Capacitor_SMD:C_0805_2012MetricC1, C4, C29
34.7uF 6.3Vstdlib_kicad-footprints_Capacitor_SMD:C_0805_2012MetricC18, C36, C44
3Fiducialstdlib_kicad-footprints_Fiducial:Fiducial_1mm_Mask2mmFID1, FID2, FID3
2100nF 10Vstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC30, C37
210uF 6.3Vstdlib_kicad-footprints_Capacitor_SMD:C_0805_2012MetricC28, C56
218pFstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC57, C58
22.2kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR55, R56
22.2uHstdlib_kicad-footprints_Inductor_SMD:L_1210_3225MetricL1, L2
25.1kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR5, R6
2LED GREENstdlib_kicad-footprints_LED_SMD:LED_0603_1608MetricD1, D3
2TLV62569DBVROutBlade_s6la8_lib:SOT-23-5U12, U13
11uFstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC19
11uF 10Vstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC38
12.2uF 6.3Vstdlib_kicad-footprints_Capacitor_SMD:C_0603_1608MetricC8
12.54mm 10 x 2 THT Horizontal Malestdlib_kicad-footprints_Connector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_HorizontalJ3
12.54mm 2 x 1 THT Vertical Malestdlib_kicad-footprints_Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
12.54mm 3 x 1 THT Vertical Malestdlib_kicad-footprints_Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ5
12.54mm 6 x 1 THT Vertical Malestdlib_kicad-footprints_Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ1
1220 100MHzstdlib_kicad-footprints_Resistor_SMD:R_0805_2012MetricFB2
1220 100MHzstdlib_kicad-footprints_Resistor_SMD:R_0603_1608MetricFB1
124LC128-I/SNOutBlade_s6la8_lib:SOIC-8_3.9x4.9mm_P1.27mmU1
124MHz 12pFstdlib_kicad-footprints_Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY2
1330stdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR26
1453kstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR4
1ASE-50.000MHZ-LC-TOutBlade_s6la8_lib:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmY1
1CY7C68013A-56PVXCOutBlade_s6la8_lib:SSOP-56_7.5x18.5mm_P0.635mmU11
1LED REDstdlib_kicad-footprints_LED_SMD:LED_0603_1608MetricD2
1LED YELLOWstdlib_kicad-footprints_LED_SMD:LED_0603_1608MetricD4
1MT48LC16M16A2P-6AOutBlade_s6la8_lib:TSOP-II-54_22.2x10.16mm_P0.8mmU14
1SN74LVC245APWROutBlade_s6la8_lib:TSSOP-20_4.4x6.5mm_P0.65mmU7
1SN74LVC2T45DCUROutBlade_s6la8_lib:VSSOP-8_2.3x2mm_P0.5mmU9
1SN74LVC8T245PWROutBlade_s6la8_lib:TSSOP-24_4.4x7.8mm_P0.65mmU8
1USB4105-GF-AOutBlade_s6la8_lib:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ4
1XC6SLX9-2TQG144COutBlade_s6la8_lib:TQFP-144_20x20mm_P0.5mmU10

Questions

How big is the S6la8 PCB?

It measures 100 × 64 mm and has 4 copper layers, 1.61 mm thick.

What parts does the S6la8 use?

155 parts, built around the CY7C68013A-56PVXC, XC6SLX9-2TQG144C, SN74LVC245APWR(LX) and TLV62569DBVR-TP. 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 S6la8 KiCad files?

From the OutBlade/s6la8 repository on GitHub, at the commit this page was made from: the board is hardware/eda/s6la8.kicad_pcb and its schematic hardware/eda/s6la8.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the S6la8 design in my own project?

Its repository states no licence, so its author keeps all rights: ask OutBlade before reusing the design.

Similar boards

  • 4 layers100 × 80 mmBuilt, the printed circuit board in 3D

    Built

    devbisme/ai-circuit-design-tests

    Tests of KiCad-related AI tools.

    243 parts10
  • 4 layers96.9 × 88.1 mmDigichiver, the printed circuit board in 3D

    Digichiver

    frindaddy/digichiver

    Archival hardware/firmware for the MM54104 Digitalker chip

    121 partsMIT
  • 2 layers100 × 63.7 mmFcart, the printed circuit board in 3D

    Fcart

    hi0t/fcart

    Open source flash cartridge

    115 parts23GPL-3.0
  • 6 layers98 × 64 mmLa ecp5, the printed circuit board in 3D

    La ecp5

    PaulBichl/VibePCB-LA

    A 16-channel, 100 MSa/s USB 2.0 HS logic analyzer: a Lattice ECP5 FPGA (CABGA-256 BGA) capturing into a 32 MB SDRAM (54-ball BGA), read out over an FT2232H. 98 x 64 mm, 6 layers.

    103 parts
  • 4 layers57.5 × 51 mmRomcart, the printed circuit board in 3D

    Romcart

    GOROman/gbc-rp2350b-romcart

    R0 review draft: RP2350B/Core2350B2 Game Boy cartridge carrier, KiCad/BOM/Gerber; not fabrication-ready

    29 parts
  • 4 layers100 × 86 mmCoralC5-Expansion, the printed circuit board in 3D

    CoralC5-Expansion

    SmallCoral/c5-car

    用 KiCad 10 打开 CoralC5-Expansion.kicadpro。这是 Coral-C5 的单槽扩展板,顶部 J14 接核心板,左右 J9、J8 各一组 2×24 排针,下方放 RJ45 和 microSD,右侧放 ESP32-C3-MINI-1U。100×86mm 板框为本项目暂定尺寸。

    79 parts
  • 4 layers44.9 × 47.2 mmThermalCam, the printed circuit board in 3D

    ThermalCam

    randomplum/autoliv_nv3_uvc

    Adapter for the Autoliv NV3 sensor providing USB video device class output

    131 parts9
  • 4 layers110 × 80 mmEsp32p4 extreme, the printed circuit board in 3D

    Esp32p4 extreme

    Andreuxxx1977/esp32-p4

    An open-hardware, actively cooled ESP32-P4 board for heavy multimedia work: a 2-lane MIPI camera, a 2-lane MIPI display, USB 2.0 High-Speed, 10/100 Ethernet, UHS-I microSD, 32 MB flash and 32 MB PSRAM.

    234 parts1CERN-OHL-P-2.0