Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: update tools #645

Draft
wants to merge 14 commits into
base: dev
Choose a base branch
from
22 changes: 16 additions & 6 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,13 @@
* Creates three reports to help verify that the RC values used for estimation
are set correctly.

* `OpenROAD.Floorplan`

* Fixed an issue in `FP_SIZING`: `absolute` mode where if the die area's
x0 > x1 or y0 > y1, the computed core area would no longer fit in the die
area. Not that we recommend you ever do that, but technically OpenROAD
allows it.

* `OpenROAD.GlobalPlacement`

* Added optional variable `PL_ROUTABILITY_MAX_DENSITY_PCT`
Expand Down Expand Up @@ -132,12 +139,15 @@

* Updated nix-eda
* Updated nixpkgs to nixos-24.11 (@ `3c53b4b`)
* Updated KLayout to `0.29.9`
* Updated Magic to `8.3.503`
* Updated Netgen to `1.5.287`
* Updated ioplace-parser to`0.4.0`
* Updated OpenROAD to `1d61007`
* Updated OpenSTA to `aa598a2`
* Updated KLayout to `0.29.10`
* Updated Magic to `8.3.515`
* Updated Netgen to `1.5.291`
* Updated ioplace-parser to `0.4.0`
* Updated OpenROAD to `655640a`
* Adds new DFT features
* Updated OpenSTA to `aa598a2`
* Updated Volare to `0.20.5`
* Includes support for ihp-sg13g2

## Testing

Expand Down
23 changes: 11 additions & 12 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 13 additions & 4 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@
flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";
};

inputs.libparse.inputs.nixpkgs.follows = "nix-eda/nixpkgs";
inputs.ioplace-parser.inputs.nix-eda.follows = "nix-eda";
inputs.volare.inputs.nixpkgs.follows = "nix-eda/nixpkgs";
inputs.volare.inputs.nix-eda.follows = "nix-eda";
inputs.libparse.inputs.nixpkgs.follows = "nix-eda/nixpkgs";
inputs.devshell.inputs.nixpkgs.follows = "nix-eda/nixpkgs";

