Source code for fabulous.fabric_generator.gds_generator.steps.add_buffer
"""FABulous GDS Generator - Add Buffers Step."""
from importlib import resources
from librelane.config.variable import Variable
from librelane.state.state import State
from librelane.steps.common_variables import (
grt_variables,
rsz_variables,
)
from librelane.steps.openroad import OpenROADStep
from librelane.steps.step import (
MetricsUpdate,
Step,
ViewsUpdate,
)
@Step.factory.register()
[docs]
class AddBuffers(OpenROADStep):
"""Adds buffers to a global-placed ODB file."""
id = "OpenROAD.AddBuffers"
name = "Add Buffers (Post-Global Placement)"
config_vars = (
OpenROADStep.config_vars
+ grt_variables
+ rsz_variables
+ [
Variable(
"DESIGN_REPAIR_BUFFER_INPUT_PORTS",
bool,
"Specifies whether or not to insert buffers on input ports when design "
"repairs are run.",
default=True,
deprecated_names=["PL_RESIZER_BUFFER_INPUT_PORTS"],
),
Variable(
"DESIGN_REPAIR_BUFFER_OUTPUT_PORTS",
bool,
"Specifies whether or not to insert buffers on input ports when design "
"repairs are run.",
default=True,
deprecated_names=["PL_RESIZER_BUFFER_OUTPUT_PORTS"],
),
Variable(
"DESIGN_REPAIR_REMOVE_BUFFERS",
bool,
"Invokes OpenROAD's remove_buffers command to remove buffers from "
"synthesis, which gives OpenROAD more flexibility when buffering nets.",
default=False,
),
]
)
[docs]
def run(
self,
state_in: State,
**kwargs: dict,
) -> tuple[ViewsUpdate, MetricsUpdate]:
"""Run the AddBuffers step."""
kwargs, env = self.extract_env(kwargs)
return super().run(
state_in,
corners=self.config["RSZ_CORNERS"] or self.config["STA_CORNERS"],
env=env,
**kwargs,
)
[docs]
def get_script_path(self) -> str:
"""Get the path to the add buffers script."""
return str(
resources.files("fabulous.fabric_generator.gds_generator.script")
/ "add_buffers.tcl"
)