~ use tclmodules (`.tm`) files instead of pkgIndex.tcl for openlane and openlane_utils
~ change tagging to use the version from the `.tm` files instead of the day of the release
~ include superstable branch in tagging efforts (even though this doesn't mean much in `master`…)
+ 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)
- 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
Script uses regular expressions to create a set of documents variables and a set of used variables and compare them against each other. Some variables are internal, unexposed and others. These variables are whitelisted. See https://github.com/The-OpenROAD-Project/OpenLane/issues/1889
\+ Add documentation for `QUIT_ON_XOR_ERROR`
~ generalize verilator variables:
QUIT_ON_VERILATOR_ERRORS -> QUIT_ON_LINTER_ERRORS
QUIT_ON_VERILATOR_WARNINGS -> QUIT_ON_LINTER_WARNINGS
VERILATOR_RELATIVE_INCLUDES -> LINTER_RELATIVE_INCLUDES
RUN_VERILATOR -> RUN_LINTER
+ add LINTER_INCLUDE_PDK_MODELS
+ add LINTER_DEFINES
+ include verilator in ci tool updater
- do not include pdk verilog models using -I
- remove workaround for verilator std error
- disallow timing constructs. Print an error to the user to remove or guard them.
`-gui` is superseded by `gui.py`. `or_gui` should still work for interactive scripts.
Dropping support for continuing existing runs. Users need to use `-overwrite` or provide a different tag.
+ Add verilator check before synthesis
+ Add QUIT_ON_VERILATOR_ERRORS
+ Add QUIT_ON_VERILATOR_WARNINGS
+ Add VERILATOR_RELATIVE_INCLUDES
+ Only load verilog models for selected PDKs and warn the user about unsupported PD
~ Add reports for timing multi-corner STA across all process corners
~ Sort min/max report outputs by slack
~ Combine Slew, Fanout, Capacitance and Annotation Checks into one `_sta.checks.rpt`
~ Combine TNS, WNS, Worst_Slack into one `_sta.summary.rpt`
~ Fix regression in #1675 where logs were renamed and reports were not getting generated for some steps
~ Update documentation
\- Remove UMich ECO timing report vestiges
---
Based on feedback from @shalan, Fixes#875
- Deprecate DIODE_INSERTION_STRATEGY.
- Remove DIODE_INSERTION_STRATEGY 2, 1, and 5
+ Add GRT_REPAIR_ANTENNAS
+ Add HEURISTIC_ANTENNA_THRESHOLD
+ Add RUN_HEURISTIC_DIODE_INSERTION
+ Add DIODE_ON_PORTS
+ Add HEURISITIC_ANTENNA_INSERTION_MODE
~ Update benchmark results for SW_HD
~ Apply DIODE_PADDING in dpl_cell_pad which also runs after RUN_HEURISTIC_DIODE_INSERTION
run_designs.py:
~ Change default config to `config` instead of `config.json` to allow for designs with
tcl default config
~ Change logging format
+ Print SUCCESS when a design is finished
~ Use extra parameters `params.keys()` instead of `ConfigHandler.get_header()` to build
report csv header. This fixes inconsistencies between csv header and values reported
compare_regression_design.py:
~ Change metric name antenna_violations -> pin_antenna_violations
~ Handle "bad" encoding of csv report files
~ Quit when a report is perceived as invalid
~ Don't print output file name to stderr
compare_regression_reports.py:
~ Change metric name antenna_violations -> pin_antenna_violation
~ Handle "bad" encoding of csv report files
config.py:
~ Sort result from get_config_for_run and configuration_values for consistency
~ All get_config_for_run to get the full config
~ Fix antenna violations net extraction in `extract_antenna_violators.py`
~ Fix fetching antenna violation count in `generate_reports.py`
report.py:
~ Split "metric" antenna_violations to pin_antenna_violations and
net_antenna_violations as reported by openroad antenna checker
~ Add Non-phyCells
~ Add TotalCells
~ Rename cell_count to synth_cell_count to avoid confusion with TotalCells
~ Calculate cells_per_mm based on Non-phyCells instead of synth_cell_count
~ Rename
~ Move `QUIT_ON` variables outside of checker functions
~ Move final timing checks to a flow step: `run_timing_check_step`
~ Replace a couple of loose `file exists` with `assert_files_exist` calls
~ Replace all `flow_fail` across the flow with `throw_error`, which behaves accordingly:
* If running an interactive script, `flow_fail` is called
* Else, the errors are propagated upwards, where `flow.tcl` is to catch it
~ Rename `try_catch` to `try_exec` as it now propagates the error, with translation behavior
- Remove UMich experimental ECO flow
~ use CURRENT_POWERED_NETLIST
~ disable LVS_INSERT_POWER_PINS before run_lvs as we are only
after comparing a netlist and a gds
+ add finishing steps after run_lvs
+ Add test for JSON config files
~ Updated various `rm` execs to `file delete -force`
~ Test script now outputs to stdout as well as a log file
~ Moved post-run hook runner to `all.tcl`
~ Moved installation docs to their own subcategory
~ Fix security bug
\+ Add PDK variable `WIRE_LENGTH_THRESHOLD` which wires with lengths >= said value are flagged
\+ Add `QUIT_ON_LONG_WIRE` which fails the flow if any wires are flagged for length
~ Update all `$::env(OPENROAD_BIN) -exit -python` invocations to include `-no_init` to suppress message about rc file
~ Replace ill-fitting `$::env(OPENROAD_BIN) -exit -python` invocations with just `python3`
~ Replace local install check with a simple git directory check
+ Add `-exit` to all `openroad -python` invocations, which otherwise causes hangs when stdin is hooked up
~ openroad_app -> 389a1f09821c0f57e3bf8e88f4ab43c76ec5f5c4
~ update tests to use DEFs as input files once again
Co-authored-by: Mohamed Gaber <donn@efabless.com>
+ Add `proc erase_box` to OpenLane
+ Add two new config variables for magic def reads: `MAGIC_DEF_NO_BLOCKAGES` and `MAGIC_DEF_LABELS`
~ Magic scripts hierachically organized by input format
~ `erase_box.sh` deprecated
~ More decisively separate LVS logs from reports
+ Add calls to `set_dont_touch` and then `unset_dont_touch` at the beginning and end of every resizer script respectively ~ Reorganize config variables
+ Added undocumented variable `RSZ_USE_OLD_REMOVER` to continue to use the old `remove_buffers.py` script instead
~ `LIB_RESIZER_OPT` -> `RSZ_LIB` (with translation behavior)
~ `UNBUFFER_NETS` -> `RSZ_DONT_TOUCH_RX` (with translation behavior)
~ Made timing models only get written after CTS by checking for `STA_PRE_CTS` as well
+ `UNBUFFER_NETS` created, which takes a regular expression, which if matched, remove buffers from said net
~ `scripts/odbpy/remove_buffers.py` rewritten to be comprehensible
~ `remove_buffers_from_ports` -> `remove_buffers_from_nets`, now runs after every resizer step
~ `remove_*` python commands now only use regular expressions
- Remove `DONT_BUFFER_PORTS` as the name does not reflect the proactive nature of buffer removal
- Remove `remove_component` (singular)- unused
This is a temporary workaround until a proper "don't touch net" feature is available in OpenROAD.
+ Create new IR drop report generation step in the `signoff` stage
+ ALMOST ALL STEPS NOW PRINT THEIR LOGS' PATH
~ `increment_index/TIMER/set log/puts_info` commands organized across the board
~ Fix issue where `FP_PDN_AUTO_ADJUST` would not snap its values to the mfg grid
~ Reorder `configuration/general.tcl`
~ Update Contribution Guidelines
~ Various Docs Fixes
- Remove `FP_PDN_IRDROP`
+ Added "logging to" information for long-running steps (CTS and Routing)
+ Added variable `GPL_CELL_PADDING` for global placement, with a default value of 0 (value divided by 2 and applied to both the left and right of the cell)
+ Add feature to also print mounted scripts' version if the container version does not match
+ Add `insert_tiecells` after floorplanning
~ `replace.tcl`, `opendp.tcl` -> `gpl.tcl`, `dpl.tcl`
~ `CELL_PAD` renamed `DPL_CELL_PADDING` for detailed placement, default value still 4, value divided by 2 and applied to both the left and right of the cell
~ DONT_BUFFER_PORTS given a default value (empty)
~ `remove_buffers` -> `remove_buffers_from_ports` (to more explicitly state what it does)
~ Renamed `RUN_ROUTING_DETAILED` to `RUN_DRT` (with translation behavior)
~ Cleanup OR antenna check
- Removed `CELL_PAD` from metrics and comparison
- Removed `widen_site_width`, `use_widened_lefs` and `use_original_lefs`: I don't know who used site widening
- Removed `MERGED_LEF_UNPADDED`: `MERGED_LEF` can be used for all places where the "unpadded" one was used
+ JSON Configs now support per-PDK and per-SCL options
+ JSON Configs now have a limited expression engine and a way to specify the current working directory and glob inside of it
+ Created script to help migrate tcl configs to json configs
+ `-init_design_config` rewritten, now creates an `openlane` folder inside the design's directory. New flag `-add_to_designs` restores the previous behavior
+ `docs/source/configuration_files.md` created with a focus on documenting how the configuration files work, including the JSON configuration files
~ Update `picorv32` design
~ Most `config.tcl`s replaced with `config.json` alternatives
~ Global configuration files now loaded in a specific order with no glob
~ Changed default values for PL_TARGET_DENSITY
~ Documentation updates to support the use of configuration JSON files as a first class citizen
~ Update author list
~ Replicate override_env after second design source
~ Move verify_mismatches to before most preparation
~ flow.tcl no longer requires `-design`, is happy to use the current working directory as a default
~ replicate.py rewritten
~ update.py not rewritten, but uses click now (and an improved --help)
- Removed "flag documentation" for some python scripts, just use `--help`
+ Support multiple STA files in eco.py
~ All passes of routing and STA now start from `run_eco_flow`
~ Improved performance of `eco.py` by not reading the entire STA report in one go and making a single pass through odb getInsts()
- Don't insert fill cells until ECO pass is complete.
- Need to call eco_output_check on each iteration of the loop.
~ Fix issue where `skip_basic_prep` would not be ran in some scenarios where a previous run is being resumed
~ Fix how `-from` and `CURRENT_STEP` interact
+ Function now called on all successes and `flow_fail`s
~ Function moved to all.tcl so it can be used by custom flow scripts
- Removed `SAVE_FINAL_VIEWS` variable
+ Consolidated all existing DRC conversion functions into `drc_rosetta.py`
+ Consolidated fake_diode_replace and place_diode into `diode.py`
+ Consolidated and/or rewrote most def manipulation functions into `defutil.py` and other files under `odbpy/`.
+ Consolidated and/or rewrote most lef manipulation functions into `lefutil.py`
~ Moved all files using odb to a new folder, `odbpy/`
~ Move replicate/update config scripts to `scripts/config` folder
~ Move all in-line magic spells into proper files
~ Tcl formatting (4 space-indents on all modified files)
- Removed many unused files, all consolidated files
---
API Breaks
* Care was taken to ensure all OpenLane tcl commands have the same API presuming the API in question was not stupid.
* Speaking of, `manual_macro_placement_test f` has been updated to `manual_macro_placement_test -f` to be consistent with literally every other command.
* All individual files that may be used by third party projects likely have a different CLI and are thus entirely broken.
~ `RUN_MAGIC` check moved to flow.tcl
~ `RUN_SPEF_EXTRACTION` now skips STA entirely
- Remove pandas (it's overkill for what we need + greatly inflates install times)
+ 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
+ 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)
+ Added GCD Design to test ASAP7
+ Added RUN_LVS variable to control running the LVS step
~ Allow running OpenLane without git repo cloned (sort of)
~ Updated Klayout Scrot, DRC to complain about a missing mr deck if Klayout is set as the primary signoff tool
~ Various Tcl Formatting
Co-authored-by: Matt Liberty <mliberty@eng.ucsd.edu>
* 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.
+ Added an issue regression flow, allowing some post-run hooks to be executed to analyze issues that may not be captured by mere flow failure or metric regressions
~ `apply_def_template.py`: fix case sensitivity of arguments and use proper `defutil` command
* 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>
+ 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
ECO flow starts from checking the report generated in the route step. As PT commands are not supported by OL, we use a python script to check the report, insert buffers, and do the resize. Inside the ECO loop, the python script, cts and route step are called sequentially. The reports are generated each time, and the loop stops until no hold time violations are found.
The flow can be enabled using ECO_ENABLE =1.
More documentation and enhancements to come in the future.
Co-authored-by: Ke-Haur Taur <khtaur@umich.edu>
Co-authored-by: Haolin Dong <haolind@umich.edu>
+ 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
~ 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
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]