https://github.com/chipfoundry/cf-precheck
https://github.com/chipfoundry/cf-precheck
Last synced: 18 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/chipfoundry/cf-precheck
- Owner: chipfoundry
- License: apache-2.0
- Created: 2025-04-29T16:35:30.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-05-07T22:46:31.000Z (2 months ago)
- Last Synced: 2026-05-08T00:32:02.133Z (2 months ago)
- Language: Shell
- Size: 55.4 MB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 43
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# cf-precheck
ChipFoundry MPW tapeout precheck tool. Validates user projects before shuttle submission by running a sequence of design-rule and consistency checks.
## Installation
```bash
pip install cf-precheck
```
### External tool dependencies
Some checks invoke external EDA tools that must be available on `$PATH`:
- [KLayout](https://www.klayout.de/) — used by all Klayout DRC checks and the XOR check
- [Magic](http://opencircuitdesign.com/magic/) — used by the optional Magic DRC check and LVS
- [Netgen](http://opencircuitdesign.com/netgen/) — used by the LVS check
## Usage
```
cf-precheck -i -p -c [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: `/precheck_results/`) |
| `--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
```bash
# 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
```
## 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 `/.cf/project.json` under the `precheck` key:
```json
{
"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 `/precheck_results//logs/precheck.log`.
## License
Apache-2.0