diff --git a/dependency_support/com_google_skywater_pdk/com_google_skywater_pdk.bzl b/dependency_support/com_google_skywater_pdk/com_google_skywater_pdk.bzl index eef25424..067c0a9d 100644 --- a/dependency_support/com_google_skywater_pdk/com_google_skywater_pdk.bzl +++ b/dependency_support/com_google_skywater_pdk/com_google_skywater_pdk.bzl @@ -48,7 +48,7 @@ def com_google_skywater_pdk(): new_git_repository, name = workspace_name, commit = library["commit"], - remote = "https://foss-eda-tools.googlesource.com/skywater-pdk/libs/%s.git" % library_name, + remote = "https://github.com/google/skywater-pdk-libs-%s.git" % library_name, shallow_since = library["shallow_since"], build_file_content = _build_file(workspace_name, library_name), patches = library.get("patches", []), diff --git a/place_and_route/build_defs.bzl b/place_and_route/build_defs.bzl index 065437cb..6c4c83ae 100644 --- a/place_and_route/build_defs.bzl +++ b/place_and_route/build_defs.bzl @@ -93,6 +93,9 @@ place_and_route = rule( "core_padding_microns": attr.int( mandatory = True, ), + "corner_avoidance": attr.string( + doc = "The distance (in microns) from each corner within which pin placement should be avoided.", + ), "create_die_shot": attr.bool( default = False, doc = "Exports a die shot image of the design. This requires qt support.", @@ -111,7 +114,7 @@ place_and_route = rule( doc = "Whether to run detailed routing on a remote executor. If the detailed routing exceeds 15 minutes flip this setting.", ), "min_pin_distance": attr.string( - doc = "The minimum distance in microns between pins around the outside of the block.", + doc = "The minimum distance in microns, or tracks if `set_min_distance_in_tracks` is true, between pins around the outside of the block.", ), "pin_placement_script": attr.label( allow_single_file = [".tcl"], @@ -128,6 +131,10 @@ place_and_route = rule( "sdc": attr.label( allow_single_file = True, ), + "set_min_distance_in_tracks": attr.bool( + default = False, + doc = "Change the units of `min_pin_distance` in tracks instead of microns", + ), "sink_clustering_max_diameter": attr.int( doc = "Clock tree synthesis sink group desired diamater in microns", ), diff --git a/place_and_route/private/place_pins.bzl b/place_and_route/private/place_pins.bzl index 80940921..6cff56f5 100644 --- a/place_and_route/private/place_pins.bzl +++ b/place_and_route/private/place_pins.bzl @@ -50,10 +50,12 @@ def place_pins(ctx, open_road_info): open_road_commands = [ "source {}".format(ctx.file.pin_placement_script.path) if ctx.file.pin_placement_script else "", - "place_pins -hor_layers {hor_layers} -ver_layers {ver_layers} {min_pin_distance}".format( + "place_pins -hor_layers {hor_layers} -ver_layers {ver_layers} {min_pin_distance} {set_min_distance_in_tracks} {corner_avoidance}".format( hor_layers = open_road_configuration.pin_horizontal_metal_layer, ver_layers = open_road_configuration.pin_vertical_metal_layer, min_pin_distance = "-min_distance {}".format(ctx.attr.min_pin_distance) if ctx.attr.min_pin_distance else "", + set_min_distance_in_tracks = "-min_distance_in_tracks" if ctx.attr.set_min_distance_in_tracks else "", + corner_avoidance = "-corner_avoidance {}".format(ctx.attr.corner_avoidance) if ctx.attr.corner_avoidance else "", ), tapcell_command, ]