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

coyote_tc config.mk in ORFS failing at PDN/PAD Placement #1621

Closed
nchiolino opened this issue Nov 15, 2023 · 15 comments
Closed

coyote_tc config.mk in ORFS failing at PDN/PAD Placement #1621

nchiolino opened this issue Nov 15, 2023 · 15 comments

Comments

@nchiolino
Copy link

Subject

Describe the bug

When running the sky130hg/coyote_tc/config.mk Makefile, it appears as though it fails when trying to floorplan the PDN grid to the supply pins of the I/O cells. Its not clear if the error is associated with the PDN.tcl file or the PAD.tcl file. When loading the ODB files for macro placement, it appears that both macros and the I/O have successfully placed. It just seems as though the power grid cannot "find" or complete due to an issue I cannot understand. I have all the latest example files as of 11/10/23. The last few lines of the 2_6_floorplan_pdn.log file can be seen below:

[WARNING PDN-0189] Supply pin SRC_BDY_HVC of instance u_vdd_8 is not connected to any net.
[WARNING PDN-0189] Supply pin DRN_HVC of instance u_vss_8 is not connected to any net.
[WARNING PDN-0189] Supply pin SRC_BDY_HVC of instance u_vss_8 is not connected to any net.
[WARNING PDN-0189] Supply pin DRN_HVC of instance u_vzz_20 is not connected to any net.
[WARNING PDN-0189] Supply pin SRC_BDY_HVC of instance u_vzz_20 is not connected to any net.
[WARNING PDN-0189] Supply pin DRN_HVC of instance u_v18_20 is not connected to any net.
[WARNING PDN-0189] Supply pin SRC_BDY_HVC of instance u_v18_20 is not connected to any net.
[INFO PDN-0001] Inserting grid: grid
Command terminated by signal 9

Expected Behavior

I expect the example design to run successfully.

Environment

[WARNING] Your current OpenROAD version is outdated.

It is recommened to pull the latest changes.

If problem persists, file a github issue with the re-producible test case.

kernel: Linux 6.2.0-36-generic

os: Ubuntu 22.04.3 LTS (Jammy Jellyfish)

cmake version 3.24.2

-- The CXX compiler identification is GNU 11.4.0

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Check for working CXX compiler: /usr/bin/c++ - skipped

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- OpenROAD version: v2.0-10925-gb7c9b7e1c

-- System name: Linux

-- Compiler: GNU 11.4.0

-- Build type: RELEASE

-- Install prefix: /usr/local

-- C++ Standard: 17

-- C++ Standard Required: ON

-- C++ Extensions: OFF

-- The C compiler identification is GNU 11.4.0

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Check for working C compiler: /usr/bin/cc - skipped

-- Detecting C compile features

-- Detecting C compile features - done

-- Found Python: /usr/bin/python3.10 (found version "3.10.12") found components: Interpreter 

-- Performing Test CMAKE_HAVE_LIBC_PTHREAD

-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success

-- Found Threads: TRUE  

-- 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 - Success

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-maybe-uninitialized

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-maybe-uninitialized - Success

-- Performing Test C_COMPILER_SUPPORTS__-Wno-format-overflow

-- Performing Test C_COMPILER_SUPPORTS__-Wno-format-overflow - Success

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format-overflow

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format-overflow - Success

-- 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 - Failed

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-c++11-narrowing

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-c++11-narrowing - Failed

-- Performing Test C_COMPILER_SUPPORTS__-Wno-register

-- Performing Test C_COMPILER_SUPPORTS__-Wno-register - Failed

-- 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 - Failed

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal

-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal - Failed

-- Performing Test C_COMPILER_SUPPORTS__-fpermissive

-- Performing Test C_COMPILER_SUPPORTS__-fpermissive - Failed

-- 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: /usr/lib/x86_64-linux-gnu/libtcl.so

-- TCL header: /usr/include/tcl/tcl.h

