Skip to content

ahmednofal/mpw_precheck

 
 

Repository files navigation

MPW Precheck

Prerequisites

  • Docker

Setup

Docker

You can either build the docker locally or fetch it from dockerhub.

Build Docker Locally

To build the necessary docker locally, run:

    cd dependencies
    sh build-docker.sh

Pull Docker from Dockerhub

To pull the necessary docker from dockerhub, run:

    docker pull efabless/mpw_precheck:latest

Install the PDK

If you don't have the skywater-pdk installed, run:

    export PDK_ROOT=<absolute path to where skywater-pdk and open_pdks will reside>
    cd dependencies
    sh build-pdk.sh

Before Using

  • Before you run the precheck tool, make sure you go through https://opensource.google/docs/releasing/preparing/ and cover the requirements.

  • Overwrite verilog/gl/user_project_wrapper.v with your synthesized netlist make sure the netlist includes power information. Otherwise, point to it properly in your info.yaml. You can alternatively use spice files for both caravel and user_project_wrapper. Keep on reading for this point to make more sense.

  • Make sure you have the top level GDS-II under a directory called gds/; thus containing gds/user_project_wrapper.gds, this directory should be compressed and the script will use your Makefile to uncompress it.

  • Please create a file ./third_party/used_external_repos.csv and add to it all repository name,commit hash for any external github repository that you are using to build this project.

  • Please include any useful statistics about your design, i.e. cell count, core utilization, etc. in a .csv file under ./signoff/<macro-name>/final_summary_report.csv. If you're using OpenLANE then, this file should be created automatically in <run path>/reports/final_summary_report.csv.

What Does the Script Do?

It runs a sequence of checks and aborts with the appropriate error message(s) if any of them fails.

The steps are as follows:

  • License:
    • The root directory of the project contains at least one of the approved licenses and does not contain any of the prohibitted licenses
    • All source files contain an approved SPDX header
  • Yaml:
  • Manifest:
    • Caravel version used in development is the latest
  • Makefile:
    • Makefile targets contain at least compression and uncompression for the user_project_wrapper.gds file
  • Defaults:
  • Documentation:
    • Documentation file README.md exists and does not use any non-inclusive language
  • Consistency:
    • Port names match that of the golden wrapper in user_project_wrapper_empty.gds or user_project_wrapper_analog_empty.gds
  • XOR:
    • No modification in the user_project_wrapper(versus default user_project_wrapper.gds in caravel_user_project for digital projects and caravel_user_project_analog for analog projects) outside the user defined area lower left corner (0,0) and upper right corner (2920, 3520)
  • MagicDRC:
    • The user_project_wrapper.gds does not have any DRC violations(using magic vlsi tool)
  • KlayoutFEOLDRC:
  • KlayoutOffgrid:
    • The user_project_wrapper.gds does not contain any shapes that have offgrid violations(rules x.1b, x.3a, x.2, x.2c)
  • KlayoutFOMDensity:
  • KlayoutMetalMinimumClearAreaDensity:

Current Assumptions

  • The user module name is user_project_wrapper (or `user_analog_project_wrapper' for caravel_user_project_analog)
  • Caravel is submoduled inside the user project or installed at a different path specified by CARAVEL_ROOT.

How To Run

Mount the docker file:

export PDK_ROOT=<Absolute path to parent of sky130A. Installed PDK root.>
export INPUT_DIRECTORY=<Absolute path to the user project path>
# if caravel is submoduled under the user project, run "export CARAVEL_ROOT=$INPUT_DIRECTORY/caravel"
export CARAVEL_ROOT=<Absolute path to caravel>
sh docker-mount.sh

Run the following command:

usage: mpw_precheck.py [-h] --input_directory INPUT_DIRECTORY --caravel_root
                       CARAVEL_ROOT --pdk_root PDK_ROOT
                       [--output_directory OUTPUT_DIRECTORY] [--private]
                       [check [check ...]]

Runs the precheck tool by calling the various checks in order.

positional arguments:
  check                 Checks to be ran by the precheck (default: None)

optional arguments:
  -h, --help            show this help message and exit
  --input_directory INPUT_DIRECTORY, -i INPUT_DIRECTORY
                        INPUT_DIRECTORY Absolute Path to the project.
                        (default: None)
  --caravel_root CARAVEL_ROOT, -cr CARAVEL_ROOT
                        CARAVEL_ROOT Absolute Path to caravel. (default: None)
  --pdk_root PDK_ROOT, -p PDK_ROOT
                        PDK_ROOT, points to pdk installation path (default:
                        None)
  --output_directory OUTPUT_DIRECTORY, -o OUTPUT_DIRECTORY
                        Output Directory,
                        default=<input_directory>/precheck_results. (default:
                        None)
  --private             If provided, precheck skips [License, Defaults,
                        Documentation] checks that qualify the project to be
                        Open Source (default: False)

How to Troubleshoot Issues with Precheck

See the following document for guidance on troubleshooting issues with precheck.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 93.8%
  • Tcl 2.8%
  • Ruby 2.6%
  • Shell 0.8%