Skip to the content
2 layers19.6 × 43.7 mmParport, the printed circuit board in 3D

riocore

Size
19.6 × 43.7 mm
Copper layers
2
Thickness
1.6 mm
Parts
23
Nets
53
Pads
126
Tracks, vias
181, 11
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
18 Jan 2024
Updated
2 Nov 2026

Overview

Parport is an open-source printed circuit board by multigcs, from the multigcs/riocore repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 19.6 × 43.7 mm with 23 parts on 53 nets, routed with 181 tracks and 11 vias.

It is built around the TXS0108EPW. Its parts include 17 resistors, 3 ICs and 3 connectors.

Main components

1

README

README.md

LinuxCNC-RIO - rewrite

RIO

rio-logo

License


Realtime-IO for Motion-Control

Table of Contents

About [blocked]

RIO is a cost-effective and flexible alternative to traditional hardware setups like Mesa boards, it's a code generator for using FPGA boards as Realtime-IO for LinuxCNC and other Motion-Control systems.

Furthermore, the complete configuration and hal is generated. a json configuration file serves as the basis

  • operates without a soft-core processor, relying solely on FPGA logic, which eliminates jitter and ensures fast, reliable performance
  • It supports communication via SPI (e.g., with Raspberry Pi 4) or Ethernet, providing flexibility for different hardware setups
  • Configuration is managed via JSON files, enabling easy customization of pin selection and other parameters. The tool automatically generates LinuxCNC configuration files (HAL/INI), saving significant setup time
  • using free FPGA-Toolchain or commercial (depends on the FPGA)
  • Compatible with a wide range of FPGA boards, including ICE40, ECP5, MAX10, Artix7, Gowin, CycloneIV, and TangNano9K, allowing users to choose hardware that fits their needs and budget
  • Supports open and closed-loop control for multiple motor types (e.g., stepper motors, DC servos), as well as mixed joint configurations
  • Primarily intended for LinuxCNC but also suitable for other systems such as ROS (Robot Operating System)

These features make RIO an attractive solution for hobbyists and professionals seeking a customizable, cost-effective Realtime-IO interface for Motion-Control systems

DISCLAIMER [blocked]

THE AUTHORS OF THIS SOFTWARE ACCEPT ABSOLUTELY NO LIABILITY FOR ANY HARM OR LOSS RESULTING FROM ITS USE. IT IS EXTREMELY UNWISE TO RELY ON SOFTWARE ALONE FOR SAFETY. Any machinery capable of harming persons must have provisions for completely removing power from all motors, etc, before persons enter any danger area. All machinery must be designed to comply with local and national safety codes, and the authors of this software can not, and do not, take any responsibility for such compliance

Help [blocked]

Boards [blocked]

list of all boards: BOARDS

Plugins/Drivers [blocked]

list of all plugins: PLUGINS

supported Toolchains [blocked]

list of all toolchains: TOOLCHAINS

Getting Started [blocked]

There are multiple ways of getting started.

  1. Installer-Script (tested on debian bookworm and trixie) installer.
  2. Install riocore on the linux host.
  3. Use docker.

Installer-Script (debian-bookworm only) [blocked]

if you have a Debian-Bookworm installation (e.g. from the LinuxCNC ISO or the LinuxCNC raspberry image) you can simply use this script to install all depends and the icestorm and gowin toolchain (gowin only on Intel/AMD)

text
wget -O- https://www.multixmedia.org/riocore-installer.sh | bash

Install ricore on the host [blocked]

  • installing via git:
text
git clone https://github.com/multigcs/riocore.git
cd riocore
  • installing dependencies via apt:
text
apt-get update
apt-get -y install python3 python3-pip python3-yaml python3-graphviz python3-pyqtgraph python3-pyqt5 python3-pyqt5.qtsvg python3-lxml python3-psutil python3-spidev

make sure that the toolchain matching your fpga is in the path:

text
export PATH=$PATH:/opt/oss-cad-suite/bin/
export PATH=$PATH:/opt/Xilinx/Vivado/2023.1/bin/
export PATH=$PATH:/opt/gowin/IDE/bin/
export PATH=$PATH:/opt/intelFPGA_lite/22.1std/quartus/bin/
export PATH=$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/

than copy a config file that is near to your setup:

text
cp riocore/configs/Tangoboard/config-spi.json my_config.json

DOCKER (alternative)

Using a TangNano9k or other board supported by the open-cad-suite? Check out the docker setup for an easy to use all in one way to run the riocore ui and generator, including flashing: DOCKER

Usage [blocked]

you can edit your configuration file by hand (text-editor) or using the config tool (rio-flow):

text
bin/rio-flow  riocore/configs/Tangbob/config.json

basic setup