-- TCL readline library: /usr/lib/x86_64-linux-gnu/libtclreadline.so

-- TCL readline header: /usr/include/x86_64-linux-gnu

-- Found SWIG: /usr/bin/swig4.0 (found suitable version "4.0.2", minimum required is "3.0")  

-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0")  

-- boost: 1.80.0

-- Found Python3: /usr/include/python3.10 (found version "3.10.12") found components: Development Development.Module Development.Embed 

-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 

-- spdlog: 1.8.1

-- Found BISON: /usr/bin/bison (found version "3.8.2") 

-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 

-- STA version: 2.4.0

-- STA git sha: 3e2295adfd5ffb7053aa6bb68f31b0eae8f2986f

-- System name: Linux

-- Compiler: GNU 11.4.0

-- Build type: RELEASE

-- Build CXX_FLAGS: -O3 -DNDEBUG

-- Install prefix: /usr/local

-- Found FLEX: /usr/bin/flex (found version "2.6.4") 

-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so

-- TCL header: /usr/include/tcl/tcl.h

-- SSTA: 0

-- STA executable: /home/nchiolino/OpenROAD-flow-scripts/tools/OpenROAD/src/sta/app/sta

-- Found re2: /opt/or-tools/lib/cmake/re2/re2Config.cmake (found version "9.0.0") 

-- Found Clp: /opt/or-tools/lib/cmake/Clp/ClpConfig.cmake (found version "1.17.7") 

-- Found Cbc: /opt/or-tools/lib/cmake/Cbc/CbcConfig.cmake (found version "2.10.7") 

-- Found SCIP: /opt/or-tools/lib/cmake/scip/scip-config.cmake (found version "8.0.1") 

-- Found OpenMP_CXX: -fopenmp (found version "4.5") 

-- Found OpenMP: TRUE (found version "4.5")  

-- GPU is not enabled

-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so

-- TCL header: /usr/include/tcl/tcl.h

-- Found Eigen3: /usr/local/share/eigen3/cmake/Eigen3Config.cmake (found version "3.4.1") 

-- GUI is enabled

-- Charts widget is not enabled

-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0") found components: serialization 

-- Could NOT find VTune (missing: VTune_LIBRARIES VTune_INCLUDE_DIRS) 

-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found suitable version "1.80.0", minimum required is "1.78")  

-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so

-- TCL header: /usr/include/tcl/tcl.h

-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0") found components: serialization system thread 

-- TCL readline enabled

-- Tcl Extended disabled

-- Python3 enabled

-- Configuring done

-- Generating done

-- Build files have been written to: /tmp/tmp.TKdR6bpmOW

To Reproduce

run make DESIGN_CONFIG=./designs/sky130hd/coyote_tc/config.mk

Relevant log output

No response

Screenshots

No response

Additional Context

I am simply looking for a working example of a complete flow which includes both macros and I/O cells that fully routes and generates GDS. I have no preference on technology.

@maliberty
Copy link
Member

Is this just a duplicate of #1082 ?

@nchiolino
Copy link
Author

I took a long look at that issue and seems to be an old issue that I was assuming was fixed. I cannot seem to understand what the exact issue is with #1082 . As mentioned above, the ODB files that are generated in the flow seem to indicate that the pads and the macros are placing. The issue I am seeing with with the PDN step. Am I incorrect in assuming that?

@maliberty
Copy link
Member

The pdn problems are related to the pads so it is much of the same.

@nchiolino
Copy link
Author

Ok, thank you for your quick response.

@vijayank88
Copy link
Contributor

I think I have made some progress on this by fixing PDN issue and got stuck at global routing stage.
Let me check my codebase and make PR for PDN fix.

@vijayank88
Copy link
Contributor

I ran ORFS with latest commit, pdn stage goes beyond where you've raised the issue @nchiolino

