1
0
mirror of synced 2026-01-16 16:18:00 +00:00
2021-01-23 10:14:15 -05:00
2021-01-23 09:15:08 -05:00
2020-12-14 13:30:32 +01:00
2021-01-10 17:01:04 +01:00
2021-01-23 12:01:34 +01:00

A FPGA on a SBus card...

Goal

The goal of this repository is to be able to interface a modern (2020 era) FPGA with a SBus host. SBus was widely used in SPARCstation and compatibles system in the first halt of the 90s. It was progressively displaced by PCI from the mid-90s onward.

So unless you're a retrocomputing enthusiast with such a machine, this is useless. To be honest, even if you are such an enthusiast, it's probably not that useful...

I'm a software guy and know next to nothing about hardware design, so this is very much a work-in-progress and is likely full of rookie mistakes.

To save on PCB cost, the board is smaller than a 'true' SBus board; the hardware directory includes an OpenSCAD 3D-printable extension to make the board compliant to the form factor (visible in the pictures in 'Pictures').

Current status

2021-01-23: The adapter board seems to work fine in two different SS20. Currently the embedded PROM code exposes three devices in the FPGA:

  • "RDOL,cryptoengine": exposes a (way too large) polynomial multiplier to implement GCM mode and a AES block. Currently used to implement DMA-based acceleration of AES-256-CBC through /dev/crypto. Unfortunately OpenSSL doesn't support AES-256-GCM in the cryptodev engine, and disagree with NetBSD's /dev/crypto on how to implement AES-256-CTR. And the default SSH cannot use cryptodev, it closes all file descriptors after cryptodev has opened /dev/crypto... still WiP.

  • "RDOL,trng": exposes a 5 MHz counter (didn't realize the SS20 already had a good counter) and a so-far-not-true TRNG (implemented by a PRNG). The 'true' random generators I've found make Vivado screams very loudly when synthesizing... anyway both works fine in NetBSD 9.0 as a timecounter and an entropy source. still WiP.

  • "RDOL,sdcard": trying to expose the micro-sd card slot as a storage device, at first using SPI mode. Not working, as I can't reliably get the FPGA to read from the micro-sd card in SPI mode. Frustratingly, the HW should be fine: a Linux--on-LiteX-VexRiscV SoC has no issue loading both the kernel and the filesystem image from a micro-sd card, using native SD mode - though it won't read the card in SPI mode either. Very much WiP.

The hardware

Directory 'sbus-to-ztex'

The custom board is a SBus-compliant (I hope...) board, designed to receive a ZTex USB-FPGA Module 2.13 as a daughterboard. The ZTex module contains the actual FPGA (Artix-7), some RAM, programming hardware, etc. The SBus board contains level-shifters ICs to interface between the SBus signals and the FPGA, a serial header, some Leds, a JTAG header, and a micro-sd card slot.

The PCB was designed with Kicad 5.0

The gateware

Directory 'sbus-to-ztex-gateware'

The function embedded in the FPGA currently includes the PROM, lighting Led to display a 32-bits value, and a GHASH MAC (128 polynomial accumulator, used for the AES-GCM encryption scheme). The device is a fairly basic scale, but should be able to read from the PROM and read/write from the GCM space with any kind of SBus burst (1, 2, 4, 8 or 16 words).

The gateware is currently synthesized with Vivado 2020.1

The software

Directory 'NetBSD'

A basic driver for NetBSD 9.0/sparc, with ioctl to access the LED and GHASH registers, along with a small test code.

Description
Stuff to put a FPGA in a SBus system (SPARCstation)
Readme 40 MiB
Languages
Python 33.9%
C 23.3%
Verilog 19.6%
VHDL 11.2%
Forth 3.9%
Other 8%