Skip to content

Commit

Permalink
Merge branch 'dev' into dpo
Browse files Browse the repository at this point in the history
  • Loading branch information
kareefardi authored Dec 12, 2024
2 parents 1ab039d + df6079d commit a4fe564
Show file tree
Hide file tree
Showing 22 changed files with 307 additions and 94 deletions.
228 changes: 228 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,234 @@
## Documentation
-->

# 2.2.9

## Steps

* `Yosys.JsonHeader`, `Yosys.Synthesis`

* Fixed `VERILOG_INCLUDE_DIRS` being a list of strings instead of a list of
`Path`s.

# 2.2.8

## Steps

* `Checker.*Violations`

* Changed `TIMING_VIOLATION_CORNERS` to a PDK variable to avoid breaking PDKs
without `tt` in corner names.

# 2.2.7

## Steps

* `OpenROAD.WriteViews`

* Fixed step not being registered to factory object.

# 2.2.6

## Steps

* `OpenROAD.ResizerTimingPostGRT`

* Fixed `GRT_RESIZER_GATE_CLONING` incorrectly applied to hold fixing instead
of setup fixing.

* `OpenROAD.ResizerTimingPostCTS`

* Fixed `PL_RESIZER_GATE_CLONING` incorrectly applied to hold fixing instead
of setup fixing.

# 2.2.5

## Steps

* `Yosys.JsonHeader`, `Verilator.Lint`, `Odb.WriteVerilogHeader`

* Fixed `VERILOG_POWER_DEFINE` not being optional which was an unintentional
break from OpenLane 1.

* Default value is still `USE_POWER_PINS`, but it can be explicitly unset.

## Misc. Enhancements/Bugfixes

* `openlane.config`: Fixed issue where preprocessor would ignore explicitly-set
null values in configuration files.

# 2.2.4

## Tool Updates

* `yosys-sby`: Overlaid new hash for `yosys-0.46` tag because of a tag update
upstream.

# 2.2.3

## Misc. Enhancements/Bugfixes

* Fixed incorrect error message when subtituting a step with one that has a
nonexistent ID.

# 2.2.2

## Steps

* `Odb.*`

* Fixed OpenROAD dropping user-set `PYTHONPATH` values.

## Tool Updates

* Use `NIX_PYTHONPATH` instead of `PYTHONPATH` in Docker and devshells to avoid
collisions with user-set `PYTHONPATH` variables.

# 2.2.1

This patch has no functional changes to OpenLane proper.

## Tool Updates

* `flake.createOpenLaneShell` now gets OpenLane from `python3.pkgs`.
* Fixed issue with `flake.createOpenLaneShell` where plugins would not get
included due to an operator precedence issue.

# 2.2.0

## CLI

* Exposed Flow.start(overwrite=) as `--overwrite`, which removes a run directory
before running the flow (if it exists)

## Steps

* Created `Odb.ManualGlobalPlacement`

* Can create a global placement for instances. Intended for
manually-instantiated buffers that require a certain regional placement or
similar.
* Uses new variable `MANUAL_GLOBAL_PLACEMENTS`, a mapping from instance names
to the `Instance` class.

* Created `Odb.CellFrequencyTables`

* Creates a number of tables to show the cell frequencies by:
* Cells
* Buffer cells only
* Cell Function
* SCL

* `OpenROAD.*`

* All steps that modify views now update design cell metrics using OpenROAD's
`report_design_area_metrics`

* `OpenROAD.ResizerTimingPostGRT`

* Added `GRT_RESIZER_RUN_GRT` to control whether global routing is re-run
after this step, which is usually required but may be redundant in some
custom flows.

* `OpenROAD.RepairDesignPostGRT`

* Added `GRT_DESIGN_REPAIR_RUN_GRT` to control whether global routing is
re-run after this step, which is usually required but may be redundant in
some custom flows.

* `OpenROAD.STA*`

* New report `clock.rpt` created with information about each clock in a
specific domain

* `OpenROAD.WriteViews`

* Added `OPENROAD_LEF_BLOAT_OCCUPIED_LAYERS` with a default value of `true`

* `Yosys.*Synthesis`

