164 Commits

Author SHA1 Message Date
Mohamed Gaber
14b94a6682 Migrate Build System to Match OpenLane 2 (#2115)
+ 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
2024-05-08 15:41:43 +03:00
Mohamed Gaber
dbcc8252e9 Ameliorate Warnings, PDN Generation, and the default design (#2066)
~ 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)
2023-12-25 20:48:46 +02:00
Mohamed Gaber
747bdbbd2d Makefile Improvements + Banner Update (#2018)
+ 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
2023-10-19 17:34:52 +03:00
Mohamed Gaber
456838bffc Remove CVC (#1976)
- 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
2023-09-06 14:48:32 +03:00
Kareem Farid
df7fd510c6 Rework Antenna Repair (#1968)
- 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
2023-09-05 18:39:58 +03:00
Kareem Farid
d03ecd965d Update OpenROAD + Handle Breaking Changes (#1949)
+ update utils.py `fetch_submodules_from_tarballs` to handle relative submodule url
~ `openroad_app` -> `0a6d0fd`
~ add extractor for operating conditions  

Co-authored-by: Donn <me@donn.website>
2023-09-05 16:51:08 +03:00
Mohamed Gaber
17559fa562 CI Tweaks (#1951)
~ 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
2023-08-22 18:54:25 +03:00
Mohamed Gaber
157a650587 Update Documentation (#1917)
+ 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
2023-07-25 13:02:39 +03:00
Kareem Farid
6bb1e0dd91 Add gui.py (#1824)
\+ 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
2023-05-30 17:44:50 +03:00
Harald Pretl
b43df386c5 Fix GDS write fail by KLayout (#1731)
~ 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
2023-04-10 17:33:21 +02:00
Mohamed Gaber
e5a7a09769 Rework Placement (#1684)
+ 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
2023-03-22 15:29:01 +02:00
Mohamed Gaber
2857b632bb Fix Make Test Sets (#1683)
+ Add an option for `get_test_matrix` to return plaintext
~ Fix `Makefile` to use `get_test_matrix`
2023-03-16 16:06:06 +02:00
Mohamed Gaber
e570a6a5b4 run_designs fixes (#1597)
+ 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
2023-01-02 15:10:43 +02:00
Johan Euphrosine
4e910618fd Makefile: disable seccomp to enable openroad ui (#1528)
Resolves #1149
2022-12-28 14:38:15 +02:00
Kareem Farid
010f5ada53 Add PDK_FAMILY for volare enable (#1545) 2022-12-04 12:20:40 +02:00
Mohamed Gaber
cfb7ee91a6 Changes Requested by Caravel Team (#1414)
+ 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
2022-10-09 18:31:11 +02:00
Mohamed Gaber
57f3f21d6e Add Very Early support for GF180MCU + open_pdks Tweaks (#1251)
+ 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
2022-08-18 13:38:05 +02:00
Balint Cristian
1c5db8511e Update OpenROAD + Cleanup Fallout (#1169)
+ 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>
2022-07-18 18:16:08 +02:00
Mohamed Gaber
ebbb579d17 PDK Installation Fixes and Documentation Updates (#1212)
+ Added PDK build instructions using Volare
~ Git requirement for general use (but not building) dropped from 2.35 -> 2.22
~ Fixed `override_env`'s inconsistent behavior (thanks, Tcl)
- Removed conda pdk installation vestiges
- Removed some useless and confusing under-the-hood sections
2022-07-18 16:51:03 +02:00
Mohamed Gaber
ab6b79bce7 Don't require click for Docker platform extraction (#1205)
~ `docker/utils.py current-docker-platform` isolated into standalone `docker/current_platform.py` script that does not require any non-default Python libraries
2022-07-18 12:03:28 +02:00
Mohamed Gaber
994b710b90 Update Makefile to work-around make bug (#1155)
Works around a bug with `make` on Ubuntu 22.04 LTS. (See Issue #1151.)
2022-06-20 15:44:25 +02:00
Mohamed Gaber
a9883335a1 Enhancements + Bugfixes to Multi-PDK Support (#1138)
+ 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
2022-06-18 11:53:39 +02:00
Mohamed Gaber
601eede636 Support Multi-Arch Docker Builds (#1075)
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)
2022-05-21 18:47:55 +02:00
Mohamed Gaber
0034aa860d Add Caravel User Project Wrapper to Fastest Test Set (#1072)
+ Add caravel_upw as a design, included in the fastest_test_set
~ Alter the clean options in the makefile
~ Improve LVS mismatch message
2022-04-27 14:43:41 +02:00
Mohamed Gaber
bb89ac959a Integrate Volare for PDK Building and Mangement, Part 2 (#1052)
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)
2022-04-15 13:15:46 +02:00
Mohamed Gaber
54ec01ab0d Integrate Volare for PDK Building and Mangement (#1048)
* Initial work on integrating volare

* CI

* More CI fixes

* Update opdks

* Switch to Efabless open_pdks fork, update
2022-04-14 20:24:29 -07:00
Mohamed Gaber
b737086576 Multi-Process Corner RCX (#978)
+ 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
2022-04-07 20:59:37 +02:00
Mohamed Gaber
b76d11ac12 CI Fixes (#1022)
+ 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://
2022-03-29 15:10:54 +02:00
Donn
f2f5d83587 ECO Flow Tweaks (#1008)
+ 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
2022-03-28 13:42:51 +02:00
Donn
00da77e58c More Usability Tweaks (#984)
+ `-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)
2022-03-14 12:09:15 +02:00
Donn
9602463a6d Add Commit-Based Docker Tags (#967) 2022-03-03 00:07:19 +02:00
Arman Avetisyan
de223b4c53 Add Issue-Specific CI (#902)
This adds an issue-specific CI that can be used to test specific regressions rather than running entire flows.

Also, a partial solution for #892.
2022-02-28 13:56:36 +02:00
Matt Liberty
d09cdaf4b4 Allow mounting OpenROAD GUI Settings (#926)
+ If ~/.openroad exists, a docker option is automatically added to mount it
2022-02-17 11:39:34 +02:00
Teodor-Dumitru Ene
0c06531ce8 Add quick_design recipe to Makefile (#910)
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.
2022-02-13 06:26:15 +02:00
Donn
bd8ce27550 Allow Including sky130A in the OpenLane Docker Image (#846)
+ 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>
2022-01-05 16:14:14 +02:00
Donn
ec1e6bec68 Update environment survey, allow configuring python versions (#794)
* 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]
2021-12-24 01:45:19 +02:00
Donn
b91f251826 Move Binaries To Docker (#783)
+ 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
2021-12-23 00:35:30 +02:00
Mitch Bailey
13602d384e Fix SRAM installation options (#788)
[skip ci]
2021-12-22 22:18:41 +02:00
Donn
1ab8d55fab Fix or Remove Designs Failing The Extended Test Set (#777)
+ 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
2021-12-22 02:36:50 +02:00
Donn
c71becce71 Rewrite run_designs.py (#760)
+ 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`
2021-12-14 19:51:36 +02:00
Donn
79ede3dbf2 Improved Local Installs (#744)
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]
2021-12-09 13:05:18 +02:00
Donn
445acc69b3 Report Generation Bugfixes (#742)
* 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
2021-12-02 10:55:01 +02:00
Matt Liberty
540e2a2350 Allow OpenROAD GUI to run inside "make mount" (#740)
Signed-off-by: Matt Liberty <mliberty@eng.ucsd.edu>
2021-11-30 09:21:43 +02:00
Kareem Farid
1bf3709488 Correctly set when INSTALL_SRAM=enabled OPEN_PDK_ARGS (#738)
[skip ci]
2021-11-25 17:43:13 +02:00
Manar
6245b0e675 Fix sram install (#724)
Also disable by default
2021-11-19 21:38:50 +02:00
Donn
cbb562bd43 Assorted Usability Improvements (#709)
* 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
2021-11-13 13:20:00 +02:00
Donn
8950f1aaeb OpenROAD Script Updates (#702)
* 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.
2021-11-12 13:16:15 +02:00
Donn
6d85a85eac Docker Overhaul (#673)
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.
2021-10-25 14:45:52 +02:00
Donn
5278301413 Improved Environment Utilities (#648)
+ ./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>
2021-10-16 21:32:23 +02:00
Donn
18ef85a44b Makefile tweaks (#630)
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
2021-09-29 18:46:53 +02:00