after setup, you can save your configuration and generate the output-files in the setup-tool via buttons:

  • Generate : generates the output-files and write it into the './Output/' folder
  • Compile: compiles the Bitfile for your FPGA
  • Flash: writes the new bitfile onto the FPGA

you can also do this things on your console:

generate:

text
bin/rio-generator my_config.json
text
loading: my_config.json
loading board setup: TangNano9K
writing gateware to: Output/Tangoboard/Gateware
!!! gateware changed: needs to be built and flashed |||
loading toolchain gowin
writing linuxcnc files to: Output/Tangoboard/LinuxCNC

compile:

text
(
cd Output/BOARD_NAME/Gateware/
make clean all
)

flash:

text
(
cd Output/BOARD_NAME/Gateware/
make load
)

You can find all the LinuxCNC related files in 'Output/BOARD_NAME/LinuxCNC/',

to start LinuxCNC, you have to install the rio component first:

text
sudo halcompile --install riocore/files/rio.c

then you can start LinuxCNC with your new .ini file:

text
linuxcnc Output/BOARD_NAME/LinuxCNC/rio.ini

[!WARNING] all files will be overwritte by the generator tool

if you change the .ini file by hand, for example, you should make a copy of it

if you need an additional .hal file, you can incude it in the postgui_call_list.hal

rio will not overwrite this entry's

Prerequisites

you need the toolchain for your FPGA or in some cases the https://github.com/YosysHQ/oss-cad-suite-build

Flow [blocked]

Generator

mermaid
graph LR;
    BOARD.JSON--rio-flow-->CONFIG.JSON;
    CONFIG.JSON--rio-generator-->/Output;
    /Output-->/Gateware;
    /Gateware-->Makefile;
    /Gateware-->verilog-files;
    /Gateware-->pins.*;
    Makefile--make-->Bitfile;
    Bitfile--make load-->FPGA;
    /Output-->/LinuxCNC;
    /LinuxCNC-->riocomp.c;
    /LinuxCNC-->rio.ini
    /LinuxCNC-->rio-gui.xml
    /LinuxCNC-->*.hal;
    /Output-->/ROS;
    /Output-->/MQTT;
    /Output-->/Simulator;

LinuxCNC

mermaid
graph LR;
    LinuxCNC<-->rio.c;
    rio.c<-->riocomp.c;
    riocomp.c<--UDP/SPI-->FPGA;
    FPGA<--RS422/RS485-->SUB_FPGA;

ROS

mermaid
graph LR;
    ROS-Plugin-1<--TCP-->ROS-core
    ROS-Plugin-2<--TCP-->ROS-core
    ROS-Plugin-N<--TCP-->ROS-core
    ROS-core<--TCP-->rosbridge;
    rosbridge<--UDP/SPI-->FPGA;
    FPGA<--RS422/RS485-->SUB_FPGA;

MQTT

mermaid
graph LR;
    HTML+JS<--Websockets-->MQTT-Broker
    MQTT-Client-1<--MQTT-->MQTT-Broker
    MQTT-Client-2<--MQTT-->MQTT-Broker
    MQTT-Client-N<--MQTT-->MQTT-Broker
    MQTT-Broker<--MQTT-->mqttbridge;
    mqttbridge<--UDP/SPI-->FPGA;
    FPGA<--RS422/RS485-->SUB_FPGA;

JSLIB

mermaid
graph LR;
    nodejs<-->JSLIB
    JSLIB<--UDP-->FPGA;
    FPGA<--RS422/RS485-->SUB_FPGA;

Directory Structure

Source

text
riocore
├── bin ················ user tools / gui's
├── doc ················ documentation
├── dockerfiles ········ files to run the docker container
├┬─ ricore ············· main directory 
|├── configs ··········· some demo configurations
|├── gui ··············· widgets and functions for the gui tools
|├── files ············· helper scripts and files
|├── generator ········ the generator for the LinuxCNC configuration
|├── plugins ··········· location of the plugins
├── tests ·············· unit tests

Generated Output

text
Output
├┬─ BOARD_NAME ········· for each board
|├── Gateware ·········· Gateware-Files for the FPGA
|├── LinuxCNC ·········· LinuxCNC configuration (hal/ini/component)
|├── PYLIB ············· C and Python lib with testgui.py
|├── MQTT ·············· MQTT-Bridge
|├── ROS ··············· ROS-Bridge
|├── Simulator ········· Simulator-Sources
|├── JSLIB ············· Javascrit lib
|├── DOC ··············· some Documentation files

Parts

23
QtyValueFootprintReferences
1710kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR1, R2, R3, R4, R5, R6, R7, R8, R10, R11, R12, R13, R14, R15, R16, R17 +1
3TXS0108EPWPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU1, U2, U4
2Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1, J3
1Conn_02x13_Odd_EvenConnector_IDC:IDC-Header_2x13_P2.54mm_VerticalJ2

