def asap7_innovus_settings(ht: HammerTool) -> bool: assert isinstance(ht, HammerPlaceAndRouteTool), "Innovus settings only for par" assert isinstance(ht, CadenceTool), "Innovus is Cadence" """Settings that may need to be reapplied at every tool invocation Note that the particular routing layer settings here will persist in Innovus; this hook only serves as an example of what commands may need to persist.""" ht.append(''' set_db route_design_bottom_routing_layer 2 set_db route_design_top_routing_layer 7 ''') return True
def scale_final_gds(ht: HammerTool) -> bool: assert isinstance( ht, HammerPlaceAndRouteTool), "scale_final_gds can only run on par" assert isinstance(ht, TCLTool), "scale_final_gds can only run on TCL tools" """ Scale the final GDS by a factor of 4 scale_gds_script writes the actual Python script to execute from the Tcl interpreter """ ht.append(''' # Write script out to a temporary file and execute it set fp [open "{script_file}" "w"] puts -nonewline $fp "{script_text}" close $fp # Innovus <19.1 appends some bad LD_LIBRARY_PATHS, so remove them before executing python set env(LD_LIBRARY_PATH) [join [lsearch -not -all -inline [split $env(LD_LIBRARY_PATH) ":"] "*INNOVUS*"] ":"] python3 {script_file} '''.format(script_text=ht.technology.scale_gds_script(ht.output_gds_filename), script_file=os.path.join(ht.run_dir, "gds_scale.py"))) return True
def asap7_update_floorplan(ht: HammerTool) -> bool: assert isinstance( ht, HammerPlaceAndRouteTool), "asap7_update_floorplan can only run on par" assert isinstance( ht, TCLTool), "asap7_update_floorplan can only run on TCL tools" """ This is needed to move the core up by 1 site and re-do wiring tracks. This resolves many DRCs and removes the need for the user to do it in placement constraints. """ ht.append(''' # Need to delete and recreate tracks based on tech LEF add_tracks -honor_pitch # Create place blockage on bottom row, fixes wiring issue + power vias for LVS set core_lly [get_db current_design .core_bbox.ll.y] set botrow [get_db rows -if {.rect.ll.y == $core_lly}] create_place_blockage -area [get_db $botrow .rect] -name ROW1_BLOCK # Prevent extending M1 pins in cells set_db route_design_with_via_in_pin true ''') return True