outputs = {
Expand All @@ -53,7 +53,8 @@
overlays = {
default = lib.composeManyExtensions [
(import ./nix/overlay.nix)
(nix-eda.flakesToOverlay [libparse ioplace-parser volare])
(nix-eda.flakesToOverlay [libparse volare])
ioplace-parser.overlays.default
(
pkgs': pkgs: let
callPackage = lib.callPackageWith pkgs';
Expand Down Expand Up @@ -84,6 +85,10 @@
sphinx-tippy = callPythonPackage ./nix/sphinx-tippy.nix {};
sphinx-subfigure = callPythonPackage ./nix/sphinx-subfigure.nix {};
yamlcore = callPythonPackage ./nix/yamlcore.nix {};
tclint = pypkgs.tclint.override {
version = "0.4.2";
sha256 = "sha256-q01HEnSVB8xr8Z8vaBJjmf2GioXGzcq5JHsRKwMVfU4=";
};

# ---
openlane = callPythonPackage ./default.nix {};
Expand All @@ -110,7 +115,11 @@
system:
import nix-eda.inputs.nixpkgs {
inherit system;
overlays = [devshell.overlays.default nix-eda.overlays.default self.overlays.default];
overlays = [
devshell.overlays.default
nix-eda.overlays.default
self.overlays.default
];
}
);

Expand Down
14 changes: 8 additions & 6 deletions nix/create-shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,14 @@
in
devshell.mkShell {
devshell.packages = packages;
env = [
{
name = "NIX_PYTHONPATH";
value = "${openlane-env-sitepackages}";
}
] ++ extra-env;
env =
[
{
name = "NIX_PYTHONPATH";
value = "${openlane-env-sitepackages}";
}
]
++ extra-env;
devshell.interactive.PS1 = {
text = ''PS1="${prompt}"'';
};
Expand Down
5 changes: 3 additions & 2 deletions nix/openroad-abc.nix
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
fetchFromGitHub,
zlib,
abc-namespace-name ? "abc",
rev ? "ef5389d31526003c2ebd7e6d6d6fe3848a20f0a2",
sha256 ? "sha256-7W66b1Toa9uEAKoijPujqQXVjxf1Ku4w2eP2Vk0ri8c=",
rev ? "5c9448c085eb8bf1e433a22a954532e44206c6f9",
sha256 ? "sha256-5juDIbn77cqgqU2CQjIwYERemqs7XbqSJaT7VLtKWHc=",
}:
abc-verifier.overrideAttrs (finalAttrs: previousAttrs: {
name = "openroad-abc";
Expand All @@ -38,6 +38,7 @@ abc-verifier.overrideAttrs (finalAttrs: previousAttrs: {
"-DREADLINE_FOUND=FALSE"
"-DUSE_SYSTEM_ZLIB:BOOL=ON"
"-DABC_USE_NAMESPACE=${abc-namespace-name}"
"-DABC_SKIP_TESTS:BOOL=ON"
];

buildInputs = [zlib];
Expand Down
53 changes: 33 additions & 20 deletions nix/openroad.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
eigen,
cudd,
tcl,
tclreadline,
python3,
readline,
tclreadline,
spdlog,
libffi,
llvmPackages,
Expand All @@ -45,16 +45,27 @@
cmake,
ninja,
git,
gtest,
# environments,
rev ? "87af90f72f3f9be1fdfa1d886f0dd8d8b8f34694",
rev-date ? "2024-12-08",
sha256 ? "sha256-GS8DLpAtC5gJfQeP+YOCImVXaAPQNzVbdDjdiB7Aovc=",
rev ? "655640a795db2d2f6911f3cf447d410382c04c0a",
rev-date ? "2025-01-13",
sha256 ? "sha256-HRnF+taG3iUgOG4nYlXD2O0znF4zoZvxDpMMIkoNsL4=",
openroad,
buildPythonEnvForInterpreter,
}: let
stdenv = llvmPackages_17.stdenv;
cmakeFlagsCommon = debug: [
"-DTCL_LIBRARY=${tcl}/lib/libtcl${stdenv.hostPlatform.extensions.sharedLibrary}"
"-DTCL_HEADER=${tcl}/include/tcl.h"
"-DUSE_SYSTEM_BOOST:BOOL=ON"
"-DCMAKE_CXX_FLAGS=-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED=1 -I${eigen}/include/eigen3 ${lib.strings.optionalString debug "-g -O0"}"
"-DCMAKE_EXE_LINKER_FLAGS=-L${cudd}/lib -lcudd"
"-DVERBOSE=1"
];
in
stdenv.mkDerivation (finalAttrs: {
__structuredAttrs = true; # better serialization; enables spaces in cmakeFlags

pname = "openroad";
version = rev-date;

Expand All @@ -65,23 +76,20 @@ in
inherit sha256;
};

patches = [./patches/openroad/patches.diff];
cmakeFlagsDevDebug = lib.strings.concatMapStrings (
x: " \"${x}\" "
) (cmakeFlagsCommon true);

cmakeFlagsAll = [
"-DTCL_LIBRARY=${tcl}/lib/libtcl${stdenv.hostPlatform.extensions.sharedLibrary}"
"-DTCL_HEADER=${tcl}/include/tcl.h"
"-DUSE_SYSTEM_BOOST:BOOL=ON"
"-DCMAKE_CXX_FLAGS=-I${openroad-abc}/include"
"-DENABLE_TESTS:BOOL=OFF"
"-DVERBOSE=1"
];
cmakeFlagsDevRelease = lib.strings.concatMapStrings (
x: " \"${x}\" "
) (cmakeFlagsCommon false);

cmakeFlags =
finalAttrs.cmakeFlagsAll
(cmakeFlagsCommon false)
++ [
"-DUSE_SYSTEM_ABC:BOOL=ON"
"-DUSE_SYSTEM_OPENSTA:BOOL=ON"
"-DCMAKE_CXX_FLAGS=-I${eigen}/include/eigen3"
"-DENABLE_TESTS:BOOL=OFF"
"-DOPENSTA_HOME=${opensta}"
"-DABC_LIBRARY=${openroad-abc}/lib/libabc.a"
];
Expand All @@ -92,8 +100,7 @@ in

sed -i 's@#include "base/abc/abc.h"@#include <base/abc/abc.h>@' src/rmp/src/Restructure.cpp
sed -i 's@#include "base/main/abcapis.h"@#include <base/main/abcapis.h>@' src/rmp/src/Restructure.cpp
sed -i 's@# tclReadline@target_link_libraries(openroad readline)@' src/CMakeLists.txt
sed -i 's@''${TCL_LIBRARY}@''${TCL_LIBRARY}\n${cudd}/lib/libcudd.a@' src/CMakeLists.txt
sed -i 's@# tclReadline@target_link_libraries(openroad readline ${cudd}/lib/libcudd.a)@' src/CMakeLists.txt
'';

buildInputs = [
Expand All @@ -110,13 +117,15 @@ in
libsForQt5.qtbase
libsForQt5.qt5.qtcharts
llvmPackages.openmp
llvmPackages.libunwind

lemon-graph
opensta
glpk
zlib
clp
cbc
gtest

or-tools_9_11
];
Expand All @@ -131,12 +140,16 @@ in
ninja
libsForQt5.wrapQtAppsHook
llvmPackages_17.clang-tools
python3.pkgs.tclint
];

shellHook = ''
alias ord-format-changed="${git}/bin/git diff --name-only | grep -E '\.(cpp|cc|c|h|hh)$' | xargs clang-format -i -style=file:.clang-format";
alias ord-cmake-debug="cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g" -G Ninja $cmakeFlags .."
alias ord-cmake-release="cmake -DCMAKE_BUILD_TYPE=Release -G Ninja $cmakeFlags .."
ord-format-changed() {
${git}/bin/git diff --name-only | grep -E '\.(cpp|cc|c|h|hh)$' | xargs clang-format -i -style=file:.clang-format
${git}/bin/git diff --name-only | grep -E '\.(tcl)$' | xargs tclfmt --in-place
}
alias ord-cmake-debug="cmake -DCMAKE_BUILD_TYPE=Debug $cmakeFlagsDevDebug -G Ninja"
alias ord-cmake-release="cmake -DCMAKE_BUILD_TYPE=Release $cmakeFlagsDevRelease -G Ninja"
'';

passthru = {
Expand Down
10 changes: 5 additions & 5 deletions nix/patches/openroad-abc/zlib.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b90ac02d..b0d6b13f 100644
index 918fb79a1..272278b04 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -61,6 +61,11 @@ if( APPLE )
Expand Down Expand Up @@ -40,10 +40,10 @@ index b90ac02d..b0d6b13f 100644

set(ABC_MAIN_SRC src/base/main/main.c)
diff --git a/Makefile b/Makefile
index e94591b2..89e2500b 100644
index 798fb2e7b..be9e01b65 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ MODULES := \
@@ -23,7 +23,7 @@ MODULES := \
src/map/mapper src/map/mio src/map/super src/map/if src/map/if/acd \
src/map/amap src/map/cov src/map/scl src/map/mpm \
src/misc/extra src/misc/mvc src/misc/st src/misc/util src/misc/nm \
Expand All @@ -52,7 +52,7 @@ index e94591b2..89e2500b 100644
src/misc/mem src/misc/bar src/misc/bbl src/misc/parse \
src/opt/cut src/opt/fxu src/opt/fxch src/opt/rwr src/opt/mfs src/opt/sim \
src/opt/ret src/opt/fret src/opt/res src/opt/lpk src/opt/nwk src/opt/rwt \
@@ -45,6 +45,12 @@ $(ARCHFLAGS_EXE) : arch_flags.c
@@ -46,6 +46,12 @@ $(ARCHFLAGS_EXE) : arch_flags.c

INCLUDES += -I$(ABCSRC)/src

Expand All @@ -66,7 +66,7 @@ index e94591b2..89e2500b 100644
ifdef ABC_USE_STDINT_H
ARCHFLAGS ?= -DABC_USE_STDINT_H=1
diff --git a/src/misc/zlib/zlib.h b/src/misc/zlib/zlib.h
index 46c1a1ae..1667a8cf 100644
index 46c1a1aec..1667a8cfe 100644
--- a/src/misc/zlib/zlib.h
+++ b/src/misc/zlib/zlib.h
@@ -28,6 +28,10 @@
Expand Down
28 changes: 0 additions & 28 deletions nix/patches/openroad/patches.diff

This file was deleted.

7 changes: 7 additions & 0 deletions openlane/scripts/openroad/common/io.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,13 @@ proc write_views {args} {
write_verilog $::env(SAVE_NL)
}

if { [info exists ::env(SAVE_LOGICAL_NL)] } {
puts "Writing logic-only netlist to '$::env(SAVE_LOGICAL_NL)'…"
write_verilog\
-remove_cells "[get_physical_cells]"\
$::env(SAVE_LOGICAL_NL)
}

if { [info exists ::env(SAVE_PNL)] } {
puts "Writing powered netlist to '$::env(SAVE_PNL)'…"
write_verilog -include_pwr_gnd $::env(SAVE_PNL)
Expand Down
7 changes: 7 additions & 0 deletions openlane/state/design_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,13 @@ def list(Self) -> List[str]:
alts=["NETLIST"],
).register()

DesignFormat(
"logical_nl",
"logical_nl.v",
"Logical cell-only Verilog Netlist",
folder_override="nl",
).register()

DesignFormat(
"pnl",
"pnl.v",
Expand Down
Loading