Skip to the content
PCBKitNew board
2 layers88.9 × 114.3 mmRaw, the printed circuit board in 3D

resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

Size
88.9 × 114.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
190
Nets
172
Pads
834
Tracks, vias
5,330, 346
Pours
9
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
28 Mar 2023
Updated
18 Jan 2024

Overview

Raw is an open-source printed circuit board by PCBench, from the PCBench/PCBench repository on GitHub, published under the MIT licence. It is a 2-layer board of 88.9 × 114.3 mm with 190 parts on 172 nets, routed with 5,330 tracks and 346 vias.

It is built around the SIP32408EVB, ST485EBDR and PLR135/T8, with the RT8299AZQW, FT2232HL and NC7WZ14P6 among its other parts. Its parts include 85 capacitors, 38 resistors, 14 ICs, 9 diodes and 7 connectors. It belongs with the FPGA and CPLD boards of this library.

Main components

11

README

README.md

PCBench: A Dataset for Printed Circuit Board Routing

PCBench is a dataset for PCB routing task, it includes a dataset consisting of 164 printed circuit boards (PCB), a data augmentation script to expand the dataset for supervised learning (SL) tasks, and a reinforcement learning (RL) environment.

Dataset

Folder Structure

All the PCB designs in our dataset are stored in the folder PCBs, where each PCB design is stored in a subfolder named {author/org}_{PCB_name}_{design_version(optional)}. Below is the folder structure of the dataset.

text
├── PCBs
│   ├── master_metadata.json
│   ├── subfolder1
│   │   ├── raw.kicad_pcb
│   │   ├── processed.kicad_pcb
│   │   ├── final.json
│   │   ├── metadata.json
│   │   ├── visual.png
│   ├── subfolder2
│   │   ├── raw.kicad_pcb
│   │   ├── processed.kicad_pcb
│   │   ├── final.json
│   │   ├── metadata.json
│   │   ├── visual.png
│   ├── ...

The raw.kicad_pcb is the raw PCB design file, process.kicad_pcb is the file after cleaning up, final.json stores only routing-related information used for ML tasks. metadata.json stores the meta information for each single PCB design. visual.png is a visualization of each single PCB design. master_meta.json contains metadata of all PCBs and global-level information.

PCB Routing Description Language (PCB-RDL)

We propose a JSON specification (final.json for each PCB design) called the PCB Routing Description Language (PCB-RDL) that expresses a PCB routing problem and its solutions intuitively using basic concepts in order to facilitate research into automated PCB routing using ML. Following figure shows is an example of PCB with marked components in PCB-RDL (Left) and it corrsponding PCB-RDL (Right).

PCB example

Data Augmentation

Run

The augmentation data can be generated with the script Scripts/Data_augmentation/augmentation.py. To generate 3 samples by randomly extracting 50% nets from the PCB 1Bitsy_1bitsy, please run the following command

text
cd Scripts/Data_augmentation/
python augmentation.py --num_samples 3 --net_ratio 0.5 --pcb_name 1Bitsy_1bitsy

Output

All the generated PCBs will be stored in the folder named augmented_data under Scripts/Data_augmentation/. In augmented_data, all the generated samples will be stored in a subfolder with the name of selected PCB. Each generated sample has the name sample_index.json. For example, the above command will generate the following file under Scripts/Data_augmentation/

text
├── augmented_data
│   ├── 1Bitsy_1bitsy
│   │   ├── 1.json
│   │   ├── 2.json
│   │   ├── 3.json

RL environment

Installation

The RL environment requires Python >= 3.7. You can simply install the environment with the following commands:

text
git clone https://github.com/PCBench/PCBench.git
cd PCBench
python setup.py install

After installation, open a Python console and type

text
from RLEnv.EnvLayer.PCBRoutingEnv import PCBRoutingEnv

If no error occurs, you have successfully installed the PCB routing environment.

API Usage

The following content shows an example of API usage of PCBRoutingEnv.

text
from RLEnv.EnvLayer.PCBRoutingEnv import PCBRoutingEnv
import random

resolution = [0.5, 0.5]
pcb_folder = '../PCBs/'
pcb_names = ["1Bitsy_1bitsy"]
iters = 30
env = PCBRoutingEnv(resolution=resolution, pcb_folder=pcb_folder, pcb_names=pcb_names)
obs, info = env.reset()
for _ in range(iters):
    act = random.randint(0,5)
    obs, rew, terminal, _, info = env.step(act)
    if terminal:
        env.reset()

