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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cf_precheck-1.3.6.tar.gz.
File metadata
- Download URL: cf_precheck-1.3.6.tar.gz
- Upload date:
- Size: 3.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22748a7e22c2a31ca67dd949d765765b5fdbc07cdcf31215709131796ae37359
|
|
| MD5 |
192c94e511a43af5a148d45155788da5
|
|
| BLAKE2b-256 |
d373f494ac45354a794050b372aac21ad35b4ff72b6126bfc32ba58eb8b86342
|
Provenance
The following attestation bundles were made for cf_precheck-1.3.6.tar.gz:
Publisher:
publish.yml on chipfoundry/cf-precheck
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cf_precheck-1.3.6.tar.gz -
Subject digest:
22748a7e22c2a31ca67dd949d765765b5fdbc07cdcf31215709131796ae37359 - Sigstore transparency entry: 2546475499
- Sigstore integration time:
-
Permalink:
chipfoundry/cf-precheck@928f7af086faa9cb4138ef129a7db9d492b2f5f8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/chipfoundry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@928f7af086faa9cb4138ef129a7db9d492b2f5f8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cf_precheck-1.3.6-py3-none-any.whl.
File metadata
- Download URL: cf_precheck-1.3.6-py3-none-any.whl
- Upload date:
- Size: 3.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b789d8b05846e3c6022e123808f4c155c952212bc74cba760c9abd836f821a26
|
|
| MD5 |
267d50e39d6fd15801a916a57e2e3839
|
|
| BLAKE2b-256 |
35d354e80ee6fac31709b0ec3694f76cffd7f24ccd5ecc7657beeb2175796656
|
Provenance
The following attestation bundles were made for cf_precheck-1.3.6-py3-none-any.whl:
Publisher:
publish.yml on chipfoundry/cf-precheck
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cf_precheck-1.3.6-py3-none-any.whl -
Subject digest:
b789d8b05846e3c6022e123808f4c155c952212bc74cba760c9abd836f821a26 - Sigstore transparency entry: 2546476017
- Sigstore integration time:
-
Permalink:
chipfoundry/cf-precheck@928f7af086faa9cb4138ef129a7db9d492b2f5f8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/chipfoundry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@928f7af086faa9cb4138ef129a7db9d492b2f5f8 -
Trigger Event:
push
-
Statement type: