Struct libreda_pnr::design::SimpleDesignRef
source · pub struct SimpleDesignRef<'a, C: L2NBase> {
pub fused_layout_netlist: &'a C,
pub top_cell: C::CellId,
pub cell_outlines: &'a HashMap<C::CellId, Rect<C::Coord>>,
pub placement_region: &'a Vec<SimpleRPolygon<C::Coord>>,
pub placement_status: &'a HashMap<C::CellInstId, PlacementStatus>,
pub net_weights: &'a HashMap<C::NetId, f64>,
pub placement_location: &'a HashMap<C::CellInstId, SimpleTransform<C::Coord>>,
}Expand description
Collection of data representing the chip during the place & route flow.
This struct borrows the data. In contrast, SimpleDesign owns
the data.
Fields§
§fused_layout_netlist: &'a CBase layout and netlist data-structure.
top_cell: C::CellIdCell which contains the instances to be placed.
cell_outlines: &'a HashMap<C::CellId, Rect<C::Coord>>Outline shapes of the cells to be placed.
placement_region: &'a Vec<SimpleRPolygon<C::Coord>>Regions where cells are allowed to be placed.
placement_status: &'a HashMap<C::CellInstId, PlacementStatus>Placement status of the cell instances. Default is Movable.
net_weights: &'a HashMap<C::NetId, f64>Net weights. Default for nets which are not in the hash map is 1.0.
placement_location: &'a HashMap<C::CellInstId, SimpleTransform<C::Coord>>Overwrite the location information from the fused_layout_netlist.
Trait Implementations§
source§impl<'a, C: L2NBase> PlacementProblem<C> for SimpleDesignRef<'a, C>
impl<'a, C: L2NBase> PlacementProblem<C> for SimpleDesignRef<'a, C>
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 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_id: &C::NetId) -> f64
fn net_weight(&self, net_id: &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 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 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.
source§impl<'a, C: L2NBase> RoutingProblem<C> for SimpleDesignRef<'a, C>
impl<'a, C: L2NBase> RoutingProblem<C> for SimpleDesignRef<'a, C>
source§fn fused_layout_netlist(&self) -> &C
fn fused_layout_netlist(&self) -> &C
Get the base layout/netlist structure.
source§fn nets(&self) -> Box<dyn Iterator<Item = C::NetId> + '_>
fn nets(&self) -> Box<dyn Iterator<Item = C::NetId> + '_>
Return the nets which should be routed.
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.
Place and route algorithms may or may not use the net weight.source§fn blockages(
&self
) -> Box<dyn Iterator<Item = (C::LayerId, SimpleRPolygon<C::Coord>)>>
fn blockages( &self ) -> Box<dyn Iterator<Item = (C::LayerId, SimpleRPolygon<C::Coord>)>>
Shapes where routes should not pass.
source§fn boundary(&self) -> Option<SimpleRPolygon<C::Coord>>
fn boundary(&self) -> Option<SimpleRPolygon<C::Coord>>
Routes must remain within this boundary.
source§fn arc_weight(
&self,
_signal_source: &TerminalId<C>,
_signal_destination: &TerminalId<C>
) -> f64
fn arc_weight( &self, _signal_source: &TerminalId<C>, _signal_destination: &TerminalId<C> ) -> f64
Weight of an ‘arc’, i.e. a net segment which starts at
signal_source and ends at signal_destination. Default weight is 1.0`.
Place and route algorithms may or may not use the arc weight.