Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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