[WARNING PDN-0189] Supply pin DRN_HVC of instance u_vzz_20 is not connected to any net.
[WARNING PDN-0189] Supply pin SRC_BDY_HVC of instance u_vzz_20 is not connected to any net.
[WARNING PDN-0189] Supply pin DRN_HVC of instance u_v18_20 is not connected to any net.
[WARNING PDN-0189] Supply pin SRC_BDY_HVC of instance u_v18_20 is not connected to any net.
[INFO PDN-0001] Inserting grid: grid
[INFO PDN-0001] Inserting grid: CORE_macro_grid_1 - u_coyote/r2f/rocket/RocketTile/icache/icache/T198/mem/macro_mem/macro_mem
[INFO PDN-0001] Inserting grid: CORE_macro_grid_1 - u_coyote/r2f/rocket/RocketTile/icache/icache/T212/mem/macro_mem/macro_mem
[INFO PDN-0001] Inserting grid: CORE_macro_grid_1 - u_coyote/r2f/rocket/RocketTile/icache/icache/T226/mem/macro_mem/macro_mem

@nchiolino
Copy link
Author

@vijayank88 Thank you very much for continuing to dig into this! I don't see any changes to the pdn.tcl script in github. How should I proceed with your fix?
Thank you very much in advance.

@nchiolino
Copy link
Author

I don't know if this is a legitimate issue or not, I am just learning all of this to be honest, but I did notice that there are no power or ground pads listed in the gate level netlist (1_synth.v). I was able to find all of the GPIO pads and they seem to be connected properly but there are no power or ground pads in that netlist. Shouldn't the power and ground pads exist in that netlist as well? That could possibly be why PDN is failing, because it cannot make a connection that is not in the top level verilog. It seems as thought the pad.tcl file is placing the I/O cells in there proper locations but the router cannot connect or "find" the power and ground nets because, I think, the top level Verilog file does not include the connections. Does that sound correct?

@maliberty
Copy link
Member

The verilog doesn't need to have pg pins as we connect them up by name

@nchiolino
Copy link
Author

I am seeing that now actually. So the power and ground nets are handled by ios.v?

@maliberty
Copy link
Member

They are handled by

add_global_connection -net {VDD} -inst_pattern {.*} -pin_pattern {^VDD$} -power
add_global_connection -net {VDD} -inst_pattern {.*} -pin_pattern {^VDDPE$}
add_global_connection -net {VDD} -inst_pattern {.*} -pin_pattern {^VDDCE$}
add_global_connection -net {VDD} -inst_pattern {.*} -pin_pattern {VPWR}
add_global_connection -net {VDD} -inst_pattern {.*} -pin_pattern {VPB}
add_global_connection -net {VSS} -inst_pattern {.*} -pin_pattern {^VSS$} -ground
add_global_connection -net {VSS} -inst_pattern {.*} -pin_pattern {^VSSE$}
add_global_connection -net {VSS} -inst_pattern {.*} -pin_pattern {VGND}
add_global_connection -net {VSS} -inst_pattern {.*} -pin_pattern {VNB}

in flow/platforms/sky130hd/pdn.tcl

@vijayank88
Copy link
Contributor

@vijayank88 Thank you very much for continuing to dig into this! I don't see any changes to the pdn.tcl script in github. How should I proceed with your fix? Thank you very much in advance.

I am not made any changes in the coyote_tc setup. It is passing till CTS stage. Got stuck at global routing stage.
Maybe I'll raise new issue for routing stage.
What is system resource? like RAM,Swap Memory?

@nchiolino
Copy link
Author

@vijayank88 Thank you very much for your feedback. As it turns out, I was about 2GB shy from it passing through PDN and now I am getting the same failure that you are seeing. It seems to be getting stuck on global routing with too much congestion.
I will keep pushing on it but wanted to at least let you know that I am getting the same result.
Thank you

@vijayank88
Copy link
Contributor

@nchiolino
Routing congestion issue already raised here: #1630

@nchiolino
Copy link
Author

Excellent. I will keep an eye on it. I am also building my own smaller example to test some things out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants