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
* Non-fixed layer count for GLB RT adjustments
Remember this kids, nothing is more permanent than a temporary solution.
* GLB_RT_LX_ADJUSTMENT variables consolidated into GLB_RT_LAYER_ADJUSTMENTS, a comma-delimited set of values
* GLB_RT_LX_ADJUSTMENT will continue to be accepted but display a deprecation warning, and will be removed in a later version of OpenLane.
* GLB_RT_L1_ADJUSTMENT value from the PDK is now ignored.
* Bashrc fix (Line wrap problem), or_issue fix
* Only `read_verilog` if there's no CURRENT_DEF: see https://github.com/The-OpenROAD-Project/OpenROAD/issues/1305#issuecomment-968336079 (Practically didn't cause an issue as all DEFs are used without the standalone flag)
* or_issue now supports netlist inputs and no longer generates tarballs: encourages inspecting and running the code before uploading a tarball
* or_issue now also creates tcl, gdb and lldb files
* OpenROAD commit now sedded in instead of GITDIR-NOTFOUND: See last paragraph of https://github.com/Cloud-V/DFFRAM/issues/115
I have a design that fails detailed placement just before global routing.
Looking closer, I'm not sure why we do fill insertion before the final
detailed placement step, because adding filler cells is just going to
make it impossible to fix any placement issues.
This is needed to specify a signal such as a clock that
may have brackets (bus) annotation. Without this, it tries to
interpret the brackets as a command and execute it.
For example:
set ::env(CLOCK_PORT) {io_in\[17\]}
* 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.
In global placement, OpenLane assumes timing and routability driven modes
are disabled. This is not the case when calling the OpenROAD APIs
directly, so explicitly disable them.
* Fix vv
* OR Issue Tweaks
This adds a number of tweaks to or_issue.py
1. It is now expected to be run from within the same environment OpenLane is run in. i.e., `make mount` for OpenLane docker users. Running from an external environment is no longer supported.
2. Interface changed slightly.
3. Improvements allowing OpenROAD scripts that depend on other OpenROAD scripts to run fine.
* Update design configuration to address timing violations
* update resizer scripts
- added repair_tie_fanout command
- added catch to the repair_timing commands to prevent exiting when the utilization limit is reached
* Reset routing_cores to 2
- Removed the `-min/-max` options from read_liberty since they shouldn't be used for modeling different process corners (https://github.com/The-OpenROAD-Project/OpenLane/issues/671).
- Updated the base SDC file to include information about clock uncertainty, clock transition, and timing derate.
- Updated the timing/design optimizations to be done at the typical corner.
- Updated the STA script to generate the SDF file after the routing is concluded.
- Updated the STA script to report more information like clock skew, worst slack, power, area.
- Added some fixes to the report generation to retain the log file index so that we can easily keep track of when the reports are generated.
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.
* Report clock skew in or_sta.tcl
* Error on timing violations at the typical corner and warn on timing violations at the typical corner
* Reset or_sta.tcl
* Timing Report Fixes + Only warnings on slew by default
~ Tweaks to PDK version verification (broken on some platforms)
~ Resizer default value changes
~ Tweaks to report generation, report.sh removed
~ Run folders now use a full timestamp
- Empty timing reports no longer generated
* Warn on max slew violations
* Fix odd 'exceptional failure' issue
Co-authored-by: Mohamed Gaber <me@donn.website>