====== Overlay Cell in Redhawk ======
Step to add overlay cell in RedHawk:
- ICC: dump overlay power mesh
- ICC: add overlay power mesh to top
- ICC: add PG via between top and overlay cell
- ICC: stream out overlay cell as GDSII
- gds2def: convert overlay GDSII to DEF
- RedHawk: use RDL_CELL in RedHawk to include overlay GDSII
===== Dump overlay power mesh =====
set via_8_vdd [ get_vias -filter "via_layer==VIA8 && net_type==Power && owner_net==VDD" ]
set via_8_vss [ get_vias -filter "via_layer==VIA8 && net_type==Ground && owner_net==VSS" ]
set via_rv_vdd [ get_vias -filter "via_layer==RV && net_type==Power && owner_net==VDD" ]
set via_rv_vss [ get_vias -filter "via_layer==RV && net_type==Ground && owner_net==VSS" ]
set strap_m8_vdd [ get_net_shapes -filter "layer==M8 && net_type==Power && owner_net==VDD" ]
set strap_m8_vss [ get_net_shapes -filter "layer==M8 && net_type==Ground && owner_net==VSS" ]
set strap_m9_vdd [ get_net_shapes -filter "layer==M9 && net_type==Power && owner_net==VDD" ]
set strap_m9_vss [ get_net_shapes -filter "layer==M9 && net_type==Ground && owner_net==VSS" ]
set strap_ap_vdd [ get_net_shapes -filter "layer==AP && net_type==Power && owner_net==VDD" ]
set strap_ap_vss [ get_net_shapes -filter "layer==AP && net_type==Ground && owner_net==VSS" ]
set all_pg_mesh [ add_to_collection $via_8_vss $via_8_vdd ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $via_rv_vss ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $via_rv_vdd ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $strap_m8_vdd ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $strap_m8_vss ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $strap_m9_vss ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $strap_m9_vdd ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $strap_ap_vdd ]
set all_pg_mesh [ add_to_collection $all_pg_mesh $strap_ap_vss ]
write_route -objects $all_pg_mesh -output overlay_pg_mesh.tcl
===== Add PG via =====
If DCAP cells are added, this stage will take a long time.
In my design, it cost about 5 hours. So don't kill it.
create_preroute_vias -from_object_strap -to_object_strap -from_layer M7 -to_layer M8
create_preroute_vias -from_object_macro_io_pin -to_object_strap -from_layer M7 -to_layer M8
===== Stream Out Overlay GDSII =====
set_write_stream_options \
-map_layer $streamout_mw_file \
-child_depth 10000 \
-keep_data_type \
-output_filling {fill} \
-output_pin {geometry text} \
-output_net [list text plex] \
-output_geometry_property \
-output_polygon_pin \
-compressed \
-max_name_length 100
write_stream -lib_name $mw_design_lib -format gds -cells overlay_t overlay_t.gds.gz
===== Conver GDSII to DEF =====
gds2def Configure file:
TOP_CELL overlay_11172011
GDS_MAP_FILE /tools/fip40.3/lsi40nm_3.0/tsmc_cln40g/shared/apache/gds2def/lsi40_7+2.layermap
GDS_FILE overlay_20111123.gds.gz
#LEF_FILE zx211100_overlay_11172011.lef
VDD_NETS {
VDD {
VDD
}
}
GND_NETS {
VSS {
VSS
}
}
# CORE_EXTRACTION_STARTING_LAYER M2
# EXTRACTION_STARTING_LAYER M3
MEMORY_CELL auto_detect
CHECK_TRACING 1
gds2def run command:
#! /bin/csh -f
icsub -J gds2def -qa -Ip -q priority -R "rusage[mem=20000]" -do " gds2def overlay_gds2def.cfg "
===== RDL_CELL =====
Use RDL_CELL keyword in redhawk GSR file:
RDL_CELL {
lsifcr overlay_11172011 overlay_gds2def/zx211100_overlay_11172011.def
#LOCATION -27 -27
LOCATION 0 0
NET VDD VDD
NET VSS VSS
}