+ Repository is now a Nix flake
~ Change all invocations of `openroad -python` to use `run_odbpy_script` for consistency
~ Change build system from ad-hoc to Nix, still producing a Docker image as a final result
~ Update KLayout scripts to use `klayout-pymod` or properly parse commandline arguments
~ `open_pdks` -> `bdc9412` to match OpenLane 2
- Remove local installer; `nix run .` will run OpenLane natively
~ Reimplemented the default serial/parallel multiplier to be a bit less cryptic and eliminate linter warnings; and added a proper testbench
~ Reimplemented deprecated variable translation behavior to account for the situation where a deprecated variable's value does not match the default for the new value, which causes a crash
~ Slightly improved warning for designs having been black-boxed during STA
~ PDN Generation Updates
~ Renamed `DESIGN_IS_CORE` to `FP_PDN_MULTILAYER` with translation behavior
~ PDN generation will now always attempt to extend to core ring (which is inert if core rings do not exist)
~ Fixed bug where `FP_PDN_MULTILAYER` being set to `0` would attempt to create a core-ring on two layers anyway
~ IR drop now prints a warning if `VSRC_LOC_FILE` is not provided
- Removed deprecation behavior for `GLB_RT` variables - it's been over a year (>=6 mo as promised)
+ Added a new target to the Makefile, `make m`, which mounts the directory at the same path in the container as it is in the host
~ Changed Makefile to mount an empty folder where `install` is so there's less confusion
~ Updated banner per @shalan's recommendation
- Remove `make veryclean` which users may not use consciously and end up nuking their designs
- Remove `cvc_rv` utility (upstream no longer willing to support it as part of the flow)
~ Fix bug with OpenLane docker image builder copying run folders
- Remove BM64 test design
~ Update a couple of CI designs enabling RUN_HEURISTIC_DIODE_INSERTION and DIODE_ON_PORTS
~ Move OpenROAD DPL logic and API calls to scripts/openroad/common/dpl.tcl and update scripts/openroad/dpl.tcl accordingly
~ Move OpenROAD GRT logic and API calls to scripts/openroad/common/grt.tcl and update scripts/openroad/grt.tcl accordingly
~ Use `repair_antennas.tcl` instead of running it inside GRT script
+ Add scripts/openroad/repair_antennas.tcl with the following flow:
* GRT - needed to run OR's repair antennas
* OR's repair antennas (with cell padding for diodes)
* DPL to legalize
* GRT to create new guides for legalized cells
~ Fixed issue where token set for Volare may cause authentication issues by falling back to secrets.GITHUB_TOKEN
~ Update documentation version constraints to accommodate furo bug
+ Added `make docs` target to primary Makefile to generate documentation
~ Update documentation dependencies
~ Updated `tcl.py` to handle JSON lists of elements including whitespace by joining them with a comma (unless one of the elements already contains a comma), resolving odd JSON syntax
~ Re-organized and re-order configuration variables and edited descriptions for general consistency as well as adding anchors
~ Update all documentation dependencies
~ Fixed a number of broken links
- Remove dependency on `docutils` and `sphinx-autobuild` (both unused)
- Remove two of the custom documentation extensions
\+ Add `gui.py`. Adding the help message here:
```
Usage: gui.py [OPTIONS] RUN_DIR
View specified layout from run_dir using supported viewers
Options:
--viewer [klayout|openroad] Viewer option [default: openroad]
-f, --format [def|odb|gds] Layout format to view [default: odb]
-s, --stage [cts|floorplan|placement|routing|signoff]
Optionally specify which stage to view
--help Show this message and exit.
```
\+ Mount HOME directory when running `make mount`.
\+ Add `-congestion_report_file` to steps that call global routing
~ Fixes a bug in KLayout scripts where `design_name` may get an `abspath` application, breaking the script if a folder exists with the same name as the design
+ Add warning when attempting to run Sylvain's script without `DPL_CELL_PADDING` >= 0
+ Add warning when DPL_CELL_PADDING is set to greater than GPL_CELL_PADDING
~ Update PDK, changing the default values of GPL/DPL cell padding to `0`
~ **Use $HOME/.volare as the default PDK location**
~ `PL_TARGET_DENSITY` incorporates value of `GPL_CELL_PADDING` in calculation
~ Updated various config files to handle new default padding options
~ CI bugfixes + support for Volare 0.7.1
+ Add JSON support to "matrix" mode
~ Rename "regression mode" to "matrix", as it more accurately reflects a combination of variables
~ Replace bizzare "regression script" with a JSON file achieving basically the same thing
~ `run_designs` now clears run paths before it starts
~ `run_designs` no longer attempts to generated reports for runs that fail at startup
~ `verify_versions` no longer attempts to check the PDK if the environment variable PDK is not set
~ `scripts/config/config.py:get_config` -> `get_config_for_run` (more accurate)
~ `scripts/config/tcl.py:read_tcl_env` no longer exits unilaterally, raises an exception normally
- Remove Test #892
- Remove `Tcl` support from matrix mode: not tenable
- Remove Tcl extraction shell script
---
Resolves#1458
+ Add flag to enable/disable timing model generation after STA
+ Add both powered and unpowered netlists to `save_views`
+ Add multi-corner SDF and SPEF files to `save_views`
~ Fix#1413 and add regression test
~ Move `./run_issue_regressions.py` inside `tests` as a modular main function
+ Add gf180mcuC configs for {APU, PPU, SPM}
~ Clean up some leftover variables
~ STD_CELL_LIBRARY now an optional environment variable- open_pdks config files are now responsible for setting the default
~ `to_tcl.py` updated to reflect that ^
~ Add ability to just set `METAL_LAYER_NAMES` in open_pdks
~ `open_pdks` -> 44a43c23c81b45b8e774ae7a84899a5a778b6b0b
+ new `openlane-and-push-tools` target added to root Makefile to enable easier updating of tools
~ antenna check results now extracted from log
~ `droute.tcl` updates to read guides before `detailed_route`
Co-authored-by: Mohamed Gaber <me@donn.website>
~ `docker/utils.py current-docker-platform` isolated into standalone `docker/current_platform.py` script that does not require any non-default Python libraries
+ Added two new PDK-specific variables: SYNTH_CLK_DRIVING_CELL, SYNTH_DRIVING_CELL_PIN, which are used in the sdc file so clocks specifically can be driven by a different cell
~ NO_PG now also generated for the excluded cells
~ Document PDK-specific variables in their right place
~ Magic -> 085131b
~ Fix verify_versions.py
Tested on Apple M1 and AWS Graviton.
+ Add support for multiple-architecture building
+ Support for amd64, ppc64le and arm64v8 added
+ amd64 and arm64v8 will be automatically built by the CI
~ Major CI Overhauls
~ Added composite actions for the Docker build and setting environment variables
~ pdk build is now its own job, and amd64/aarch64 have a job each
~ matrix -> design_matrix, designs only tested on amd64 for performance reasons
~ run/build base docker images now pushed to Docker Hub based on a hash of dependency lists (to work with the buildx `docker-container` driver)
- Remove pandas (overkill for what we're using it for)
- Remove `cugr`, `drcu` *for now* (they're x86-64 Linux-only utilities)
Please excuse the last commit lacking a changelog.
+ PDK installation uses Volare, transparently to the user: all they have to do is type "make", where it will get OpenLane and the PDK
+ CI now uses Volare to either **get** or **build** the PDK (if not found), which speeds up the fastest test set by around 60%.
+ Added rudimentary dependency installation instructions.
+ pyyaml folded into the repo, so users without pip can still run issue surveys
~ Open PDKs updated: Parasitics are now extracted using a rules file based on [spef-extractor](https://github.com/Cloud-V/spef-extractor) as a ***temporary*** measure
~ Issue survey no longer checks for click and pyyaml: a venv is used in those scenarios.
~ OpenLane build no longer uses the host filesystem as an intermediary, instead using a templated dockerfile with an N-stage build for N tools, saving IO operations (40% improvement measured)
~ Old PDK targets renamed to build-pdk-conda, includes SRAM by default
~ Replaced python3 ./env.py issue-survey with `make survey`
- Removed Fault from documentation (until I get the chance to work on it)
+ Added optional multiple **process corner** technology lef support (min/max/nom), in addition to the already existing multiple **timing corner** support (ss/tt/ff). This will also be our nomenclature going fwd.
+ Parasitics extraction now run at all process corners, and multi-corner analysis is run at all three process corners
~ `finishing` -> `signoff`
~ Parasitics extraction and STA are now an independent step instead of being lumped in routing, as part of the signoff block
~ Update OpenROAD
~ Update Open_PDKs, Sky130, and Magic
~ PDK verification made more PDK agnostic outside of env.py
~ Made RCX use LEF files instead of multiple configuration variables/set_rc.tcl
~ `prep_lefs` more or less rewritten
- Removed redundant RCX variables
- Removed `-order_wires` from various `read_def`s in OpenROAD- deprecated, apparently
+ Pin all pip versions
~ Verify versions made more PDK independent, reads .config/nodeinfo.json
~ Make `requirements_lint.txt` separate
~ Update to new Black: changes to ** operator formatting
~ Various spelling/grammar fixes
~ git:// -> https://
+ Enable insert_buffer to be used outside of the ECO flow
+ Added ability to use interactive.tcl in issue regression flow
~ Made the ECO flow far less chatty
~ Other non-functional ECO flow tweaks
~ Merged apply_fix.tcl and eco.tcl into eco.tcl
~ Added `cat` command to utils.tcl
+ `-verbose` flag added with multiple levels, replacing `-disable_output` (which is now the default behavior)
+ New command `puts_verbose` added, to be used for extra pieces of information
+ ./flow.tcl header now includes version, copyright and licensing information
+ Added `-last_run` flag allowing you to quickly resume the last run (useful with -interactive)
+ Added `open_in_klayout` command that lets you open the CURRENT_DEF in Klayout
~ `env.py issue-survey` now detects whether it's running inside the container and warns accordingly
~ RUN_KLAYOUT, RUN_KLAYOUT_DRC, RUN_MAGIC_DRC, RUN_LVS now only control noninteractive flows
~ Full git hash added to containers
~ Various Documentation Updates
~ Changed verbosity of various output messages
- Removed `-disable_output` (now the default behavior)
- Removed OpenLane ASCII art
- Removed various "chatty" messages, including things succeeding (shut up unless something fails)
This single-purpose recipe mounts the docker container and runs a desired
design through the flow. Provides better support for running OpenLane via
script.
Resolves#907.
+ Add a dependency system for tools, so some tools can be built first in local installs or have other repos and commits included in docker image builds
+ Add fully working `open_pdks` image that does NOT use Conda
+ Add options to list containerized tools in `dependencies/tool.py`, with a `--no-pdks` flag to exclude open_pdks
+ Add libraries/sky130_fd_pr/latest to the full PDK build (was missing)
~ Isolated PDK building stuff into `./dependencies/pdk.mk`
~ Final merge no longer uses a tarball, just uses a good 'ol copy
---
Caveat is this will not be enabled by default or used by the CI for now. The reason is the PDK adds another 3 gigabytes to the final image and takes positively forever to build.
To use an internally built PDK, you need to export two variables:
export EXTERNAL_PDK_INSTALLATION=0
export NO_PDKS=0
Then you'd `make openlane` as normal.
To finally enable this, we'd need to rewrite make_timing to not take forever (probably in Rust/Swift/Go/whatever) and Open_PDKs would need to be updated so it gzips the liberty files. We'd also need to ensure that all tools can load .lib.gz files.
Co-authored-by: Olof Kindgren <olof.kindgren@gmail.com>
* Update environment survey
This updates the issue environment survey to better detect whether it's running inside the OpenLane container or not, and properly discourage people from doing so.
* Make the version of Python used configurable via environment variable
[skip ci]
+ Binaries can now either be built or fetched from Docker, not checked into repo history
+ Tool updater pushes docker images
+ Added git as a tool (the one in centos repos is very out of date)
+ Fixed Docker bashrc
~ Fixed cugr, drcu, and vlogtoverilog builds
~ Update CentOS 7 dependencies
~ Folded fetch_submodules into utils.py
~ Assorted Makefile Tweaks
+ Added ability to run extended test sets on a specific pull request's PR by adding `[ci ets]` anywhere in the PR body (the example there counted!)
+ Added capacity to disable certain designs in a test set by prefixing the design with a `#`
+ Added new script that allows someone to iterate on a design's timing closure
~ Decreased core utilization for some designs that just aren't routing
~ Fixed sizes of {BM64, blabla, y_huff} to avoid pin location issue
~ Increased max buffer percentages for some designs failing to achieve timing closure
~ Update all references to the design directory in config.tcl for all designs to `$::env(DESIGN_DIR)`.
~ core area/die area no longer have an EOL at the end of their value
+ run_designs.py now exits with exit code 2 if a design failed
~ run_designs.py rewritten in click, API altered slightly
~ renamed `addComputedStatistics` to `add_computed_statistics`
- removed `make regression_test`
Local installs are now installed to a gitignored folder in the repo's file structure and use the same files as the repository.
This is a minimal flow change with no effect on the Dockerized environment. [skip ci]
* Report Generation Bugfixes
+ Added `-override_env` option to flow.tcl to override certain environment variables on a per-run basis
+ Added option to extract inverter cells into the metrics behind an env var (so as not to break compatibility)
+ Klayout requirements added to runtime
~ Regression test outputs renamed, design report now in yaml
~ CI now runs on ubuntu-20.04 specifically, installs pyyaml
~ Fixed `make test`
~ Rewrote compare_regression_reports in click
~ Fixed compare_regression_design (typo made it not run, aliasing failures!!)
~ Changes to variable names: FINAL_TIMING_REPORT_TAG is now LAST_TIMING_REPORT_TAG, ran every STA
~ Fixed yosys gate type extraction
* Fix Odd Antenna Issue By Reverting OpenROAD
* verilog2def -> init_floorplan
Some files still retained the name of a floorplanning tool we're no longer using. It has been removed.
* netlist locations
Netlists generated as part of later steps were placed under `synthesis/`. They have been moved to their proper locations.
* Build tweaks
`make openlane` now actually builds the container. `make pull-openlane` has been added with the original functionality.
The git commit has been placed in the container at `/git_version`.
A custom `.bashrc` has been added.
Non-standard `echo -ne` invocations replaced with `printf`.
* Issues
verify_versions now works without a `PDK_ROOT` set (`$openlane_root/pdks`)
clarified issue template
* Rewrite or_replace.tcl
That script used a lot of internal swig commands with an unstable API/unpredictable behavior. Resolves#697.
* Expose `max_displacement` flag for detailed placement
This was added at some point as a replacement to the diamond search height thing and is necessary for macros.
* Add OpenROAD GUI/Tcl Readline
Resolves#642. Note that this addition will be intentionally undocumented and is intended more for people who absolutely want it.
MISC:
* CI fast fail off/always push image
The CI will report failures still, but will still publish an image and create a tag. Additionally, other tests won't be killed on the first failure.
* Naming convention changes
* `docker_build/` -> `docker`: Just is more consistent with literally every other codebase that uses Docker ever.
* Removed `or_` prefix from OpenROAD scripts: redundant: They're all already under a folder called "openroad." The distinction no longer makes any sense as there are no separate scripts for the previously standalone utilities.
This makes a number of internal improvements to the docker build process.
* A common build base
This common build base utilizes the dependency list outlined in `/dependencies` for both yum and pip, with the exception of cu-gr and dr-cu which use an... interesting (read: obtuse) build system. Speaking of...
* A pre-compile dependency list
This allows for the installing of dependencies that may need to be needed to compile *other* dependencies, incl. wheel, pyinstaller, devtoolset, etc.
* Builds now use tarballs
Git is no longer used, saving us the time needed to check out the *entire commit history every single time we build.* To handle submodules, I wrote a special script. Only OpenROAD uses submodules anyhow.
* Rewrote final image
The final image's Dockerfile was a mess. The new one also uses the dependency list and is better organized.
* OpenLane is now mounted to `/openlane` instead of `/openLANE_flow`
We don't really use `openLANE`, branding was settled on `OpenLane`, except I think it's better for everyone's sanity if I avoid capital letters altogether.
+ ./install.py greatly expanded to ./env.py, a python script consolidating all manners of environment configuration including installation and docker option generation
+ issues are now required to use ./env.py to survey the environment
+ installs to arch/manjaro now supported
~ python no longer asks to install, it creates a virtual environment
~ centos7 -> centos-7 (for consistency)
~ scripts reorganized: i need that top level as pristine as humanly possible
- removed csv2html. just use a viewer
Co-authored-by: Ahmed Nofal <ahmed.nofal@efabless.com>
This changes Makefile environment variables to be consistent with caravel user project based on feedback from @mattvenn.
Also, the fastest_test_set/extended_test_set productions have been fixed from a break in #627.
* IMAGE_NAME -> OPENLANE_IMAGE_NAME
* CURRENT_TAG -> OPENLANE_TAG