You can find more examples of customizing functions of reward and state observation from RLEnv/examples.ipynb.

Parts

190
QtyValueFootprintReferences
440.1uFCapacitors_SMD:C_0805C1, C2, C3, C11, C14, C18, C25, C26, C27, C29, C30, C31, C32, C33, C34, C35 +28
1510uF Capacitors_SMD:C_1206C10, C13, C15, C17, C20, C28, C45, C46, C52, C54, C55, C61, C70, C71, C81
1110kResistors_SMD:R_0805R1, R2, R3, R5, R11, R12, R15, R16, R21, R22, R38
101uF Capacitors_SMD:C_0805C24, C56, C62, C66, C67, C73, C75, C77, C80, C84
9Ferrite beadResistors_SMD:R_0805FB1, FB2, FB3, FB4, FB5, FB6, FB7, FB8, FB9
72.54mm 2x10 right angle female headerSocket_Strips:Socket_Strip_Angled_2x10_MirrorMOD1, MOD2, MOD3, MOD4, MOD5, MOD6, MOD7
722uFCapacitors_SMD:c_elec_6.3x7.7C43, C44, C50, C51, C53, C59, C60
6100kResistors_SMD:R_0805R23, R27, R31, R32, R33, R35
42.2kResistors_SMD:R_0805R6, R34, R36, R37
4BAT54 2x common cathodeTO_SOT_Packages_SMD:SOT-23D2, D4, D6, D7
3150Resistors_SMD:R_0805R14, R24, R28
3SiP32408TDFN4:TDFN4U9, U10, U11
210Resistors_SMD:R_0805R8, R9
2100pFCapacitors_SMD:C_0805C49, C58
216k 1%Resistors_SMD:R_0805R20, R29
21nFCapacitors_SMD:C_0805C19, C23
220pFCapacitors_SMD:C_0805C12, C16
2240Resistors_SMD:R_0805R13, R19
24.7kResistors_SMD:R_0805R4, R7
25.1k 1%Resistors_SMD:R_0805R26, R30
2750Resistors_SMD:R_0805R17, R18
28.5VWMTO_SOT_Packages_SMD:SOT-23D8, D9
2RT8299AHousings_SOIC:SOIC-8-1EP_3.9x4.9mm_Pitch1.27mmU7, U8
110/100baseT transformerHousings_SOIC:SOIC-16_7.5x10.3mm_Pitch1.27mmT1
110uFCapacitors_SMD:C_1206C22
112 MHzCrystals:Crystal_HC49-SD_SMDX1
112k 1%Resistors_SMD:R_0805R10
11nFCapacitors_SMD:C_1808C21
11uFCapacitors_SMD:C_0805C47
12.5mm 5-24V 5AConnect:BARREL_JACKCON4
1200mA PTCResistors_SMD:R_1206F1
122uHAir_Coils_SML_NEOSID:COIL_SMD_6mm_1mmCrtYdL1
122uHCOIL_SMD_6mm_1mmCrtYdL2
125.0000 MHz 15ppm 8pFCrystals:crystal_FA238-TSX3225X2
127k 1%Resistors_SMD:R_0805R25
12A PTCResistors_SMD:R_1812F2
12N7002PTO_SOT_Packages_SMD:SOT-23Q2
15-24V 16ATerminal_Blocks:TerminalBlock_Pheonix_PT-3.5mm_4polCON5
193C56Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mmU1
1AOD4189TO_SOT_Packages_SMD:TO-252-2LeadQ3
1AP2204K-5.0TO_SOT_Packages_SMD:SOT-23-5U4
1BAT54 2x common anodeTO_SOT_Packages_SMD:SOT-23D3
1DMN3190LDWTO_SOT_Packages_SMD:SC-70-6Q1
1FT2232HHousings_QFP:LQFP-64_10x10mm_Pitch0.5mmU2
1LED_BGRLEDs:LED_RGB_PLLC-6D5
1LOGOWiggleport:wiggle-spine-back-silkG***
1LOGOWiggleport:wiggle-spine-front-silkG***
1NC7WZ14TO_SOT_Packages_SMD:SC-70-6U3
1PLR135TOSLINK:Everlight-PLR135-T8CON6
1PLT133TOSLINK:Everlight-PLT133-T6ACON7
1ST485EHousings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mmU5
1Si5351BHousings_DFN_QFN:QFN-20-1EP_4x4mm_Pitch0.5mmU14
1TCR2EF12TO_SOT_Packages_SMD:SOT-23-5U13
1TCR2EF25TO_SOT_Packages_SMD:SOT-23-5U12
1TVS DIODE 5.5VWMTO_SOT_Packages_SMD:SC-70-6D1
1USB-AConnect:USB_A_VerticalCON3
1USB-BConnect:USB_BCON1
1XLR-3 FemaleConnect:XLR3MCCON2
1iCE40-HX1K-TQ144Housings_QFP:TQFP-144_20x20mm_Pitch0.5mmU6

