Skip to the content
PCBKitNew board
2 layers50.8 × 50.8 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
50.8 × 50.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
57
Nets
60
Pads
215
Tracks, vias
491, 55
Pours
3
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 50.8 × 50.8 mm with 57 parts on 60 nets, routed with 491 tracks and 55 vias.

It is built around the 93LC46BT/SN, FT2232HL and LD1117S33TR(MS). Its parts include 23 capacitors, 10 resistors, 4 ICs, 4 connectors and 3 diodes.

Main components

3

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

57
QtyValueFootprintReferences
15100nCapacitors_SMD:C_0805_HandSolderingC3, C5, C7, C8, C9, C10, C11, C12, C13, C14, C16, C18, C20, C22, C23
4MountingHole_3.5mmMounting_Holes:MountingHole_3.5mm, , ,
310kResistors_SMD:R_0805_HandSolderingR5, R6, R7
3470Resistors_SMD:R_0805_HandSolderingR2, R3, R4
3LED_SmallLEDs:LED_0805D1, D2, D3
210uCapacitors_SMD:C_0805_HandSolderingC4, C15
227pCapacitors_SMD:C_0805_HandSolderingC1, C2
24.7uCapacitors_SMD:C_0805_HandSolderingC19, C21
2800mInductors_SMD:L_0805_HandSolderingL1, L2
1+3.3VMeasurement_Points:Test_Point_Keystone_5005-5009_CompactTP3
110nCapacitors_SMD:C_0805_HandSolderingC17
112MHzCrystals:Crystal_SMD_5032-2pin_5.0x3.2mm_HandSolderingY1
112kResistors_SMD:R_0805_HandSolderingR10
11kResistors_SMD:R_0805_HandSolderingR9
12.2kResistors_SMD:R_0805_HandSolderingR8
13.3uCapacitors_SMD:C_0805_HandSolderingC6
150Resistors_SMD:R_0603_HandSolderingR1
193LC46BTTO_SOT_Packages_SMD:SOT-23-6_HandsolderingU2
1AD9837WG:AD9837U3
1CLK_SELECTPin_Headers:Pin_Header_Straight_1x03_Pitch2.54mmJP1
1CONN_02X09Pin_Headers:Pin_Header_Straight_2x09_Pitch2.54mmJ4
1EXT_CLKConnectors:SMA_THT_Jack_StraightJ2
1FT2232HHousings_QFP:LQFP-64_10x10mm_Pitch0.5mmU4
1GNDMeasurement_Points:Test_Point_Keystone_5005-5009_CompactTP2
1LD1117S33TRWG:SOT-223U1
1OXETGCJANFOscillators:Oscillator_SMD_Abracon_ASE-4pin_3.2x2.5mm_HandSolderingY2
1USB_BUSB_Micro-B-circularJ1
1VBUSMeasurement_Points:Test_Point_Keystone_5005-5009_CompactTP1
1VOUTConnectors:SMA_THT_Jack_StraightJ3
1VOUTMeasurement_Points:Test_Point_Keystone_5005-5009_CompactTP4

Questions

How big is the Raw PCB?

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

What parts does the Raw use?

57 parts, built around the 93LC46BT/SN, FT2232HL and LD1117S33TR(MS). 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/wavegen_waveform-generator/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 layers88.9 × 114.3 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 =…

    190 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

Similar boards

  • 2 layers52 × 40 mmFT2232H Type C, the printed circuit board in 3D

    FT2232H Type C

    safarir/FT2232H-Type-C-Breakout

    FT2232H Breakout board using USB Type-C connector

    37 parts2
  • 2 layers65 × 56 mmRadioberry juice, the printed circuit board in 3D

    Radioberry juice

    pa3gsb/Radioberry-2.x

    Ham Radio hat for Raspberry PI

    87 parts678
  • 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
  • 4 layers160 × 100 mmRosco m68k, the printed circuit board in 3D

    Rosco m68k

    rosco-m68k/rosco_m68k

    Design, documentation and software for the Really Old School Computer (M68K)

    140 parts200
  • 4 layers44 × 64 mmJTAGProgrammer, the printed circuit board in 3D

    JTAGProgrammer

    anthony-bernaert/ftdi-jtag-programmer

    FTDI-based JTAG Programmer Circuit for FPGAs

    122 parts77CERN-OHL-P-2.0
  • 2 layers38 × 20.7 mmJTAG HW, the printed circuit board in 3D

    JTAG HW

    vanbwodonk/ft2232hl-jtag-clone

    Digilent JTAG clone hardware + eeprom firmware (.bin)

    38 parts73
  • 4 layers100 × 180 mmX65-sbc revB1, the printed circuit board in 3D

    X65-sbc revB1

    jsyk/x65

    The 65c02 and 65c816s-based modern retro computer

    344 parts59MIT
  • 4 layers165 × 107 mmSpla board, the printed circuit board in 3D

    Spla board

    khaydarian/spla

    SNES PPU Logic Analyzer

    290 parts32