Hi everyone! I'm trying to integrate a large analo...
# openroad
h
Hi everyone! I'm trying to integrate a large analog macro with gsg pads into the user_project_wrapper. However, when it tries placing the macro, it gives the error that the macro is taller than any row (the macro class used in lef file in this case is CORE, and it's dimensions are 140 um x 400 um). I've tried adding some obstruction layers using GRT_OBS but that doesn't seem to do anything, and I've also tried changing the macro's class from CORE to BLOCK but then it fails while generating the PDN. Does anybody know what variables I need to change to make it go through multiple rows, and prevent PDN and other routing generation steps inside the macro's area? Any help would be appreciated. Thanks!
m
user_proj_example
is generated as a hard macro. The LEF header is
Copy code
MACRO user_proj_example
  CLASS BLOCK ;
  FOREIGN user_proj_example ;
  ORIGIN 0.000 0.000 ;
  SIZE 2800.000 BY 1760.000 ;
h
Thank you for responding! When I try integrating user project example, that clears all the checks. So I figured I'll try setting up my macro in the same manner. However, when I use class BlOCK and try integrating my macro, It gives this error in the detailed routing stage. The error in runs/run/logs/routing/13-detailed.errors I see is: Error: droute.tcl, 40 vector: M range check __n (which is 4) >= this->size() (which is 0) I can't figure out what could be wrong here. Is it that my macro's size is too different? The first few lines of the lef are as follows: MACRO RO_basic CLASS BLOCK ; FOREIGN RO_basic ; ORIGIN 0.000 0.000 ; SIZE 140.000 BY 400.000 ; PIN VDD DIRECTION INOUT ; USE POWER ;
m
Sorry, no idea. Are you manually placing the macro?
h
no, I'm trying to place it through the flow.
m
I haven’t heard of people being able to place hard macros with the flow. It might be possible, but most designs use
Copy code
"MACRO_PLACEMENT_CFG": "dir::macro.cfg",
and set the location in
marcro.cfg
.
h
Yes, I am using that. Sorry for the confusion, I thought you meant if I was doing it in a GUI like magic/klayout. The placement that I'm trying to use is 700 700 N in the macro.cfg file.
m
Ok, this is just a guess, but maybe
Copy code
Error: droute.tcl, 40 vector::_M_range_check: __n (which is 4) >= this->size() (which is 0)
is referring to your routing/blocking layers. 4 is probably the top routing/blocking layer and I suspect that it’s trying to find that in the list of routing/blocking layers which is empty. I suppose it could happed if your
PDK
was set improperly. There should be a complete config file in
openlane/user_project_wrapper/runs/user_project_wrapper/config.tcl
. Can you share that?
h
I've attached it in this message. Hope it helps.
m
I don’t see any obvious problems. Can you share your current
RO_basic
file?
h
Sure. I'm sharing both lef and gds.
m
Probably won’t make a difference, but you might try deleting the n/pwell and via sections of the lef file. If there’s still an error could you share the full error message and not just the last line?
h
Should I delete them from within magic, and modify the gds as well, or do I just manually remove them from lef?
haziq@Haziq:~/GFMPW_2023/WEST-1$ make user_project_wrapper /bin/sh: 1: cd: can't cd to verilog/dv/cocotb /bin/sh: 1: cd: can't cd to verilog/dv/cocotb make -C openlane user_project_wrapper make[1]: Entering directory '/home/haziq/GFMPW_2023/WEST-1/openlane' # user_project_wrapper mkdir -p ./user_project_wrapper/runs/23_12_03_20_59 rm -rf ./user_project_wrapper/runs/user_project_wrapper ln -s $(realpath ./user_project_wrapper/runs/23_12_03_20_59) ./user_project_wrapper/runs/user_project_wrapper docker run -it -u $(id -u $USER):$(id -g $USER) -v $(realpath /home/haziq/GFMPW_2023/WEST-1/..):$(realpath /home/haziq/GFMPW_2023/WEST-1/..) -v /home/haziq/GFMPW_2023/WEST-1/dependencies/pdks:/home/haziq/GFMPW_2023/WEST-1/dependencies/pdks -v /home/haziq/GFMPW_2023/WEST-1/caravel:/home/haziq/GFMPW_2023/WEST-1/caravel -v /home/haziq/GFMPW_2023/WEST-1/dependencies/openlane_src:/openlane -v /home/haziq/GFMPW_2023/WEST-1/mgmt_core_wrapper:/home/haziq/GFMPW_2023/WEST-1/mgmt_core_wrapper -e PDK_ROOT=/home/haziq/GFMPW_2023/WEST-1/dependencies/pdks -e PDK=gf180mcuD -e MISMATCHES_OK=1 -e CARAVEL_ROOT=/home/haziq/GFMPW_2023/WEST-1/caravel -e OPENLANE_RUN_TAG=23_12_03_20_59 -e MCW_ROOT=/home/haziq/GFMPW_2023/WEST-1/mgmt_core_wrapper \ efabless/openlane:2023.10.16 sh -c "flow.tcl -design $(realpath ./user_project_wrapper) -save_path $(realpath ..) -save -tag 23_12_03_20_59 -overwrite -ignore_mismatches" OpenLane 7ea7a2aeef4bea5445d133c26ca2b3e9f0d0c78f All rights reserved. (c) 2020-2022 Efabless Corporation and contributors. Available under the Apache License, version 2.0. See the LICENSE file for more details. [WARNING]: OpenLane may not function properly: open_pdks e0f692f46654d6c7c99fc70a0c94a080dab53571 The version of open_pdks used in building the PDK does not match the version OpenLane was tested on (installed: e0f692f46654d6c7c99fc70a0c94a080dab53571, tested: dd7771c384ed36b91a25e9f8b314355fc26561be) This may introduce some issues. You may want to re-install the PDK by invoking
make pdk
. [INFO]: Using configuration in '../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/config.json'... [INFO]: PDK Root: /home/haziq/GFMPW_2023/WEST-1/dependencies/pdks [INFO]: Process Design Kit: gf180mcuD [INFO]: Standard Cell Library: gf180mcu_fd_sc_mcu7t5v0 [INFO]: Optimization Standard Cell Library: gf180mcu_fd_sc_mcu7t5v0 [WARNING]: DIODE_INSERTION_STRATEGY is now deprecated; use GRT_REPAIR_ANTENNAS, DIODE_ON_PORTS and RUN_HEURISTIC_DIODE_INSERTION instead. [INFO]: DIODE_INSERTION_STRATEGY set to 0. Setting GRT_REPAIR_ANTENNAS to 0 [INFO]: Run Directory: /home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59 [INFO]: Saving runtime environment... [INFO]: Preparing LEF files for the nom corner... [INFO]: Preparing LEF files for the min corner... [INFO]: Preparing LEF files for the max corner... [STEP 1] [INFO]: Running Synthesis (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/synthesis/1-synthesis.log)... [STEP 2] [INFO]: Running Single-Corner Static Timing Analysis (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/synthesis/2-sta.log)... [INFO]: Creating a netlist with power/ground pins. [STEP 3] [INFO]: Running Initial Floorplanning (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/floorplan/3-initial_fp.log)... [INFO]: Floorplanned with width 2955.68 and height 2951.76. [STEP 4] [INFO]: Running IO Placement (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/floorplan/4-place_io.log)... [INFO]: Applying DEF template... [STEP 5] [INFO]: Performing Manual Macro Placement (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/placement/5-macro_placement.log)... [INFO]: Power planning with power {vdd} and ground {vss}... [STEP 6] [INFO]: Generating PDN (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/floorplan/6-pdn.log)... [STEP 7] [INFO]: Performing Random Global Placement (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/placement/7-global.log)... [INFO]: Skipping Placement Resizer Design Optimizations. [STEP 8] [INFO]: Running Detailed Placement (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/placement/8-detailed.log)... [STEP 9] [INFO]: Running Single-Corner Static Timing Analysis (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/placement/9-dpl_sta.log)... [INFO]: Skipping Placement Resizer Timing Optimizations. [INFO]: Skipping Global Routing Resizer Design Optimizations. [INFO]: Skipping Global Routing Resizer Timing Optimizations. [STEP 10] [INFO]: Running Global Routing (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/routing/10-global.log)... [STEP 11] [INFO]: Writing Verilog (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/routing/10-global_write_netlist.log)... [STEP 12] [INFO]: Running Single-Corner Static Timing Analysis (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/routing/12-grt_sta.log)... [STEP 13] [INFO]: Running Detailed Routing (log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/routing/13-detailed.log)... [ERROR]: during executing openroad script /openlane/scripts/openroad/droute.tcl [ERROR]: Log: ../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/logs/routing/13-detailed.log [ERROR]: Last 10 lines: ---------- Metal5 ---------- numOverConGCell: 0, %OverConGCell: 0.00% [WARNING DRT-0203] dbGcellGrid already exists in db. Clearing existing dbGCellGrid. Number of guides: 0 [INFO DRT-0181] Start track assignment. Error: droute.tcl, 40 vector: M range check __n (which is 4) >= this->size() (which is 0) child process exited abnormally [ERROR]: Creating issue reproducible... [INFO]: Saving runtime environment... OpenLane TCL Issue Packager EFABLESS CORPORATION AND ALL AUTHORS OF THE OPENLANE PROJECT SHALL NOT BE HELD LIABLE FOR ANY LEAKS THAT MAY OCCUR TO ANY PROPRIETARY DATA AS A RESULT OF USING THIS SCRIPT. THIS SCRIPT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND. BY USING THIS SCRIPT, YOU ACKNOWLEDGE THAT YOU FULLY UNDERSTAND THIS DISCLAIMER AND ALL IT ENTAILS. Parsing config file(s)… Setting up /home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/issue_reproducible… Done. [INFO]: Reproducible packaged at '../home/haziq/GFMPW_2023/WEST-1/openlane/user_project_wrapper/runs/23_12_03_20_59/issue_reproducible'. cp: cannot stat './user_project_wrapper/runs/user_project_wrapper/reports/*.csv': No such file or directory make[1]: * [Makefile83 user_project_wrapper] Error 1 make[1]: Leaving directory '/home/haziq/GFMPW_2023/WEST-1/openlane' make: * [Makefile123 user_project_wrapper] Error 2
I tried removing those layers in lef, without changing gds. But it still fails.
m
Just changing the lef should be enough. I think it’s trying to place standard cells but standard cells have been disabled.
I think you had output buffering enabled, right? That might not work with
SYNTH_ELABORATE_ONLY
.
Sorry, but could you share your current
openlane/user_project_wrapper/config.json
file again?
h
could it be that my VDD and VSS pins are misplaced/off the PDN grid?
m
Can you share
verilog/rtl/user_project_wrapper.v
and
verilog/gl/RO_basic.v
?
h
m
Does verilog or yosys complain about the extra comma after
.VSS(vss),
in
user_project_wrapper.v
?
Copy code
RO_basic mprj(
    `ifdef USE_POWER_PINS
	.VDD(vdd),	// User area 1 1.8V power
	.VSS(vss),	// User area 1 digital ground
`endif


);
h
nope. The only warnings it gives are: 1. the different pdk version as compared to the one used to test openlane 2. the fact that diode insertion strategy is deprecated. 3. and then the routing error.
And I just removed that comma.
m
If there’s nothing helpful in
logs/routing/13-detailed.log
, you might try logging an issue on the openroad repo.