原始内容
pcb
pcb is a command-line tool for circuit board projects written in Zener.
Zener is a Starlark-based language for describing PCB schematics; pcb builds
those designs, manages dependencies, and generates KiCad layout files.
Documentation | Language reference
Installation
Install the pcb launcher on macOS, Linux, or WSL2:
curl -fsSL https://raw.githubusercontent.com/diodeinc/pcb/main/install.sh | bash
For native Windows, run this command in PowerShell:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/diodeinc/pcb/main/install.ps1 | iex"
The launcher downloads and runs the pcbc toolchain requested by each project.
The Unix installer writes pcb to $HOME/.local/bin by default. The Windows
installer writes pcb.exe to %USERPROFILE%\.pcb\bin by default. Set
PCB_INSTALL_DIR to choose a different directory.
KiCad 10.x is required only for generating and editing layouts. Building and validating Zener files does not require KiCad.
Native Windows support is experimental. Use WSL2 if a command does not work in the native environment.
Toolchain management
pcb manages pcbc, the standard library, and bundled sidecars such as
pcb-rectify as one versioned toolchain.
pcb toolchain show # Show the active and latest matching versions
pcb toolchain show --offline # Use installed and cached data only
pcb toolchain install latest # Install the latest stable toolchain
pcb toolchain prune --dry-run # Preview removable downloads and old patches
pcb toolchain prune # Remove them
pcb toolchain repair latest # Validate and restore a toolchain
Install and repair accept latest, nightly, a lane such as 0.4, or an exact
version such as 0.4.9. Pruning preserves the newest patch in each lane, the
active version, prereleases, nightly, and local toolchains. pcb self update
updates the shim and managed channels and fails if any requested update fails.
Developing from source
git clone https://github.com/diodeinc/pcb.git
cd pcb
cargo build -p pcb -p pcbc
./install.sh --local
Quick start
Create blinky.zen:
# ```pcb
# [workspace]
# pcb-version = "0.4"
# ```
Resistor = Module("@stdlib/generics/Resistor.zen")
Led = Module("@stdlib/generics/Led.zen")
VCC = Power()
GND = Ground()
LED_ANODE = Net()
Resistor(name="R1", value="1kohm", package="0402", P1=VCC, P2=LED_ANODE)
Led(name="D1", package="0402", color="red", A=LED_ANODE, K=GND)
Board(name="blinky", layers=4, layout_path="layout/blinky")
Build the design:
pcb build blinky.zen
Generate a KiCad layout:
pcb layout blinky.zen
Repository layouts
Zener projects use one of two repository shapes.
Board repository
A board repository contains one board plus any local modules and components it owns:
MyBoard/
├── pcb.toml # Workspace and board manifest
├── MyBoard.zen # Board schematic
├── layout/ # KiCad layout files
├── modules/ # Reusable circuit modules
│ └── PowerSupply/
│ ├── PowerSupply.zen
│ └── pcb.toml
├── components/ # Custom component definitions
│ └── Manufacturer/
│ └── MPN/
│ ├── MPN.zen
│ └── pcb.toml
└── vendor/ # Vendored dependencies
Create one with:
pcb new board MyBoard https://github.com/myorg/MyBoard
Board repository pcb.toml:
[workspace]
repository = "github.com/myorg/MyBoard"
pcb-version = "0.4"
[board]
name = "MyBoard"
path = "MyBoard.zen"
description = "Replace with concise board description."
Registry repository
A registry repository contains reusable packages and no board:
registry/
├── pcb.toml # Workspace manifest
├── components/ # Component packages
│ └── TPS54331/
│ ├── TPS54331.zen
│ ├── TPS54331.kicad_sym
│ ├── TPS54331.kicad_mod
│ └── pcb.toml
└── modules/ # Reusable module packages
└── UsbCSink/
├── UsbCSink.zen
└── pcb.toml
Registry pcb.toml:
[workspace]
repository = "github.com/myorg/registry"
pcb-version = "0.4"
Common commands
pcb new board <NAME> <REPO_URL> # Create a board repository
pcb build [PATHS...] # Build and validate designs
pcb sync # Reconcile imports and dependency manifests
pcb layout <FILE> # Generate layout files
pcb import <KICAD_PRO> <OUTPUT_DIR> # Import a KiCad project
Run pcb help or pcb help <command> for the full command reference.
License
Diode-authored code and docs are licensed under the MIT License except where otherwise noted. See LICENSE and THIRD_PARTY_NOTICES.md.
Acknowledgments
- Made possible by the excellent KiCad PCB design suite.
- Built on starlark-rust by Meta.
- Inspired by atopile, tscircuit, and others.