Setup

How the platform works, independent of any one board or site: how the hosts boot, how the network is laid out, what runs on each host, and how the web application reaches the boards.

Both sites are built the same way. One x86 gateway serves the boot chain and the web tier, a managed PoE switch carries both the network and the power, and each FPGA host hangs off one switch port with one FPGA board attached:

                        ┌────────────────────────────────────┐
      browser ──https──▶│ gateway             nginx + Django │
                        │ (one per site)  dnsmasq DHCP/TFTP, │
                        │                 NFS root, ssh hop  │
                        └──────────────────┬─────────────────┘
                                           │ eth-local
                        ┌──────────────────┴─────────────────┐
                        │ PoE switch      one VLAN per port  │
                        │                 PoE off/on by SNMP │
                        └───┬──────────────┬──────────────┬──┘
                            │              │              │
                     ┌──────┴─────┐ ┌──────┴─────┐ ┌──────┴─────┐
                     │ Pi host    │ │ Pi host    │ │ Pi host  … │
                     │ netboots   │ │            │ │            │
                     │ read-only  │ │            │ │            │
                     │ NFS root + │ │            │ │            │
                     │ tmpfs      │ │            │ │            │
                     │ camera,    │ │            │ │            │
                     │ fpgas-tt   │ │            │ │            │
                     └──────┬─────┘ └──────┬─────┘ └──────┬─────┘
                            │              │              │  USB / JTAG / PCIe
                     ┌──────┴─────┐ ┌──────┴─────┐ ┌──────┴─────┐
                     │ FPGA board │ │ FPGA board │ │ FPGA board │
                     └────────────┘ └────────────┘ └────────────┘

boot path: Pi ─DHCP▶ dnsmasq ─TFTP▶ kernel ─NFS▶ shared read-only root
user path: browser ─https▶ gateway ─ssh/proxy▶ Pi ─USB/JTAG/PCIe▶ board
prov path: CI ─build▶ root image ─pull▶ gateway ─▶ NFS root, before any Pi boots

One VLAN per port is the Welland scheme, and the gateway link is a VLAN trunk only there; PS1 is one flat network with a MAC table. fpgas-tt runs only on the Tiny Tapeout hosts, and only some hosts carry a camera. The pages below take that picture apart: