Leo Moser
11/23/2022, 6:36 PMTim Edwards
11/23/2022, 6:56 PM-------------------------------------------|-------------------------------------------
wfg_top (1) |wfg_top (1)
merge_memory (1) |merge_memory (1)
wb_mux (1) |wb_mux (1)
sky130_sram_2kbyte_1rw1r_32x512_8 (2) |sky130_sram_2kbyte_1rw1r_32x512_8 (2)
wb_memory (1) |wb_memory (1)
Number of devices: 6 |Number of devices: 6
Number of nets: 655 **Mismatch** |Number of nets: 657 **Mismatch**
---------------------------------------------------------------------------------------
NET mismatches: Class fragments follow (with fanout counts):
Circuit 1: user_project_wrapper |Circuit 2: user_project_wrapper
---------------------------------------------------------------------------------------
Net: vssa2 |Net: vccd1
wfg_top/vccd1 = 1 | wfg_top/vccd1 = 1
wb_mux/vccd1 = 1 |
|
Net: vdda1 |Net: dummy_648
merge_memory/vccd1 = 1 | merge_memory/proxyvccd1 = 1
wb_memory/vccd1 = 1 |
|
(no matching net) |Net: dummy_650
| wb_mux/proxyvccd1 = 1
|
(no matching net) |Net: dummy_656
| wb_memory/proxyvccd1 = 1
---------------------------------------------------------------------------------------
The output above indicates that the 2nd netlist does not have power supply pins for wb_mux
, wb_memory
, or merge_memory
(although it does, for wfg_top
). The "proxy" prefix means that netgen didn't find the pin in the pin list and so inserted one as a placeholder.
I note that the files in verilog/gl/
have power pins specified, so I can only assume that the netlists in the signoff directory that are indicated in the log files as the netlists that are being read into netgen for the LVS do not have power pins (?).Leo Moser
11/23/2022, 8:11 PMTim Edwards
11/23/2022, 10:07 PMMitch Bailey
11/23/2022, 11:53 PMFP_PDN_CHECK_NODES
?
./configuration/README.md:| `FP_PDN_CHECK_NODES` | Enables checking for unconnected nodes in the power grid. 0=Disable 1=Enable. <br> (Default: `1`) |
Currently, openlane/user_project_wrapper/config.json
has
{
"DESIGN_NAME": "user_project_wrapper",
...
"FP_PDN_CHECK_NODES": 0,
Looking at verilog/gl/user_project_wrapper.v
you can see that only wfg_top
has power connections. Your user_project_wrapper.v
also has a tie cell
sky130_fd_sc_hd__conb_1 TIE_ONE_one_ (.VGND(vssd1),
.VNB(vssd1),
.VPB(vccd1),
.VPWR(vccd1),
.HI(one_));
However, I don’t think that you’re doing standard cell placement at the top level, so this may cause a problem.
It looks like you’re trying to eliminate the user_proj_example
level. I’ve seen problems when tying top level macro pins to power or ground, because the tie cells can’t be placed.
This is just a guess, but maybe check the config.json
conversion. There should be a config.tcl
file under the runs
directory for user_project_wrapper
. See if the FP_PDN_MACRO_HOOKS
are as expected.Leo Moser
11/26/2022, 7:58 AMset ::env(FP_PDN_MACRO_HOOKS) "\
wfg_top_inst vccd1 vssd1 vccd1 vssd1, \
merge_memory_inst vccd1 vssd1 vccd1 vssd1, \
wb_mux_inst vccd1 vssd1 vccd1 vssd1, \
wb_memory_inst vccd1 vssd1 vccd1 vssd1, \
sky130_sram_2kbyte_1rw1r_32x512_8_inst0 vccd1 vssd1 vccd1 vssd1, \
sky130_sram_2kbyte_1rw1r_32x512_8_inst1 vccd1 vssd1 vccd1 vssd1"
Now that OpenLane is moving to json configurations, I tried setting FP_PDN_MACRO_HOOKS in a similar way, which was wrong.
The correct way is to also use a comma at the end of the string:
"FP_PDN_MACRO_HOOKS": [
"wfg_top_inst vccd1 vssd1 vccd1 vssd1,",
"merge_memory_inst vccd1 vssd1 vccd1 vssd1,",
"wb_mux_inst vccd1 vssd1 vccd1 vssd1,",
"wb_memory_inst vccd1 vssd1 vccd1 vssd1,",
"sky130_sram_2kbyte_1rw1r_32x512_8_inst0 vccd1 vssd1 vccd1 vssd1,",
"sky130_sram_2kbyte_1rw1r_32x512_8_inst1 vccd1 vssd1 vccd1 vssd1"
],
This looks a bit strange. I will open an issue to ask if this is intentional.
The local precheck is now passing. Thanks again!