Kristaps Jurkans
12/06/2023, 10:07 PM[ERROR PSM-0042] Unable to connect macro/pad Instance manchester_baby to the power grid.
error, which i'm struggling to solve
i have "SYNTH_USE_PG_PINS_DEFINES": "USE_POWER_PINS"
in my manchester-baby/config.json
and in lincoln_gfmpw/config.json
(which is basically my version of the user_proj_example)
both of the .v source files for those modules are using the ``ifdef USE_POWER_PINS` header, and i can see that they are present in the gate-level versions of the verilog source, but for some reason it just isn't connecting it. interestingly you can see a gap in the openroad gui where it didn't bother.
i've attached my issue_reproducible if anyone is able to help, thank you :)Mitch Bailey
12/06/2023, 10:17 PM"FP_PDN_MACRO_HOOKS": [ "instance1 vccd1 vssd1 vccd1 vssd1,",
"instance2 vccd1 vssd1 vccd1 vssd1" ]
This connects the parent power nets to the macro power ports.
Be warned that the pdn router connects the top level metal to one level lower in the macro.
If the macro has top level vertical metal4 power rails, the parent metal5 horizontal rails will connect.
As in your diagram, I don’t think vertical metal4 will connect to parent vertical metal4.
Be aware that using nested macros means that the routing layers will be limited.
Top: routes with metal5
• Child macro: top routing layer metal4
◦ Grandchild macro: top routing layer metal3Kristaps Jurkans
12/06/2023, 10:22 PMmanchester_baby
that is instantiated within lincoln_gfmpw
would need the "RT_MAX_LAYER": "Metal3"
set in manchester-baby/config.json
when hardening it?
as for your FP_PDN_MACRO_HOOKS
example, i'm assuming this would go inside lincoln_gfmpw/config.json
?Mitch Bailey
12/06/2023, 10:32 PMas for yourcorrect.example, i’m assuming this would go insideFP_PDN_MACRO_HOOKS
?lincoln_gfmpw/config.json
Kristaps Jurkans
12/06/2023, 10:38 PM"RT_MAX_LAYER": "Metal3"
and it still fails on the PSM-0042 error
if i add in
"FP_PDN_MACRO_HOOKS": "manchester_baby vdd vss vdd vss,"
it fails with the following:
[INFO PDN-0001] Inserting grid: stdcell_grid
[INFO PDN-0001] Inserting grid: macro - manchester_baby
[WARNING PDN-0232] macro - manchester_baby does not contain any shapes or vias.
[ERROR PDN-0233] Failed to generate full power grid.
Mitch Bailey
12/06/2023, 10:46 PMmanchester_baby
that has the shapes defined and that’s referenced in your config file, right?Kristaps Jurkans
12/06/2023, 10:54 PMmanchester_baby.lef
defined in EXTRA_LEFS
in lincoln_gfmpw/config.json
, and it is present in the lef/
folder
the project is available here: https://github.com/diy-ic/lincoln-gfmpw/tree/dev (dev branch)
also thank you for helping, i appreciate itMitch Bailey
12/06/2023, 10:55 PMKristaps Jurkans
12/06/2023, 10:56 PMMitch Bailey
12/06/2023, 11:06 PM,
after the .vss(vss)
(x2) in verilog/rtl/lincoln_gfmpw.v
`ifdef USER_POWER_PINS
.vdd(vdd), .vss(vss)
`endif
Could that be causing problems?Kristaps Jurkans
12/06/2023, 11:08 PMmake lincoln_gfmpw
i shall fix that and see if it is happyKristaps Jurkans
12/06/2023, 11:13 PMWARNING PDN-0232] macro - manchester_baby does not contain any shapes or vias.
Mitch Bailey
12/06/2023, 11:26 PMlincoln_gfmpw
corresponds to user_proj_example
and you’re going to have one more hierarchy above that, correct?
If so that means that the top routing layer in lincoln_gfmpw
will be metal4 and the max metal layer you should use in manchester
and ram
would be metal3. Currently, the lef has metal4 for manchester
and ram
power.
However, I don’t think that would give the missing shapes or vias
message.
Can you share you full log?Kristaps Jurkans
12/06/2023, 11:31 PMuser_project_wrapper -> lincoln_gfmpw -> manchester_baby (+ other designs)
i had set "RT_MAX_LAYER": "Metal3"
in manchester-baby/config.json
and ran make manchester-baby
, so i would've thought that would update the lef file... Mitch Bailey
12/06/2023, 11:49 PMmanchester-baby
to update the lef file.
Can you check the lef files to ensure that they have no metal4 references?
The manchester-baby
macro looks to be relatively small. Can you check that it will intersect with the power rails at the current position?Kristaps Jurkans
12/06/2023, 11:58 PM"DIE_AREA": "0 0 210 210"
in the config.json too, since i saw some warnings about the PDN being resized, so i think it should intersect with the rails on lincoln_gfmpw
Kristaps Jurkans
12/07/2023, 12:01 AMPIN vdd
DIRECTION INOUT ;
USE POWER ;
PORT
LAYER Metal4 ;
RECT 22.240 15.380 23.840 192.380 ;
END
PORT
LAYER Metal4 ;
RECT 175.840 15.380 177.440 192.380 ;
END
END vdd
PIN vss
DIRECTION INOUT ;
USE GROUND ;
PORT
LAYER Metal4 ;
RECT 99.040 15.380 100.640 192.380 ;
END
END vss
this is the current manchester-baby/config.json
:
{
"PDK": "gf180mcuD",
"STD_CELL_LIBRARY": "gf180mcu_fd_sc_mcu7t5v0",
"DESIGN_NAME": "manchester_baby",
"VERILOG_FILES": [list of files],
"CLOCK_PORT": "clock",
"CLOCK_PERIOD": "24.0",
"SYNTH_USE_PG_PINS_DEFINES": "USE_POWER_PINS",
"DESIGN_IS_CORE": 0,
"FP_SIZING": "absolute",
"DIE_AREA": "0 0 210 210",
"RT_MAX_LAYER": "Metal3",
"VDD_NETS": [
"vdd"
],
"GND_NETS": [
"vss"
]
}
could the VDD/GND_NETS
be causing this?Mitch Bailey
12/07/2023, 12:01 AMruns/<tag>/config.tcl
. Maybe there’s a power routing layer that default that needs to be overridden.Kristaps Jurkans
12/07/2023, 12:04 AMmanchester-baby/runs/<tag>/config.tcl
, i've attached itKristaps Jurkans
12/07/2023, 12:06 AMset ::env(CLOCK_WIRE_RC_LAYER) "Metal4"
and set ::env(FP_PDN_VERTICAL_LAYER) "Metal4"
which seem weird, especially with "RT_MAX_LAYER": "Metal3"
setMitch Bailey
12/07/2023, 12:44 AM"FP_PDN_HORIZONTAL_LAYER": "Metal3",
to your config.json
file for manchester_baby
?
The ram implementation maybe troublesome, though. Are you generating your own ram or using a macro?Kristaps Jurkans
12/07/2023, 12:53 AM"FP_PDN_HORIZONTAL_LAYER": "Metal3",
, ran make lincoln_gfmpw
, but still failing on PDN-0232
i realise the ram implementation is a slight gamble, i saw that openRAM doesn't support gf180 yet and the provided macros are only 8-bits wide, but i need 32-bits since that's how the manchester baby was historically made. the implementation is in openlane/ram_5x32
and it seems to harden just fine so farMitch Bailey
12/07/2023, 1:05 AMmanchester_baby
lef file have any metal4?Kristaps Jurkans
12/07/2023, 1:09 AMMitch Bailey
12/07/2023, 1:16 AMruns/<tag>/config.tcl
the same for manchester_baby
? Maybe set the FP_PDN_VERTICAL_LAYER
to metal2.
There is another possible (maybe better) solution and that is to flatten lincoln_gfmpw
in user_project_wrapper
instead of creating it as a hard macro. There was a webinar the other day about the advantages and disadvantages of each approach.Mitch Bailey
12/07/2023, 1:21 AMKristaps Jurkans
12/07/2023, 1:25 AMset ::env(FP_PDN_VERTICAL_LAYER) "Metal4"
and set ::env(CLOCK_WIRE_RC_LAYER) "Metal4"
on the most recent run
going to comment out the "FP_PDN_HORIZONTAL_LAYER": "Metal3",
and add in "FP_PDN_VERTICAL_LAYER": "Metal2",
seems like it would probably be easier to flatten it/instanciate it in lincoln_gfmpw, may have to try that tomorrow
any idea how much space would those srams take up? i've got 2 other designs that i need to squeeze on thereMitch Bailey
12/07/2023, 1:28 AMgf180mcu_fd_ip_sram__sram128x8m8wm1.lef:MACRO gf180mcu_fd_ip_sram__sram128x8m8wm1
gf180mcu_fd_ip_sram__sram128x8m8wm1.lef: SIZE 431.86 BY 268.88 ;
gf180mcu_fd_ip_sram__sram256x8m8wm1.lef:MACRO gf180mcu_fd_ip_sram__sram256x8m8wm1
gf180mcu_fd_ip_sram__sram256x8m8wm1.lef: SIZE 431.86 BY 340.88 ;
gf180mcu_fd_ip_sram__sram512x8m8wm1.lef:MACRO gf180mcu_fd_ip_sram__sram512x8m8wm1
gf180mcu_fd_ip_sram__sram512x8m8wm1.lef: SIZE 431.86 BY 484.88 ;
gf180mcu_fd_ip_sram__sram64x8m8wm1.lef:MACRO gf180mcu_fd_ip_sram__sram64x8m8wm1
gf180mcu_fd_ip_sram__sram64x8m8wm1.lef: SIZE 431.86 BY 232.88 ;
Mitch Bailey
12/07/2023, 1:32 AMmanchester
, but rather flattening lincoln
. The problem with using hard macros in user_project_wrapper
is that there is no buffering on the signals to fix timing problems. You need to be aware of the timing requirements for the macros. It’s discussed a little more in the webinar.Kristaps Jurkans
12/07/2023, 1:34 AMKristaps Jurkans
12/07/2023, 1:37 AM"FP_PDN_VERTICAL_LAYER": "Metal3",
then it fails with:
[ERROR]: Last 10 lines:
[INFO]: Setting input delay to: 4.800000000000001
[INFO]: Setting load to: 0.07291
[INFO]: Setting clock uncertainty to: 0.25
[INFO]: Setting clock transition to: 0.15
[INFO]: Setting timing derate to: 5.0 %
[INFO PDN-0001] Inserting grid: stdcell_grid
[WARNING PDN-0178] Remaining channel (6.7200, 15.3800) - (203.2800, 192.3800) on Metal1 for nets: vdd, vss
[ERROR PDN-0179] Unable to repair all channels.
PDN-0179
maybe its time to call it for today :(Mitch Bailey
12/07/2023, 1:39 AMlincoln
from the VERILOG_BLACK_BOX
list and change most of the other config parameters to match user_proj_example
(enable standard cells, etc).Mitch Bailey
12/07/2023, 1:40 AMKristaps Jurkans
12/07/2023, 1:43 AMKristaps Jurkans
12/07/2023, 9:34 PMLinen is a search-engine friendly community platform. We offer integrations with existing Slack/Discord communities and make those conversations Google-searchable.
Powered by