Tobias Strauch
09/04/2022, 5:33 PMMitch Bailey
09/05/2022, 1:43 AMTobias Strauch
09/05/2022, 11:41 AMMitch Bailey
09/05/2022, 1:41 PMset ::env(FP_PDN_MACRO_HOOKS) "\
cai vccd1 vssd1 vccd1 vssd1,
sram1 vccd1 vssd1 vccd1 vssd1,
etc."
I think the order is parent-vcc parent-vss macro-vcc macro-vss.
Separate each macro line with a comma.Tobias Strauch
09/06/2022, 1:58 PMMitch Bailey
09/06/2022, 2:45 PMTobias Strauch
09/06/2022, 3:10 PMMitch Bailey
09/06/2022, 4:15 PMuser_proj_example/config.tcl
to connect power to the macros.
set ::env(FP_PDN_MACRO_HOOKS) "\
cai vccd1 vssd1 vccd1 vssd1, \
cubev_dhi vccd1 vssd1 vccd1 vssd1, \
cubev_dli vccd1 vssd1 vccd1 vssd1, \
cubev_phi vccd1 vssd1 vccd1 vssd1, \
cubev_pli vccd1 vssd1 vccd1 vssd1, \
cubev_reg_0 vccd1 vssd1 vccd1 vssd1, \
cubev_reg_1 vccd1 vssd1 vccd1 vssd1, \
cubev_reg_2 vccd1 vssd1 vccd1 vssd1, \
cubev_reg_3 vccd1 vssd1 vccd1 vssd1, \
cubev_reg_4 vccd1 vssd1 vccd1 vssd1, \
cubev_reg_5 vccd1 vssd1 vccd1 vssd1, \
cubev_rf1i vccd1 vssd1 vccd1 vssd1, \
cubev_rf2i vccd1 vssd1 vccd1 vssd1, \
cubev_cai vccd1 vssd1 vccd1 vssd1"
Tobias Strauch
09/06/2022, 4:54 PMTobias Strauch
09/06/2022, 6:58 PMMitch Bailey
09/06/2022, 10:28 PMopenlane/user_proj_example/config.tcl
# SPDX-FileCopyrightText: 2020 Efabless Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# <http://www.apache.org/licenses/LICENSE-2.0>
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# SPDX-License-Identifier: Apache-2.0
set ::env(PDK) $::env(PDK)
set ::env(STD_CELL_LIBRARY) "sky130_fd_sc_hd"
set script_dir [file dirname [file normalize [info script]]]
set ::env(DESIGN_NAME) user_proj_example
set ::env(VERILOG_FILES) "\
$::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
$script_dir/../../verilog/rtl/user_proj_example.v \
$script_dir/../../verilog/rtl/cubev_rv32imc_p3.v \
$script_dir/../../verilog/rtl/gpio.v \
$script_dir/../../verilog/rtl/minisoc.v\
$script_dir/../../verilog/rtl/clock_gen_empty.v"
# $script_dir/../../verilog/rtl/ca.v \
set ::env(DESIGN_IS_CORE) 0
set ::env(CELL_PAD) 2
set ::env(CLOCK_PORT) "io_in\[32\]"
set ::env(CLOCK_NET) "clk_root"
set ::env(CLOCK_PERIOD) "50"
set ::env(RESET_PORT) "wb_rst_i"
set ::env(RESET_NET) "\i_cg.resetn"
set ::env(FP_SIZING) absolute
#set ::env(DIE_AREA) "0 0 2600 2550"
set ::env(DIE_AREA) "0 0 2600 3100"
set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg
## Internal Macros
### Macro Placement
set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro.cfg
### Black-box verilog and views
set ::env(VERILOG_FILES_BLACKBOX) "\
$script_dir/../../verilog/rtl/cawb.v\
$script_dir/../../verilog/rtl/mem/sky130_sram_1kbyte_1rw1r_32x256_8.v"
# $script_dir/../../verilog/rtl/minisoc.v\
set ::env(EXTRA_LEFS) "\
$script_dir/../../lef/cawb.lef \
$script_dir/../../lef/sky130_sram_1kbyte_1rw1r_32x256_8.lef"
# $script_dir/../../lef/minisoc.lef \
set ::env(EXTRA_GDS_FILES) "\
$script_dir/../../gds/cawb.gds \
$script_dir/../../gds/sky130_sram_1kbyte_1rw1r_32x256_8.gds"
# $script_dir/../../gds/minisoc.gds \
set ::env(PL_BASIC_PLACEMENT) 0
set ::env(PL_TARGET_DENSITY) 0.18
# Maximum layer used for routing is metal 4.
# This is because this macro will be inserted in a top level (user_project_wrapper)
# where the PDN is planned on metal 5. So, to avoid having shorts between routes
# in this macro and the top level metal 5 stripes, we have to restrict routes to metal4.
#
set ::env(RT_MAX_LAYER) {met4}
# You can draw more power domains if you need to
set ::env(VDD_NETS) [list {vccd1}]
set ::env(GND_NETS) [list {vssd1}]
set ::env(DIODE_INSERTION_STRATEGY) 4
# If you're going to use multiple power domains, then disable cvc run.
set ::env(RUN_CVC) 1
Tobias Strauch
09/07/2022, 5:23 AMTobias Strauch
09/08/2022, 6:18 PMTobias Strauch
09/11/2022, 4:49 PMMitch Bailey
09/11/2022, 5:26 PMFP_PDN_MACRO_HOOKS
that I suggested was a template the actual pin / power names need to match your actual data.
For example, from your verilog/gl
cawb cai (.VGND(vssd1),
.VPWR(vccd1),
it looks like the cawb
pins are VGND
and VPWR
not vccd1
and vssd1
like what you've defined here
set ::env(FP_PDN_MACRO_HOOKS) "\
cai vccd1 vssd1 vccd1 vssd1, \
From openlane/configuration/README.md
FP_PDN_MACRO_HOOKS
Specifies explicit power connections of internal macros to the top level power grid. Comma separated list of macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names: <instance_name> <vdd_net> <gnd_net> <vdd_pin> <gnd_pin>
Is there something in your run logs about not being able to find power pins?
Maybe grep Power planning the following nets
and look around there.Tobias Strauch
09/21/2022, 1:09 PM