pub struct PlacementProblemOverlay<'a, C: L2NBase> {
pub placement_problem: &'a dyn PlacementProblem<C>,
pub initial_positions: HashMap<C::CellInstId, SimpleTransform<C::Coord>>,
pub placement_status: HashMap<C::CellInstId, PlacementStatus>,
pub net_weights: HashMap<C::NetId, f64>,
}Expand description
Overlay data for PlacementProblems.
This struct takes a PlacementProblem and stores updates of initial positions, placement status
and net weights. All values which where not set to new values default back to the underlying
PlacementProblem.
This allows to update such values of a immutable PlacementProblem with no cloning.
Fields§
§placement_problem: &'a dyn PlacementProblem<C>Underlying placement problem.
initial_positions: HashMap<C::CellInstId, SimpleTransform<C::Coord>>Updates for initial positions.
placement_status: HashMap<C::CellInstId, PlacementStatus>Updates for placement status.
net_weights: HashMap<C::NetId, f64>Updates for net weights.
Implementations§
source§impl<'a, C: L2NBase> PlacementProblemOverlay<'a, C>
impl<'a, C: L2NBase> PlacementProblemOverlay<'a, C>
sourcepub fn new(placement_problem: &'a dyn PlacementProblem<C>) -> Self
pub fn new(placement_problem: &'a dyn PlacementProblem<C>) -> Self
Create a new overlay over placement_problem without any updates.
The returned placement problem will return the same values but they can
be updated without changing the underlying values.
Trait Implementations§
source§impl<'a, C: L2NBase> PlacementProblem<C> for PlacementProblemOverlay<'a, C>
impl<'a, C: L2NBase> PlacementProblem<C> for PlacementProblemOverlay<'a, C>
Representation of the placement task.
source§fn fused_layout_netlist(&self) -> &C
fn fused_layout_netlist(&self) -> &C
Get the base layout/netlist structure.
source§fn placement_region(&self) -> Vec<SimpleRPolygon<C::Coord>>
fn placement_region(&self) -> Vec<SimpleRPolygon<C::Coord>>
Get a list of polygons which describe where cells are allowed to be placed.
source§fn soft_blockages(&self) -> Vec<SimpleRPolygon<C::Coord>>
fn soft_blockages(&self) -> Vec<SimpleRPolygon<C::Coord>>
Get regions which should not be used for placement but can if necessary.
Overlap of cells with this regions should be minimized.
source§fn initial_position(
&self,
cell_instance: &C::CellInstId
) -> SimpleTransform<C::Coord>
fn initial_position( &self, cell_instance: &C::CellInstId ) -> SimpleTransform<C::Coord>
Get the position of a cell instance which should be used as an initial value
for the optimization.
This is most likely the output of the previous placement step.
source§fn placement_status(&self, cell_instance: &C::CellInstId) -> PlacementStatus
fn placement_status(&self, cell_instance: &C::CellInstId) -> PlacementStatus
Tell if the cell instance can be moved by the placement engine.
source§fn cell_outline(&self, cell: &C::CellId) -> Option<Rect<C::Coord>>
fn cell_outline(&self, cell: &C::CellId) -> Option<Rect<C::Coord>>
Get the abutment box / outline of the cell.
source§fn net_weight(&self, net: &C::NetId) -> f64
fn net_weight(&self, net: &C::NetId) -> f64
Get the weight of a net. Default is
1.0.
When optimizing the wire-length, the weighted wire-length should be used.
For example a weight 0.0 means that the net should not be considered for wire-length optimization.source§fn cell_instance_outline(
&self,
cell_instance: &C::CellInstId
) -> Option<Rect<C::Coord>>
fn cell_instance_outline( &self, cell_instance: &C::CellInstId ) -> Option<Rect<C::Coord>>
Get the abutment box / outline of the cell instance.
source§fn get_fixed_instances(&self) -> HashSet<C::CellInstId>
fn get_fixed_instances(&self) -> HashSet<C::CellInstId>
Get the set of fixed instances.
source§fn get_movable_instances(&self) -> HashSet<C::CellInstId>
fn get_movable_instances(&self) -> HashSet<C::CellInstId>
Get the set of movable cell instances.