* Add scripts/pdk-linker.py for ORFS/OL integration
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* Add *~ to .gitignore
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* Update ioplacer.tcl to use proper tcl commands
Also allow skipping the calls
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
* black format pdk-linker.py
Signed-off-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.
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>
+ PDK now overridable via `override_env` and environment
+ Added mergeLib.py to merge liberty files for PDKs that require multiple liberty files
~ Make FP_IO_MIN_DISTANCE optional
- Removed legacy OpenPhySyn variables
I noticed that global routing reports 0 clock nets:
[INFO GRT-0019] Found 0 clock nets.
Moving the reading of the SDC file earlier fixes it:
[INFO GRT-0019] Found 980 clock nets.
+ 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)
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>
+ 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
+ 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
+ `RT_{MIN,MAX}_LAYER` added to the PDK, relies on layer names
+ `FP_IO_{H,V}LAYER` added to the PDK, relies on layer names
+ `DRT_{MIN,MAX}_LAYER` optional override variables added
~ Minimum layer set to `met1` in the PDK, you have to enable `li1` manually
~ `GLB_RT_LAYER_ADJUSTMENTS` was moved to the PDK
~ io_place.py API redone in click, now also uses layer names
- `FP_IO_{H,V}METAL` removed, will be translated to the new ones on-the-fly if they're in a user's config (for now.)
- `GLB_RT_{MIN,MAX}LAYER` and its clock equivalents deprecated, will automatically be changed to the new ones on the fly
* 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
* 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
* 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.
* 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.
* 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>
- SDC file is carried across the stages with two variables SAVE_SDC and CURRENT_SDC to avoid having conditional statements on whether a stage is enabled/disabled
- Moved the `sta.tcl` script under the openroad script directory
- PDK commit is updated to propagate the new changes made to the `DEFAULT_MAX_TRAN` value https://github.com/RTimothyEdwards/open_pdks/pull/164
- Add base.sdc file to the manual_macro_placement test
- The general sdc file doesn't support multiple clock ports so a custom one is needed for this design
- This previously passed through the flow because sdc carry-over was conditioned on clock tree synthesis which is disabled for this design