+ Update reproducible uploading docs
+ Documented a number of missing configuration variables
~ Fix an issue where netlist STA reproducibles would attempt to use `CURRENT_ODB` and crash
- Removed a number of unused configuration variables
+ 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 PDK matrix to `pdk_build` step
~ Redo how test_sets are written
~ Redo design matrix to include PDK
~ Update deprecated Node.js-based GitHub Actions
~ Unify gf180mcuC config keys as "pdk::gf180mcu*"
+ 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
+ Added new script to import certain variables from `STD_CELL_LIBRARY_OPT` postfixed with `_OPT`
+ Added validation for `DIE_AREA` and `CORE_AREA`
~ Fixed `-init_design_config` by adjusting the location of the DESIGN_DIR check
~ Documentation all moved under `docs/source`, arranged hierarchically according to the table of contents
~ `Klayout` changed to `KLayout` in all logging messages
~ Readme rewritten to just be concise, parts of it isolated into standalone documentation
~ RTD builds no longer use conda (saves some time)
~ Fixed all broken links
+ Add new feature to extract just the PDK and SCL info from config files and `-override_env`
~ Reshuffle `scripts/tcl_commands/all.tcl:prep`:
verify_versions is now one of the first things to run
config load order documented and more guardrails added
~ Update bug report template
- Remove `CURRENT_STAGE` environment variable: nothing used it
+ 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
~ Updated documentation
~ Make it so the commits created by the bot are actually created by the bot and not Jeffrey DiCorpo
~ Fix `picorv32a` design in the extended test set
+ Tagging scheme is now YYYY.MM.DD, postfixed with rX for multiple releases on the same day to match internal Efabless utilities
+ Add git remotes to environment survey
+ Add feature to force reproducibles to be created for a specific script regardless of failure: see `docs/source/using_or_issue.md` for more info
~ Fix `generate_tag.py`
- Remove debugging vestiges from `all.tcl`
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://
* In run_non_interactive_mode make -no_lvs -no_drc -no_antennacheck into flags
These don't need an argument and the code was already looking in flags_map.
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* in ioplacer.tcl use proper commands rather than internals
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* Add DFF_LIB_SYNTH optional variable for dfflibmap
dfflibmap can only take a single liberty file. If LIB_SYNTH has multiple
files then DFF_LIB_SYNTH is the one with all the sequential elements.
If unset then LIB_SYNTH will be used for backward compatability.
Needed for asap7 which uses multiple liberty files.
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* Handle multiple liberty files and empty CELL_PAD_EXCLUDE for asap7x
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* Thanks, GitHub Actions Team
Co-authored-by: Donn <me@donn.website>
+ Add GLB_RT_MACRO_EXTENSION option
+ Restore GLB_RESIZER_TIMING_OPTIMIZATIONS for five designs failing hold violations
~ Set GLB_RT_ADJUSTMENT to 0.3 across the board based on advice in #848
~ ROUTING_OPT_ITERS -> DRT_OPT_ITERS (for consistency)
- Disable `aes_cipher` in extended test set (I gave up)
+ Warnings now printed by flow_fail and at the end of noninteractive flow runs
+ Created warnings.log, errors.log with all warnings and errors
+ Get Tag now returns a dummy tag if you're on a branch that's not `main` or `master`
~ Tarballing moved to run_tests.py
~ Restored `-u` permissions to run_test.py.
~ Version mismatches now cause the flow to fail, straight up
~ flow_summary.log -> openlane.log
~ Various warning messages updated
~ Version checking moved to `prep`
~ change .bashrc CWD color to green (black was not readable)
~ `return -code error` added to flow_fail, removed after all flow_fail invocations
~ `make pdk` fixed
- Removed `--tar_list` from run_designs.py - do your own tarring
+ Add llvm-devtoolset-7-clang to CentOS 7 dependencies, just in case (OpenROAD was being funny with GCC for a second there)
~ Updates OpenROAD SWIG to 4.0.1
~ Update scripts to support changes in newer versions of OpenROAD
~ Onus of building images moved to the OpenLane CI proper instead of the tool update flow, which now just basically edits one file
+ 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`
~ CI now uploads each run tarball individually
~ Updated READMEs
~ `save_views` now always executed
- Removed `run_power_pins_insertion_step`: `write_powered_verilog` now run right before LVS
* 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
The best thing to happen to OpenLane since OpenLane.
Variables related to output files: i.e. logs, results and reports, are becoming more uniform.
* Variables now point to folders
* Variables now called `{stage}_{type}s`
* All variables renamed to be tool-generic
* magic, klayout, cvc and lvs all unified, renamed "finishing"
* Better flow runtime calculation
* All step runtimes are now stored in a yaml file, which can easily be read by a human or parsed by a computer.
* Better step indexing
* You have to increment the step index explicitly using `increment_index`.
* Functions that take log arguments now require you to not use an indexed file, it's their responsibility to index them.
* Changed names for many logs to make more sense
* A plethora of files being moved and/or renamed
* Yosys scripts were moved into their own folder
* All references to OpenLANE that are not a published paper have been replaced with OpenLane
* Copyright dates updated on some files
* 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.
~ RUN_SIMPLE_CTS no longer runs the Simple CTS if CLOCK_TREE_SYNTH is off.
~ TritonCTS will no longer run if RUN_SIMPLE_CTS is on.
- wbqspiflash was apparently duplicated between the FTS and ETS so it's been removed from the ETS.
+ ./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>