Skip to content
Snippets Groups Projects
  1. Dec 25, 2023
    • Kareem Farid's avatar
    • Mohamed Gaber's avatar
      Ameliorate Warnings, PDN Generation, and the default design (#2066) · dbcc8252
      Mohamed Gaber authored
      ~ 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)
      dbcc8252
  2. Sep 05, 2023
    • Kareem Farid's avatar
      SDC Behavior Overhaul (#1944) · 5fb033ca
      Kareem Farid authored
      + Add PNR_SDC_FILE
      + Warn when (PNR|SIGNOFF)_SDC_FILE are not overwritten by the user.
      + Add SDC_IN and DEFAULT_SDC_FILE to ignore list in CI
      + Add per corner max slew/fanout/cap count to sta report
      + Add per corner worst hold and setup value to sta report 
      ~ Rename RCX_SDC_FILE to SIGNOFF_SDC_FILE.
      ~ Always use PNR_SDC_FILE instead of CURRENT_SDC except during signoff stage, where SIGNOFF_SDC_FILE is used instead
      ~ Enable DIODE_ON_PORTS and RUN_HEURISTIC_DIODE_INSERTION for APU which fails after SDC updates.
      ~ Adjust timing checkers according to the new reported values 
      5fb033ca
  3. Aug 31, 2023
    • Kareem Farid's avatar
      Overhaul Linter Handling of Black-boxed Verilog Models (#1929) · 3376e5f8
      Kareem Farid authored
      
      + add `generate_blackbox_verilog` that generates a black-boxed header file from a list of Verilog models
      + add `scripts/synth/blackbox.tcl` for `generate_blackbox_verilog`
      + use `generate_blackbox_verilog` with `VERILOG_FILES_BLACKBOX` and PDK verilog models
      + disable `UNDRIVEN` and `UNUSEDSIGNAL` for PDK verilog files
      + add `YOSYS_IN`, `YOSYS_OUT`, `YOSYS_DEFINES` which are used in blackbox.tcl
       to internal variables in ci variables documentation workflow 
      ~ enable `LINTER_INCLUDE_PDK_MODELS`
      
      Co-authored-by: default avatarDonn <me@donn.website>
      3376e5f8
  4. Aug 10, 2023
  5. Jul 12, 2023
    • Mohamed Gaber's avatar
      PDK Variable Consistency (#1892) · 2735f415
      Mohamed Gaber authored
      ~ Classified PDK variables by user modifiability
      ~ `SYNTH_MAX_FANOUT` -> Moved into PDK as `MAX_FANOUT_CONSTRAINT`
      ~ `SYNTH_MAX_TRAN` -> Moved into PDK as `MAX_TRANSITION_CONSTRAINT`
      ~ `SYNTH_CAP_LOAD` -> `OUTPUT_CAP_LOAD`
      - Removed `DEFAULT_MAX_TRAN` from PDK (unused)
      2735f415
  6. May 02, 2023
    • Mohamed Gaber's avatar
      Rework Tcl String Escaping (#1782) · b1cf21ab
      Mohamed Gaber authored
      + `scripts/config/tcl.py:escape_quoted_string` escapes strings for placement inside quotes for Tcl
      ~ Generated Tcl files now use quotes instead of {} for strings, using above
      ~ `Tcl.py` no longer ruins variables via overzealous escaping
      ~ `set_log` renamed to `set_and_log`, stupid arguments removed
      ~ `save_state` rewritten to rely on initial copy of `::env` array instead of spaghetti mess
      ~ Make 1506 test more comprehensive
      b1cf21ab
  7. Apr 16, 2023
    • Mohamed Gaber's avatar
      Reorganize Timing Reports (#1704) · 630aa1ff
      Mohamed Gaber authored
      ~ 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 
      630aa1ff
  8. Apr 10, 2023
    • Kareem Farid's avatar
      Magic LEF write updates (#1728) · 674456fa
      Kareem Farid authored
      + add wrapper.tcl to capture magic errors ported from openlane2
      ~ use lef/def or gds instead of mag to write a lef through MAGIC_LEF_WRITE_USE_GDS
      ~ print lef write log file path
      674456fa
  9. Apr 05, 2023
    • Kareem Farid's avatar
      Hierarchical Static Timing Analysis (#1675) · 8a4b1e7f
      Kareem Farid authored
      \+ Add `EXTRA_SPEFS`
      \+ Use `VERILOG_FILES_BLACKBOX` in sta. Allow skipping a file by adding a comment `/// sta-blackbox`
      \+ Detect blackboxed modules in typical-corner STA during sign off and warn the user about it
      \+ Add `run_sta_script` used in multicorner sta
      \+ Support sta in `or_issue.py`
      \+ Support sta in `run_tcl_script`
      \+ Check if regex defined in `FP_PDN_MACRO_HOOKS` has a match. Fixes https://github.com/The-OpenROAD-Project/OpenLane/issues/1599
      \~ Wrap `set_global_connections` around a flag since it is not supported by opensta
      \~ Run multicorner sta using standalone sta application for hierarchical
      sta support
      \~ Move `sta_multi_corner.tcl` to `scripts/openroad/sta/multi_corner.tcl`
      \~ Don't delete target directory of `-save` for multicorner spef files
      \~ Merge multi_corner sta and single corner into one script.
      \~ Split `RUN_STANDALONE` embedded inside openroad steps, which calls sta after, to another sta step run after said openroad step
      \- Remove `report_design_area` in `multi_corner.tcl` since it is not supported by standalone OpenSTA 
      \- Remove `scripts/openroad/sta.tcl`
      8a4b1e7f
  10. Mar 27, 2023
    • Kareem Farid's avatar
      Diode Insertion Overhaul (#1686) · 2e09573f
      Kareem Farid authored
      - 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 
      2e09573f
  11. Mar 21, 2023
    • Mohamed Gaber's avatar
      Exit Cleanup (#1685) · 8433bc03
      Mohamed Gaber authored
      ~ 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
      8433bc03
  12. Feb 26, 2023
  13. Feb 22, 2023
    • Kareem Farid's avatar
      Checkers updates (#1665) · a35b64aa
      Kareem Farid authored
      \+ Add `QUIT_ON_SYNTH_CHECKS` (perhaps needs a better name?)
      \~ `run_tcl_script` now logs warnings to `.warnings` file
      \~ `run_tcl_script` now logs errors to `.errors` file
      \~ Rename `CHECK_ASSIGN_STATEMENTS` to `QUIT_ON_ASSIGN_STATEMENTS`
      \~ Rename `CHECK_UNMAPPED_CELLS` to `QUIT_ON_UNMAPPED_CELLS`
      \~ Fix implementation of `QUIT_ON_UNMAPPED_CELLS` by inspecting the correct yosys stat file
      \~ Run `QUIT_ON_UNMAPPED_CELLS` and `QUIT_ON_ASSIGN_STATEMENTS` directly after synthesis before sta
      a35b64aa
  14. Feb 18, 2023
  15. Jan 23, 2023
  16. Jan 18, 2023
  17. Nov 10, 2022
    • Mohamed Gaber's avatar
      Yosys Script Enhancements (#1446) · 86615f8d
      Mohamed Gaber authored
      + Add yosys to `run_tcl_script`, enabling the automatic production of reproducibles
      ~ yosys -> f109fa3d4c56fe33bc626c298e04d45ae510dd0e
      ~ Cleaned up LEC script a bit (thanks @emjunaid for initial work)
      ~ Fix bug where cell_count was not extracted properly
      - Removed `get_yosys_bin`: It's been deprecated forever
      86615f8d
  18. Nov 01, 2022
    • Mohamed Gaber's avatar
      Add Wire Length Checker (#1463) · a0b19fa6
      Mohamed Gaber authored
      \+ 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
      a0b19fa6
  19. Oct 17, 2022
  20. Oct 09, 2022
    • Mohamed Gaber's avatar
      Changes Requested by Caravel Team (#1414) · cfb7ee91
      Mohamed Gaber authored
      + 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
      cfb7ee91
  21. Sep 28, 2022
  22. Sep 19, 2022
    • Mohamed Gaber's avatar
      Use OpenDB as the Primary Layout Format (#1244) · 3ee8cf0d
      Mohamed Gaber authored
      ===
      Flow Scripts
      ===
      + Support OpenROAD ODB format as the primary format in which data is stored after placement
      + Create `manipulate_layout` to centralize calling odbpy scripts
      + Add `CURRENT_POWERED_NETLIST` to list of "current" variables, separate from 
      `CURRENT_NETLIST` to avoid confusion
      ~ Update `scripts/odbpy/reader.py:OdbReader` and *all dependent scripts* now to use `odb` inputs and outputs. Add new `--output-def` flag to continue saving a DEF layout of the result.
      ~ Verbosity now a global variable, not an environment variable
      ~ Streamline saving using `scripts/utils/utils.tcl:run_openroad_script`: new `-save` option added that will automatically handle setting and unsetting `SAVE_` variables and `CURRENT_` variables
      ~ Rewrite Diode Insertion Strategy 3 iterations to be readable by human beings
      ~ `scripts/tcl_commands/all.tcl:heal_antenna_violators` now only uses `CURRENT_DEF`
      ~ `scripts/tcl_commands/all.tcl:set_netlist` updated to support flags and arguments properly, `-lec` now only works if `LEC_ENABLE` is set to `1`. Invocations updated
      ~ Usage of `scripts/tcl_commands/all.tcl:trim_lib` updated: no longer has any optional arguments. Documentation updated.
      ~ `scripts/tcl_commands/all.tcl:write_verilog` now uses `write_views.tcl` with the `-save` option. Documentation updated to reflect the fact it no longer calls `set_netlist`.
      ~ Fix various python invocations
      ~ Move `scripts/tcl_commands/routing.tcl:gen_pdn` to `floorplan`
      ~ Update `scripts/or_issue.py` to handle `odb` inputs and outputs
      ~ Update `scripts/tcl_commands/lvs.tcl:write_powered_verilog`, `scripts/tcl_commands/routing.tcl:power_routing` to use `-odb` as an input instead of `-def` (and, if applicable, `-output_odb` *alongside* `-output_def`)
      - Remove various scripts that rely on text manipulation (incl. `scripts/simple_cts.py`- thank you for your service)
      - Remove vestiges of site widening
      - Remove `-canonical` optional from `scripts/tcl_commands/all.tcl:write_verilog` (dubious/undocumented utility)
      - Remove `verilog_to_verilogPower` (unused)
      - Remove `zeroize_origin_lef`
      - Remove `PREV_NETLIST` variable
      - Remove various invocations of `scripts/tcl_commands/utils.tcl:write_verilog`, replace with `-save` arguments
      
      ## OpenROAD Scripts
      + Create OpenROAD script `common` folder, isolating common code into a folder instead of the preceding chaos
      + OpenROAD scripts now use a unified script for reading and writing views: `scripts/openroad/common/io.tcl`: `read` reads the `.odb` database + relevant liberty and sdc files and `write` writes any views specified as `SAVE_` variables: see the file for documentation
      ~ Update Copyright & Licensing for all OpenROAD scripts
      ~ Rewrite `scripts/odbpy/defutil.py:merge_components` to use odb
      ~ `scripts/odbpy/defutil.py:replace_pins` -> `relocate_pins`, with a partial rewrite and re-documentation.
      ~ `scripts/odbpy/defutil.py:add_def_obstructions` -> `add_obstructions`
      ~ `scripts/openroad/write_verilog.tcl` -> `write_view.tcl`, since it is literally just a "read" and a "write" call now
      ~ Partially rewrite `scripts/odbpy/power_utils.py:write_powered_def`, the most disgusting function in the codebase
      - Remove `scripts/odbpy/defutil.py:merge_pins` (unused)
      3ee8cf0d
  23. Jul 20, 2022
    • Mohamed Gaber's avatar
      New Tagging Scheme + Issue Features (#1216) · 2f942308
      Mohamed Gaber authored
      + 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`
      2f942308
  24. Jun 21, 2022
    • Mohamed Gaber's avatar
      Fix Antenna Checkers, Magic Script Enhancements (#1154) · ebad315d
      Mohamed Gaber authored
      + `run_magic_script` added, replacing all individual magic invocations and supporting `or_issue`
      ~ Fix max capacitance/fanout violations being misreported as slew violations
      ~ `extract_antenna_violators.py`, `or_issue.py` rewritten in click
      ~ Fix issue where `diodes.py` doesn't expose `replace_fake`
      ~ Fix various odbpy script invocations broken by #864
      ~ Fix issue where entire run folder was not deleted on overwrite (again, #864)
      ~ `spice_extract.tcl`, `antenna_check.tcl` both now attempt their own extraction to avoid maglef/mag confusion scenarios
      ~ Fix long-standing issue with diode insertion strategy 3
      ~ Rewrite diode insertion strategy 5
      ebad315d
  25. Jun 10, 2022
    • Mohamed Gaber's avatar
      Updates to `save_final_views` (#1137) · 5a767e7f
      Mohamed Gaber authored
      + 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
      5a767e7f
  26. Jun 07, 2022
    • Mohamed Gaber's avatar
      Python Cleanup (#864) · b29b7153
      Mohamed Gaber authored
      + 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.
      b29b7153
  27. Apr 26, 2022
    • Kareem Farid's avatar
      Small QOL changes (#1068) · d4566dda
      Kareem Farid authored
      - Change 'Running Resizer ..' to 'Running Placement Resizer..' and other
        equivalent changes
      - add the piping part to run_openroad_script function allowing for
        logging the log file of the openroad script in openlane's run cmds.log
      - report the relative log file path on openroad script crash
      - adjust "skipping" messages
      d4566dda
  28. Apr 07, 2022
    • Mohamed Gaber's avatar
      Multi-Process Corner RCX (#978) · b7370865
      Mohamed Gaber authored
      + 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
      b7370865
  29. Mar 28, 2022
    • Donn's avatar
      ECO Flow Tweaks (#1008) · f2f5d835
      Donn authored
      + 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
      f2f5d835
  30. Mar 14, 2022
    • Donn's avatar
      More Usability Tweaks (#984) · 00da77e5
      Donn authored
      + `-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)
      00da77e5
  31. Mar 01, 2022
  32. Feb 18, 2022
  33. Jan 12, 2022
    • Donn's avatar
      Assorted Fixes To Error Reporting System (#854) · c4fbac9d
      Donn authored
      + 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
      c4fbac9d
  34. Jan 09, 2022
    • Mehdi Saligane's avatar
      Add an ECO Flow for hold timing violations fixes (#791) · 99cf10ce
      Mehdi Saligane authored
      
      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: default avatarKe-Haur Taur <khtaur@umich.edu>
      Co-authored-by: default avatarHaolin Dong <haolind@umich.edu>
      99cf10ce
  35. Dec 16, 2021
    • Donn's avatar
      Centralize Calling OpenROAD + Automatic Reproducibles (#764) · c1083b59
      Donn authored
      All OpenROAD scripts are now called with `run_openroad_script`, a variant of `try_catch`, that upon detecting a failure will automatically invoke ./scripts/or_issue.py and create a reproducible within the run directory.
      
      Also tweaks to how yosys is invoked.
      c1083b59
  36. Dec 15, 2021
  37. Dec 09, 2021
    • Kareem Farid's avatar
      Miscellaneous Enhancements (#745) · e5fcf928
      Kareem Farid authored
      + Add RUN_MAGIC_DRC flag to control running DRC with magic
      + Add RUN_LVS flag to control running LVS
      ~ replace grepCount.sh with something sane
      e5fcf928
  38. Nov 24, 2021
Loading