OpenROAD icon indicating copy to clipboard operation
OpenROAD copied to clipboard

PSM power grid check lists false-positive disconnected nodes inside macros

Open donn opened this issue 1 year ago • 7 comments

Describe the bug

Trying a smoke-test multi-macro design with core rings: check_power_grid -net VPWR reports a multitude of disconnected PDN nets. Key is, the nets are not in fact disconnected there are vias at the claimed location: see this example

Screenshot 2023-12-18 at 17 15 43

When disabling the check, the design does indeed pass LVS.

Expected Behavior

A design passing LVS should not fail the PSM power grid check.

Environment

Git commit: 75f2f325b7a42e56a92404f33af8e96530d9b202
kernel: Darwin 23.1.0
os: macOS 14.1.1
cmake version 3.27.7
CMake Deprecation Warning at third-party/abc/CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


CMake Warning:
  Manually-specified variables were not used by the project:

    VERBOSE


-- The CXX compiler identification is Clang 16.0.6
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/zh206nri10wwp68g7qf9ccya1irynx5g-clang-wrapper-16.0.6/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- OpenROAD version: v2.0-11533-g75f2f325b
-- System name: Darwin
-- Compiler: Clang 16.0.6
-- Build type: RELEASE
-- Install prefix: /var/empty/local
-- C++ Standard: 17
-- C++ Standard Required: ON
-- C++ Extensions: OFF
-- The C compiler identification is Clang 16.0.6
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /nix/store/zh206nri10wwp68g7qf9ccya1irynx5g-clang-wrapper-16.0.6/bin/clang - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Performing Test C_COMPILER_SUPPORTS__-Wall
-- Performing Test C_COMPILER_SUPPORTS__-Wall - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wall
-- Performing Test CXX_COMPILER_SUPPORTS__-Wall - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-array-bounds
-- Performing Test C_COMPILER_SUPPORTS__-Wno-array-bounds - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-array-bounds
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-array-bounds - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-nonnull
-- Performing Test C_COMPILER_SUPPORTS__-Wno-nonnull - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-nonnull
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-nonnull - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-maybe-uninitialized
-- Performing Test C_COMPILER_SUPPORTS__-Wno-maybe-uninitialized - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-maybe-uninitialized
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-maybe-uninitialized - Failed
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format-overflow
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format-overflow - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format-overflow
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format-overflow - Failed
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-variable
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-variable - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-variable
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-variable - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-function
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-function - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-function
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-function - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-write-strings
-- Performing Test C_COMPILER_SUPPORTS__-Wno-write-strings - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-write-strings
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-write-strings - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-sign-compare
-- Performing Test C_COMPILER_SUPPORTS__-Wno-sign-compare - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-sign-compare
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-sign-compare - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-deprecated
-- Performing Test C_COMPILER_SUPPORTS__-Wno-deprecated - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-deprecated
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-deprecated - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-c++11-narrowing
-- Performing Test C_COMPILER_SUPPORTS__-Wno-c++11-narrowing - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-c++11-narrowing
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-c++11-narrowing - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-register
-- Performing Test C_COMPILER_SUPPORTS__-Wno-register - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-register
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-register - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal
-- Performing Test C_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal - Success
-- Performing Test C_COMPILER_SUPPORTS__-fpermissive
-- Performing Test C_COMPILER_SUPPORTS__-fpermissive - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-fpermissive
-- Performing Test CXX_COMPILER_SUPPORTS__-fpermissive - Success
-- Performing Test C_COMPILER_SUPPORTS__-x
-- Performing Test C_COMPILER_SUPPORTS__-x - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-x
-- Performing Test CXX_COMPILER_SUPPORTS__-x - Failed
-- Performing Test C_COMPILER_SUPPORTS__c++
-- Performing Test C_COMPILER_SUPPORTS__c++ - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__c++
-- Performing Test CXX_COMPILER_SUPPORTS__c++ - Failed
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-but-set-variable
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-but-set-variable - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-but-set-variable
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-but-set-variable - Success
-- TCL library: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/lib/libtcl.dylib
-- TCL header: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/include/tcl.h
-- TCL readline library: /nix/store/ajpyasvckmhr4w0jf92hjcqh4wfpy214-tclreadline-2.3.8/lib/libtclreadline.dylib
-- TCL readline header: /nix/store/ajpyasvckmhr4w0jf92hjcqh4wfpy214-tclreadline-2.3.8/include
-- Found SWIG: /nix/store/f0kg0q7y7m9rlfs1skgrqkhhmbhd2slh-swig-3.0.12/bin/swig (found suitable version "3.0.12", minimum required is "3.0")  
-- Found Boost: /nix/store/vf1zzbfy97i3awvva9yb2559vii2vc47-boost-1.83.0-dev/lib/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0")  
-- boost: 1.83.0
-- Found Python3: /nix/store/7b0rz3bnx7msw2wawkv1hhn5lqf1b0wi-python3-3.11.6/include/python3.11 (found version "3.11.6") found components: Development Development.Module Development.Embed 
-- Found ZLIB: /nix/store/a377d66g1rgsd4vkzxdhkza5g55fkmky-zlib-1.3/lib/libz.dylib (found version "1.3")  
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- spdlog: 1.12.0
-- Found BISON: /nix/store/js4fzri749vfnjda5jz73ydclv5dgjan-bison-3.8.2/bin/bison (found version "3.8.2") 
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
-- STA version: 2.4.0
-- STA git sha: 5b374dd36ad345c9fcd5224e9fc20484393568ab
-- System name: Darwin
-- Compiler: Clang 16.0.6
-- Build type: RELEASE
-- Build CXX_FLAGS: -O3 -DNDEBUG
-- Install prefix: /var/empty/local
-- Found FLEX: /nix/store/4zngv9imr4gii0zz9wmi4am1ijf14xib-flex-2.6.4/bin/flex (found version "2.6.4") 
-- TCL library: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/lib/libtcl.dylib
-- TCL header: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/include/tcl.h
-- SSTA: 0
-- STA executable: /Users/donn/efabless/openroad/src/sta/app/sta
-- Found Protobuf: /nix/store/nkrmgb9ikzpdrs5h02jrw7yd69wybwv7-protobuf-21.12/lib/libprotobuf.dylib (found version "3.21.12") 
-- Found re2: /nix/store/hpdlfnhcp4xpc0y2kn2z7644ksy46mz6-re2-2023-11-01-dev/lib/cmake/re2/re2Config.cmake (found version "11.0.0") 
-- Found GLPK: /nix/store/xh65x0zq6ni7dkb1dymdrahxll81ma8m-glpk-5.0/lib/libglpk.dylib  
-- Found OpenMP_CXX: -fopenmp=libomp (found version "5.0") 
-- Found OpenMP: TRUE (found version "5.0")  
-- GPU is not enabled
-- TCL library: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/lib/libtcl.dylib
-- TCL header: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/include/tcl.h
-- Found Eigen3: /nix/store/wx9kzvpd6ck59i9n2rg2jgir3km31n8b-eigen-3.4.0/share/eigen3/cmake/Eigen3Config.cmake (found version "3.4.0") 
-- GUI is enabled
-- Charts widget is not enabled
-- Found Boost: /nix/store/vf1zzbfy97i3awvva9yb2559vii2vc47-boost-1.83.0-dev/lib/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0") found components: serialization 
-- Could NOT find VTune (missing: VTune_LIBRARIES VTune_INCLUDE_DIRS) 
-- Found Boost: /nix/store/vf1zzbfy97i3awvva9yb2559vii2vc47-boost-1.83.0-dev/lib/cmake/Boost-1.83.0/BoostConfig.cmake (found suitable version "1.83.0", minimum required is "1.78")  
-- TCL library: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/lib/libtcl.dylib
-- TCL header: /nix/store/l1rhkhykl3vzqipkk1c7wm6qanswxnrk-tcl-8.6.13/include/tcl.h
-- Found Boost: /nix/store/vf1zzbfy97i3awvva9yb2559vii2vc47-boost-1.83.0-dev/lib/cmake/Boost-1.83.0/BoostConfig.cmake (found version "1.83.0") found components: serialization system thread 
-- Removing MPL2 and PAR to avoid run time fatal error.
-- TCL readline enabled
-- Tcl Extended disabled
-- Python3 enabled
-- Removing PAR_PY to avoid run time fatal error.
-- Configuring done (12.0s)
-- Generating done (0.7s)
-- Build files have been written to: /tmp/tmp.iWDflSEtcm