More from multigcs/riocore

12
  • 2 layers52.3 × 21.8 mmW5500, the printed circuit board in 3D

    W5500

    multigcs/riocore

    riocore

    38 parts91GPL-2.0
  • 2 layers34.1 × 30.3 mmSymio, the printed circuit board in 3D

    Symio

    multigcs/riocore

    riocore

    31 parts91GPL-2.0
  • 2 layers52.5 × 57.6 mmEcp5-stamp, the printed circuit board in 3D

    Ecp5-stamp

    multigcs/riocore

    riocore

    25 parts91GPL-2.0
  • 2 layers23 × 35.3 mmUln out, the printed circuit board in 3D

    Uln out

    multigcs/riocore

    riocore

    17 parts91GPL-2.0
  • 2 layers23 × 35.3 mmUln out, the printed circuit board in 3D

    Uln out

    multigcs/riocore

    riocore

    17 parts91GPL-2.0
  • 2 layers13.5 × 24.5 mmI2c, the printed circuit board in 3D

    I2c

    multigcs/riocore

    riocore

    8 parts91GPL-2.0
  • 2 layers16.2 × 28.6 mmModbus, the printed circuit board in 3D

    Modbus

    multigcs/riocore

    riocore

    8 parts91GPL-2.0
  • 2 layers24.9 × 21.9 mmStepstick, the printed circuit board in 3D

    Stepstick

    multigcs/riocore

    riocore

    8 parts91GPL-2.0
  • 2 layers13 × 22.5 mmOptoin, the printed circuit board in 3D

    Optoin

    multigcs/riocore

    riocore

    6 parts91GPL-2.0
  • 2 layers12.8 × 17.1 mmTransistor, the printed circuit board in 3D

    Transistor

    multigcs/riocore

    riocore

    5 parts91GPL-2.0
  • 2 layers19.8 × 26.8 mmEncoder, the printed circuit board in 3D

    Encoder

    multigcs/riocore

    riocore

    5 parts91GPL-2.0
  • 2 layers16.1 × 10.7 mmEncoder in, the printed circuit board in 3D

    Encoder in

    multigcs/riocore

    riocore

    4 parts91GPL-2.0

Similar boards

  • 4 layers68.6 × 53.3 mmIcezum, the printed circuit board in 3D

    Icezum

    FPGAwars/icezum

    :star2: IceZUM Alhambra: an Arduino-like Open FPGA electronic board

    218 parts357GPL-3.0
  • 2 layers94.5 × 74.4 mmAx58100-stm32-ethercat, the printed circuit board in 3D

    Ax58100-stm32-ethercat

    MetalMusings/MyOwnEtherCATDevice

    Documentation accompanying the "Make My Own EtherCAT device" video serie on Youtube.

    184 parts93
  • 4 layers80 × 100 mmBaseboard, the printed circuit board in 3D

    Baseboard

    NVIDIA-AI-IOT/my-jetson-nano-baseboard

    An open source Jetson Nano baseboard and tools to design your own.

    240 parts91
  • 4 layers80 × 73.8 mmESP32-Bit Pirate Dock, the printed circuit board in 3D

    ESP32-Bit Pirate Dock

    AndreiVladescu/ESP32-Bit-Pirate-Hardware

    Carrier breaker-board for the ESP32-S3 Devkit. Works great with the ESP32-Bit-Pirate firmware.

    49 parts85CERN-OHL-W-2.0
  • 4 layers42.8 × 36.8 mmDriver board, the printed circuit board in 3D

    Driver board

    blazer82/FT81x_Arduino_Driver

    FT81x on ST7701S Arduino Driver

    49 parts59MIT
  • 2 layers81.3 × 30.9 mmISABlaster, the printed circuit board in 3D

    ISABlaster

    scrapcomputing/ISABlaster

    A software-defined ISA card powered by a Raspberry Pi Pico

    24 parts53GPL-2.0
  • 4 layers29 × 50.3 mmToshiba hvac esp32, the printed circuit board in 3D

    Toshiba hvac esp32

    florianbrede-ayet/esphome-toshiba-hvac-controller

    ESPhome component & hardware to control Toshiba & Carrier HVAC units with WIFI interface

    7 parts38MIT
  • 4 layers65 × 100 mmUBMS-2, the printed circuit board in 3D

    UBMS-2

    grokicad/grokicad

    Grok powered schematic intelligence for your kicad repositories

    246 parts28

Questions

How big is the Parport PCB?

It measures 19.6 × 43.7 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Parport use?

23 parts, built around the TXS0108EPW. 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 Parport KiCad files?

From the multigcs/riocore repository on GitHub, at the commit this page was made from: the board is riocore/plugins/breakout/kicad/db25/parport/parport.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Parport design in my own project?

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