* ABC scripts used now created dynamically and dumped as a `.abc` file into
the step directory.
* Implemented many of the
[suggestions by @ravenslofty](https://github.com/efabless/openlane2/issues/524)
from YosysHQ, some behind flags:
* `SYNTH_ABC_DFF`: Adds `-dff` to `abc` invocations (except the ones inside
`synth`)
* `SYNTH_ABC_BOOTH`: Activates the
[`booth`](https://yosyshq.readthedocs.io/projects/yosys/en/0.44/cmd/booth.html)
pass as part of `synth`
* `SYNTH_ABC_USE_MFS3`: Uses `mfs3` in all strategies before retime
* `SYNTH_ABC_AREA_USE_NF`: Attempts delay-based mapping with a really high
delay value instead of area-based mapping.

* `Yosys.JsonHeader`, `Yosys.*Synthesis`

* **Internal**: * Steps are no longer `TclStep`s: rewritten in Python and now
use `libyosys`. While there are no functional changes, this enhances the
codebase's consistency and helps avoid tokenization-related security issues.

## Flows

* `Classic`
* Emplaced `Odb.ManualGlobalPlacement` immediately preceding
`OpenROAD.DetailedPlacement`.
* Emplaced `Odb.CellFrequencyTables` after `OpenROAD.FillInsertion`

## Tool Updates

* OpenROAD -> `bbe940134bddf836894bfd1fe02153f4a38f8ae5`

* OpenSTA -> `20925bb00965c1199c45aca0318c2baeb4042c5a`
* Removed "stable" version of OpenSTA

* Updated nix-eda to `0814aa6`: more orthodox approach to managing dependencies
by overlaying them on top of nixpkgs, which fixes an occasional "repeated
allocation" issue and helps make override behavior more consistent.

* Yosys and first-party plugins -> `0.46`
* `klayout` -> `0.29.4`
* `magic` -> `8.3.489`
* `netgen` -> `1.5.278`
* OpenROAD now used with new `withPythonPackages` features to use Python
packages specifically for the OpenROAD environment

* OpenLane itself no longer included in `devShells.*.dev`, `devShells.*.docs`

* These shells are intended to be actual dev shells, i.e. used to develop
OpenLane, and needing OpenLane to pass tests to run these shells makes no
sense.

* Open PDKs -> `0fe599b` (Recommended for chipIgnite 2409/2411+ shuttles)

## Misc. Enhancements/Bugfixes

* `openlane.common.metrics`
* `aggregate_metrics()`: Added support for aggregation of N-modifier levels
* `openlane.config.Config`
* YAML 1.2 configuration files now accepted using `.yaml` or `.yml`
extensions, with the same featureset as JSON files.
* The first configuration (file/dict) supplied no longer needs to be a
complete configuration so long as any required variables are supplied in
later configurations. Missing variables are only checked on the complete
configuration.
* Internally reworked how config files and command-line overrides are parsed.
* Fixed bug with deprecated variable translations of
`{CLOCK,SIGNAL}_WIRE_RC_LAYERS`.

## Documentation

* Added info on YAML configuration files.
* Documentation for `Instance` dataclass generalized to include instances of
cells and not macros.

# 2.1.11

## Steps

* `OpenROAD.STA*PnR`

* Fixed `timing__*_r2r__ws__corner` metrics reporting the wrong value

# 2.1.10

## Misc. Enhancements/Bugfixes
Expand Down
5 changes: 4 additions & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@
default = lib.composeManyExtensions [
(import ./nix/overlay.nix)
(nix-eda.flakesToOverlay [libparse ioplace-parser volare])
(pkgs': pkgs: {
yosys-sby = (pkgs.yosys-sby.override { sha256 = "sha256-Il2pXw2doaoZrVme2p0dSUUa8dCQtJJrmYitn1MkTD4="; });
})
(
pkgs': pkgs: let
callPackage = lib.callPackageWith pkgs';
Expand Down Expand Up @@ -125,7 +128,7 @@
devShells = nix-eda.forAllSystems (
system: let
pkgs = self.legacyPackages."${system}";
callPackage = lib.callPackageWith (pkgs // {inherit (self.legacyPackages."${system}".python3.pkgs) openlane;});
callPackage = lib.callPackageWith pkgs;
in {
# These devShells are rather unorthodox for Nix devShells in that they
# include the package itself. For a proper devShell, try .#dev.
Expand Down
7 changes: 3 additions & 4 deletions nix/create-shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
include-openlane ? true
}: ({
lib,
openlane,
git,
zsh,
delta,
Expand All @@ -29,10 +28,10 @@
python3,
devshell,
}: let
openlane = python3.pkgs.openlane;
openlane-env = (
python3.withPackages (pp:
with pp;
if include-openlane then [openlane] else openlane.propagatedBuildInputs
(if include-openlane then [openlane] else openlane.propagatedBuildInputs)
++ extra-python-packages
++ openlane-plugins)
);
Expand Down Expand Up @@ -60,7 +59,7 @@ in
devshell.packages = packages;
env = [
{
name = "PYTHONPATH";
name = "NIX_PYTHONPATH";
value = "${openlane-env-sitepackages}";
}
];
Expand Down
2 changes: 1 addition & 1 deletion nix/docker.nix
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ in
"LC_ALL=C.UTF-8"
"LC_CTYPE=C.UTF-8"
"EDITOR=nvim"
"PYTHONPATH=${openlane-env-sitepackages}"
"NIX_PYTHONPATH=${openlane-env-sitepackages}"
"TMPDIR=/tmp"
];
image-config-extra-path = [
Expand Down
2 changes: 1 addition & 1 deletion notebook.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
"import subprocess\n",
"import IPython\n",
"\n",
"openlane_version = \"latest\" # @param {key:\"OpenLane Version\", type:\"string\"}\n",
"openlane_version = \"version-2.1\" # @param {key:\"OpenLane Version\", type:\"string\"}\n",
"\n",
"if openlane_version == \"latest\":\n",
" openlane_version = \"main\"\n",
Expand Down
1 change: 1 addition & 0 deletions openlane/config/pdk_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ def process_sta(key: str):
]

new["DEFAULT_CORNER"] = f"nom_{default_pvt}"
new["TIMING_VIOLATION_CORNERS"] = ["*tt*"]
new["LIB"] = lib_sta

# x4. Constraints (sky130/gf180mcu)
Expand Down
2 changes: 1 addition & 1 deletion openlane/config/preprocessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ def process_dict_recursive(
else:
processed = value

if processed is not None:
if not key.startswith(PDK_PREFIX) and not key.startswith(SCL_PREFIX):
ref[key] = processed
symbols[current_key_path] = processed

Expand Down
2 changes: 1 addition & 1 deletion openlane/flows/sequential.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def __substitute_step(
with_step_opt = Step.factory.get(with_step)
if with_step_opt is None:
raise FlowException(
f"Could not {mode} '{step.id}' with '{with_step}': no replacement step with ID '{with_step}' found."
f"Could not {mode} '{id}' with '{with_step}': no replacement step with ID '{with_step}' found."
)
with_step = with_step_opt

Expand Down
2 changes: 1 addition & 1 deletion openlane/open_pdks_rev
Original file line number Diff line number Diff line change
@@ -1 +1 @@
bdc9412b3e468c102d01b7cf6337be06ec6e9c9a
0fe599b2afb6708d281543108caf8310912f54af
17 changes: 9 additions & 8 deletions openlane/scripts/odbpy/power_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,13 +322,13 @@ def set_power_connections(input_json, reader: OdbReader):
@click.option(
"--power-define",
type=str,
required=True,
required=False,
)
@click_odb
def write_verilog_header(
output_vh: str,
input_json: str,
power_define: str,
power_define: Optional[str],
reader: OdbReader,
):
input_dict = json.load(open(input_json))
Expand Down Expand Up @@ -373,13 +373,14 @@ def write_verilog_header(
# Write module
print("// Auto-generated by OpenLane", file=f)
print(f"module {design_name}(", file=f)
print(f"`ifdef {power_define}", file=f)
last_pos = f.tell()
for decl in pg_decls:
print(f" {decl}", file=f, end="")
last_pos = f.tell()
print(",", file=f)
print("`endif", file=f)
if power_define is not None:
print(f"`ifdef {power_define}", file=f)
for decl in pg_decls:
print(f" {decl}", file=f, end="")
last_pos = f.tell()
print(",", file=f)
print("`endif", file=f)
for decl in signal_decls:
print(f" {decl}", file=f, end="")
last_pos = f.tell()
Expand Down
15 changes: 9 additions & 6 deletions openlane/scripts/openroad/rsz_timing_postcts.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,15 @@ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
estimate_parasitics -placement

# Resize
repair_timing -verbose -setup \
-setup_margin $::env(PL_RESIZER_SETUP_SLACK_MARGIN) \
-max_buffer_percent $::env(PL_RESIZER_SETUP_MAX_BUFFER_PCT)
set arg_list [list]
lappend arg_list -verbose
lappend arg_list -setup
lappend arg_list -setup_margin $::env(PL_RESIZER_SETUP_SLACK_MARGIN)
lappend arg_list -max_buffer_percent $::env(PL_RESIZER_SETUP_MAX_BUFFER_PCT)
if { $::env(PL_RESIZER_GATE_CLONING) != 1 } {
lappend arg_list -skip_gate_cloning
}
repair_timing {*}$arg_list

set arg_list [list]
lappend arg_list -verbose
Expand All @@ -42,9 +48,6 @@ lappend arg_list -max_buffer_percent $::env(PL_RESIZER_HOLD_MAX_BUFFER_PCT)
if { $::env(PL_RESIZER_ALLOW_SETUP_VIOS) == 1 } {
lappend arg_list -allow_setup_violations
}
if { $::env(PL_RESIZER_GATE_CLONING) != 1 } {
lappend arg_list -skip_gate_cloning
}
repair_timing {*}$arg_list

# Legalize
Expand Down
Loading

0 comments on commit a4fe564

Please sign in to comment.