Unified process configuration format supporting both ChipFlow Backend and LibreLane flows.
This project provides:
- Unified TOML configuration format for process/PDK specifications
- Bidirectional conversion between ChipFlow JSON and unified TOML
- LibreLane variable extraction from unified configs
- Support for both Open and proprietary PDKs
# Install with uv
uv pip install -e .
# Convert ChipFlow JSON to unified TOML
uv run tools/convert_config.py json2toml \
chipflow.json output.toml \
--process sky130 --variant hd
# Convert TOML back to ChipFlow JSON
uv run tools/convert_config.py toml2json \
config.toml output.json
# Test round-trip conversion
uv run tools/convert_config.py test-cfg chipflow.json \
--process sky130 --variant hd- Configuration Format Specification
- Before/After Enhancement Comparison
- Unified Config Enhancement Details
- ChipFlow vs LibreLane Comparison
- GF130 PDK Structure Analysis
tools/convert_config.py - Main conversion tool with four commands:
- json2toml - Convert ChipFlow JSON to unified TOML
- toml2json - Convert unified TOML to ChipFlow JSON
- test - Test JSON → TOML → JSON round-trip
- test-cfg - Test with CfgFolder validation
regenerate_all_configs.sh- Regenerate all example configsverify_librelane_defaults.py- Verify LibreLane compatibility
See configs/processes/ for examples:
sky130_hd_generated.toml- Sky130 HD with LibreLane defaultsihp_sg13g2_generated.toml- IHP SG13G2gf130_bcd_generated.toml- GF130 BCD (proprietary)helvellyn2_base_generated.toml- Helvellyn2
Single TOML format supporting both systems:
[meta]
format_version = "2.0"
process = "sky130"
variant = "hd"
target_systems = ["chipflow", "librelane"]
[pdk]
name = "sky130A"
std_cell_library = "sky130_fd_sc_hd"
[pdk.power]
vdd_pin = "VPWR"
vdd_voltage = "1.80"
gnd_pin = "VGND"
[pdk.std]
liberty = { "nom_*" = ["${std_dir}/lib/sky130_fd_sc_hd__tt_025C_1v80.lib"] }
lef = ["${std_dir}/lef/sky130_fd_sc_hd_merged.lef"]
[pdk.routing]
min_layer = "met1"
max_layer = "met5"Automatic injection of LibreLane-required fields:
- PDK metadata (
name,std_cell_library) - Power/ground configuration (
vdd_pin,gnd_pin,power_pins) - Timing constraints (
max_transition) - Cell definitions (buffer, tap, endcap)
Full support (11/11 LibreLane fields):
- Sky130 (Open PDK)
- IHP SG13G2 (Open PDK)
- GF130 BCD (Proprietary)
- GF180MCU (Open PDK)
Partial support:
- Helvellyn2 (9/11 fields)
# Run tests
pytest
# Verify all configs
uv run verify_librelane_defaults.py
# Regenerate all example configs
./regenerate_all_configs.shSee LICENSE file.
Contributions welcome! Please see CONTRIBUTING.md for guidelines.