The 181 most common of 190 parts.

Questions

How big is the Raw PCB?

It measures 88.9 × 114.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Raw use?

190 parts, built around the SIP32408EVB, ST485EBDR, PLR135/T8 and RT8299AZQW. 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 Raw KiCad files?

From the PCBench/PCBench repository on GitHub, at the commit this page was made from: the board is PCBs/wiggleport_wiggle-spine/raw.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Raw 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).

More from PCBench/PCBench

12
  • 2 layers398.2 × 398.2 mmLargeWordClock LargeKickstarter, the printed circuit board in 3D

    LargeWordClock LargeKickstarter

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    1,591 parts21MIT
  • 4 layers95 × 95 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    455 parts21MIT
  • 2 layers90 × 90 mmMod12003 mod12003, the printed circuit board in 3D

    Mod12003 mod12003

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    452 parts21MIT
  • 2 layers100 × 100 mmMod1base mod1base, the printed circuit board in 3D

    Mod1base mod1base

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    187 parts21MIT
  • 6 layers117 × 55 mmKiwiSDR PCB kiwi, the printed circuit board in 3D

    KiwiSDR PCB kiwi

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    173 parts21MIT
  • 4 layers143 × 74 mmKitspace lpa96, the printed circuit board in 3D

    Kitspace lpa96

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    161 parts21MIT
  • 2 layers101.6 × 99.7 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    158 parts21MIT
  • 4 layers36.1 × 32.7 mmKitspace tri panel 4up r0.1, the printed circuit board in 3D

    Kitspace tri panel 4up r0.1

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    157 parts21MIT
  • 2 layers101.6 × 99.7 mmKarabas nano karabas nano revB, the printed circuit board in 3D

    Karabas nano karabas nano revB

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    147 parts21MIT
  • 4 layers65 × 60 mmReworkctf reworkctf, the printed circuit board in 3D

    Reworkctf reworkctf

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    143 parts21MIT
  • 2 layers99.1 × 99.1 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    77 parts21MIT
  • 2 layers645.9 × 78.2 mmAnalog esr meter esr meter rev a, the printed circuit board in 3D

    Analog esr meter esr meter rev a

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    71 parts21MIT

Similar boards

  • 2 layersWiggle spine, the printed circuit board in 3D

    Wiggle spine

    gitter-badger/wiggleport

    Modular I/O for multi-channel sound, light, and motion

    173 partsMIT
  • 4 layers49 × 34 mmC92 decoder A1, the printed circuit board in 3D

    C92 decoder A1

    slonket/c92-decoder

    An MM1/MM2/Lenz decoder for classic Märklin locomotives and the pre-mfx digital systems.

    93 partsCERN-OHL-S-2.0
  • 4 layers53.3 × 68.6 mmHamShield1, the printed circuit board in 3D

    HamShield1

    EnhancedRadioDevices/HamShield1

    HamShield 1.0 Hardware

    381 parts8
  • 2 layers82.6 × 48.9 mmGlitch adaptor v3, the printed circuit board in 3D

    Glitch adaptor v3

    wanming2008/glitch_adaptor_v3

    Voltage glitching driver board using LM5134 and IRF7607

    45 parts1
  • 4 layers160 × 62 mmGp4-hil, the printed circuit board in 3D

    Gp4-hil

    azonenberg/openfpga

    Open FPGA tools

    450 parts259
  • 2 layers116.6 × 93.3 mmUsbdac, the printed circuit board in 3D

    Usbdac

    rspg/usb_sound_card_with_pico

    USB Sound Card with Raspberry Pi Pico Hard&Firm

    125 parts14