diff --git a/pdk/open_road_configuration.bzl b/pdk/open_road_configuration.bzl index af2b32a8..e422c2b1 100644 --- a/pdk/open_road_configuration.bzl +++ b/pdk/open_road_configuration.bzl @@ -24,6 +24,8 @@ OpenRoadPdkInfo = provider( "density_fill_config": "optional path to file with metal fill configuration", "detailed_routing_configuration": "optional detailed routing configuration", "do_not_use_cell_list": "Do not use cells in timing repair. This supports wild card * cell names", + "enable_balance_row_usage": "Enable/Disable balance row usage pass.", + "enable_improve_placement": "Enable/Disable improve_placement pass.", "endcap_cell": "The endcap cell to use in place and route", "fill_cells": "Metal fill cells", "global_placement_cell_pad": "Global placement cell padding to aide in routing", @@ -86,6 +88,8 @@ def _open_road_pdk_configuration_impl(ctx): detailed_routing_configuration = ctx.attr.detailed_routing_configuration, density_fill_config = ctx.attr.density_fill_config, klayout_tech_file = ctx.attr.klayout_tech_file, + enable_improve_placement = ctx.attr.enable_improve_placement, + enable_balance_row_usage = ctx.attr.enable_balance_row_usage, ), ] @@ -117,6 +121,14 @@ open_road_pdk_configuration = rule( mandatory = True, doc = "This value can be an empty list if all cells should be used in P&R", ), + "enable_balance_row_usage": attr.bool( + default = False, + doc = "Enable/Disable balance row usage pass.", + ), + "enable_improve_placement": attr.bool( + default = True, + doc = "Enable/Disable improve_placement pass.", + ), "endcap_cell": attr.string( ), "fill_cells": attr.string_list( diff --git a/place_and_route/private/resize.bzl b/place_and_route/private/resize.bzl index 200f394e..7395c856 100644 --- a/place_and_route/private/resize.bzl +++ b/place_and_route/private/resize.bzl @@ -14,7 +14,9 @@ """Resize openROAD commands""" +load("//pdk:open_road_configuration.bzl", "get_open_road_configuration") load("//place_and_route:open_road.bzl", "OpenRoadInfo", "merge_open_road_info", "openroad_command", "placement_padding_commands") +load("//synthesis:defs.bzl", "SynthesisInfo") def resize(ctx, open_road_info): """Performs resizing operation of the standard cells. @@ -28,12 +30,14 @@ def resize(ctx, open_road_info): """ placement_padding_struct = placement_padding_commands(ctx) + open_road_configuration = get_open_road_configuration(ctx.attr.synthesized_rtl[SynthesisInfo]) inputs = placement_padding_struct.inputs open_road_commands = placement_padding_struct.commands + [ + "balance_row_usage" if open_road_configuration.enable_balance_row_usage else "", "detailed_placement", - "improve_placement" if ctx.attr.enable_improve_placement else "", + "improve_placement" if ctx.attr.enable_improve_placement and open_road_configuration.enable_improve_placement else "", "optimize_mirroring", "check_placement -verbose", "report_checks -path_delay min_max -format full_clock_expanded -fields {input_pin slew capacitance} -digits 3",