cf-precheck
ChipFoundry MPW tapeout precheck tool. Validates user projects before shuttle submission by running a sequence of design-rule and consistency checks.
Installation
pip install cf-precheck
External tool dependencies
Some checks invoke external EDA tools that must be available on $PATH:
- KLayout — used by all Klayout DRC checks and the XOR check
- Magic — used by the optional Magic DRC check and LVS
- Netgen — used by the LVS check
Usage
cf-precheck -i <project_dir> -p <pdk_path> -c <caravel_root> [options] [check ...]
Required arguments
| Flag | Description |
|---|---|
-i, --input-directory |
Path to the user project directory |
-p, --pdk-path |
Path to the PDK installation (variant-specific, e.g. $PDK_ROOT/sky130A) |
-c, --caravel-root |
Path to the golden Caravel root (or set $GOLDEN_CARAVEL) |
Optional arguments
| Flag | Description |
|---|---|
-o, --output-directory |
Output directory (default: <project>/precheck_results/<timestamp>) |
--magic-drc |
Include the Magic DRC check (off by default) |
--skip-checks check [...] |
Skip specific checks |
-v, --verbose |
Show verbose/debug output |
--version |
Print version and exit |
Positional arguments
Pass one or more check names to run only those checks. If omitted, all applicable checks are run.
Example
# Run all checks
cf-precheck -i ./my_project -p $PDK_ROOT/sky130A -c ./caravel
# Run only specific checks
cf-precheck -i ./my_project -p $PDK_ROOT/sky130A -c ./caravel topcell_check gpio_defines
# Include the optional Magic DRC check
cf-precheck -i ./my_project -p $PDK_ROOT/sky130A -c ./caravel --magic-drc
# Skip certain checks
cf-precheck -i ./my_project -p $PDK_ROOT/sky130A -c ./caravel --skip-checks lvs oeb
Double-wide openframe
Double-wide projects are detected when exactly one of these GDS files is present:
gds/double_wide_openframe_project_wrapper.gds
| Field | Value |
|---|---|
| Type | double_wide |
| User module | double_wide_openframe_project_wrapper |
| Top module | double_wide_chip_io |
| Golden wrapper | double_wide_openframe_project_wrapper_empty |
| User area | 6754.63 × 4766.63 µm (59 GPIOs) |
Pass the double-wide harness root (not stock Caravel) as -c. That root must
provide:
gds/double_wide_openframe_project_wrapper_empty.gdsverilog/rtl/__double_wide_openframe_project_wrapper.v(port-list golden)
cf-precheck \
-i ../dw_openframe_user_project \
-p $PDK_ROOT/sky130A \
-c ../dw_openframe
XOR uses erase_box_double_wide.tcl (scaled openframe perimeter erase). OEB uses
the openframe CVC path with GPIO indices 0..58.
Checks
| Check | Description |
|---|---|
topcell_check |
Validates the top cell name in the GDS |
gpio_defines |
Validates GPIO directives in verilog/rtl/user_defines.v |
pdn |
Power distribution network check |
metal_check |
Metal density check |
xor |
XOR comparison against the golden wrapper to detect out-of-bounds edits |
magic_drc |
Full DRC using Magic (optional, off by default) |
klayout_feol |
Klayout Front End Of Line DRC |
klayout_beol |
Klayout Back End Of Line DRC |
klayout_offgrid |
Klayout off-grid violations check |
klayout_metal_minimum_clear_area_density |
Klayout metal density check |
klayout_pin_label_purposes_overlapping_drawing |
Klayout pin/label overlap check |
klayout_zero_area |
Klayout zero-area cell check |
spike_check |
Detects invalid paths in the design |
illegal_cellname_check |
Detects cells with illegal names |
oeb |
Output-enable-bar signal connectivity check |
lvs |
Layout vs. Schematic check |
Results
Check results are saved to <project>/.cf/project.json under the precheck key:
{
"precheck": {
"version": "1.0.0",
"timestamp": "2026-03-17T12:00:00+00:00",
"pdk": "sky130A",
"passed": false,
"checks": {
"topcell_check": { "status": "pass", "duration_s": 1.2 },
"gpio_defines": { "status": "fail", "duration_s": 0.8, "details": "..." }
}
}
}
Detailed logs are written to <project>/precheck_results/<timestamp>/logs/precheck.log.
License
Apache-2.0
Metadata
Release files for cf-precheck 1.3.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cf_precheck-1.3.7.tar.gz | 3.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cf_precheck-1.3.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.2 MB
Release files / cf_precheck-1.3.7.tar.gz
| Download URL | cf_precheck-1.3.7.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0e78cd2d0b015f75984faff2d2d970fbff14861bc708578c350082cdf846a61
|
|
BLAKE2b-256 checksum How to use checksums |
b5fddb837ca0989f4d7c9d4efe278b720227742a4398107a1ade044905b831ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logRelease files / cf_precheck-1.3.7-py3-none-any.whl
| Download URL | cf_precheck-1.3.7-py3-none-any.whl |
|---|---|
| Size | 3.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bc847eb97fdb2213b71d09da1304eee4c159b5dc9b7a2e031cabaf4961d77f0f
|
|
BLAKE2b-256 checksum How to use checksums |
556206f8e6eb1fe65617dbeb562ec75782ad5f4de0ec31e9fb22e62af5cc06ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency log