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>
TODO: fn arc_weight(&self, arc: &ArcId) -> f64;
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.impl<'a, C: L2NBase> GlobalRoutingProblem<C> for SimpleDesignRef<'a, C>
Auto Trait Implementations§
impl<'a, C> Freeze for SimpleDesignRef<'a, C>
impl<'a, C> RefUnwindSafe for SimpleDesignRef<'a, C>where
<C as HierarchyBase>::CellId: RefUnwindSafe,
C: RefUnwindSafe,
<C as HierarchyBase>::CellInstId: RefUnwindSafe,
<C as NetlistBase>::NetId: RefUnwindSafe,
<C as LayoutBase>::Coord: RefUnwindSafe,
impl<'a, C> Send for SimpleDesignRef<'a, C>where
<C as HierarchyBase>::CellId: Send + Sync,
C: Sync,
<C as HierarchyBase>::CellInstId: Sync,
<C as NetlistBase>::NetId: Sync,
<C as LayoutBase>::Coord: Sync,
impl<'a, C> Sync for SimpleDesignRef<'a, C>where
<C as HierarchyBase>::CellId: Sync,
C: Sync,
<C as HierarchyBase>::CellInstId: Sync,
<C as NetlistBase>::NetId: Sync,
<C as LayoutBase>::Coord: Sync,
impl<'a, C> Unpin for SimpleDesignRef<'a, C>
impl<'a, C> UnwindSafe for SimpleDesignRef<'a, C>where
<C as HierarchyBase>::CellId: UnwindSafe + RefUnwindSafe,
C: RefUnwindSafe,
<C as HierarchyBase>::CellInstId: RefUnwindSafe,
<C as NetlistBase>::NetId: RefUnwindSafe,
<C as LayoutBase>::Coord: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more