pub trait SimpleStdCellLegalizer<N: NetlistBase> {
// Required method
fn find_legal_positions_impl(
&self,
netlist: &N,
circuit: &N::CellId,
core_area: &SimplePolygon<SInt>,
cell_outlines: &HashMap<N::CellId, Rect<SInt>>,
global_positions: &HashMap<N::CellInstId, Point<SInt>>,
movable_instances: &HashSet<N::CellInstId>
) -> HashMap<N::CellInstId, SimpleTransform<SInt>>;
// Provided method
fn find_legal_positions(
&self,
netlist: &N,
circuit: &N::CellId,
core_area: &SimplePolygon<SInt>,
cell_outlines: &HashMap<N::CellId, Rect<SInt>>,
global_positions: &HashMap<N::CellInstId, Point<SInt>>,
movable_instances: &HashSet<N::CellInstId>
) -> HashMap<N::CellInstId, SimpleTransform<SInt>> { ... }
}Expand description
Trait for a legalizer that is able to put globally placed standard-cells into legal positions. A legal position must for instance be overlap free, snapped to a standard-cell row and rotated or flipped correctly such that the power rails and wells are properly oriented.
Required Methods§
sourcefn find_legal_positions_impl(
&self,
netlist: &N,
circuit: &N::CellId,
core_area: &SimplePolygon<SInt>,
cell_outlines: &HashMap<N::CellId, Rect<SInt>>,
global_positions: &HashMap<N::CellInstId, Point<SInt>>,
movable_instances: &HashSet<N::CellInstId>
) -> HashMap<N::CellInstId, SimpleTransform<SInt>>
fn find_legal_positions_impl( &self, netlist: &N, circuit: &N::CellId, core_area: &SimplePolygon<SInt>, cell_outlines: &HashMap<N::CellId, Rect<SInt>>, global_positions: &HashMap<N::CellInstId, Point<SInt>>, movable_instances: &HashSet<N::CellInstId> ) -> HashMap<N::CellInstId, SimpleTransform<SInt>>
Find legal positions and rotations for the cells based on a global placement.
Parameters
netlist: The netlist containing the circuit to be placed.circuit: The circuit netlist which is being placed.core_area: The region which shall be used for the placement.cell_outlines: Outlines (abutment boxes) of the standard cells.global_positions: Result of the global placement: a location for each circuit instance.movable_instances: Circuit instances that can be moved.
Provided Methods§
sourcefn find_legal_positions(
&self,
netlist: &N,
circuit: &N::CellId,
core_area: &SimplePolygon<SInt>,
cell_outlines: &HashMap<N::CellId, Rect<SInt>>,
global_positions: &HashMap<N::CellInstId, Point<SInt>>,
movable_instances: &HashSet<N::CellInstId>
) -> HashMap<N::CellInstId, SimpleTransform<SInt>>
fn find_legal_positions( &self, netlist: &N, circuit: &N::CellId, core_area: &SimplePolygon<SInt>, cell_outlines: &HashMap<N::CellId, Rect<SInt>>, global_positions: &HashMap<N::CellInstId, Point<SInt>>, movable_instances: &HashSet<N::CellInstId> ) -> HashMap<N::CellInstId, SimpleTransform<SInt>>
Wrapper around `legalize_impl(). Does additional logging and sanity checks.
Parameters
netlist: The netlist containing the circuit to be placed.circuit: The circuit netlist which is being placed.core_area: The region which shall be used for the placement.cell_outlines: Outlines (abutment boxes) of the standard cells.global_positions: Result of the global placement: a location for each circuit instance.movable_instances: Circuit instances that can be moved.