To Reproduce

You may use the very short ./run.sh or load the odb into the GUI:

repro.tgz

Relevant log output

No response

Screenshots

No response

Additional Context

No response

donn avatar Dec 18 '23 15:12 donn

I believe LVS passes but the design is oddly constructed. The instance has pins: image while at the top level you have: image They shapes are connected only through the instance pin shapes. Is this intended? How was this grid constructed?

maliberty avatar Dec 18 '23 21:12 maliberty

@maliberty Apologies for the late response. Here's the reproducible for the top-level PDN generation:

repro.tgz

Fully expecting something here to not make sense given your confusion 😅

donn avatar Dec 24 '23 09:12 donn

any response to "Is this intended? How was this grid constructed?"

maliberty avatar Jan 08 '24 02:01 maliberty

nvm

maliberty avatar Jan 08 '24 02:01 maliberty

@gadfort any thoughts on this? It appears to be trying to connect the shapes that in the ring pin of the instance. Oddly it doesn't happen in both rings.

maliberty avatar Jan 08 '24 02:01 maliberty

@gadfort your shape merging idea would fix the psm issue here.

maliberty avatar Jan 08 '24 02:01 maliberty

@maliberty Ill take a look tomorrow if I can

gadfort avatar Jan 08 '24 02:01 gadfort