Struct libreda_pnr::route::routing_problem::SimpleRoutingProblem
source · pub struct SimpleRoutingProblem<'a, LN, RoutingGuide = ()>where
LN: L2NBase,{
pub chip: &'a LN,
pub top_cell: LN::CellId,
pub nets: Vec<LN::NetId>,
pub net_weights: HashMap<LN::NetId, f64>,
pub boundary: Option<SimpleRPolygon<LN::Coord>>,
pub routing_guides: HashMap<LN::NetId, RoutingGuide>,
}Expand description
Simple representation of the global and detail routing problems.
Implements the RoutingProblem traits.
Fields§
§chip: &'a LNA fused layout-netlist structure.
top_cell: LN::CellIdThe ID of the top cell to be routed.
nets: Vec<LN::NetId>The IDs of the nets to be routed.
net_weights: HashMap<LN::NetId, f64>Weights of nets for optimizing the total wire-length.
Default weight is 1.0. A net with weight 0.0 will not be optimized for length
while a net with a high weight will be optimized for wiring length much more aggressively.
boundary: Option<SimpleRPolygon<LN::Coord>>All routes should be contained within this boundary, if it is specified.
routing_guides: HashMap<LN::NetId, RoutingGuide>Global routes.
Implementations§
source§impl<'a, LN: L2NBase, RG> SimpleRoutingProblem<'a, LN, RG>
impl<'a, LN: L2NBase, RG> SimpleRoutingProblem<'a, LN, RG>
Trait Implementations§
source§impl<'a, LN: L2NBase, RG> DetailRoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>where
RG: RoutingGuide<LN>,
impl<'a, LN: L2NBase, RG> DetailRoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>where RG: RoutingGuide<LN>,
§type RoutingGuide = RG
type RoutingGuide = RG
Representation of a global route which guides a single net.
source§fn routing_guide(&self, net: &LN::NetId) -> Option<&Self::RoutingGuide>
fn routing_guide(&self, net: &LN::NetId) -> Option<&Self::RoutingGuide>
Get the routing guide for this net.
source§impl<'a, LN, RG> RoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>where
LN: L2NBase,
impl<'a, LN, RG> RoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>where LN: L2NBase,
source§fn fused_layout_netlist(&self) -> &LN
fn fused_layout_netlist(&self) -> &LN
Get the base layout/netlist structure.
source§fn nets(&self) -> Box<dyn Iterator<Item = LN::NetId> + '_>
fn nets(&self) -> Box<dyn Iterator<Item = LN::NetId> + '_>
Return the nets which should be routed.
source§fn net_weight(&self, net: &LN::NetId) -> f64
fn net_weight(&self, net: &LN::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 = (LN::LayerId, SimpleRPolygon<LN::Coord>)>>
fn blockages( &self ) -> Box<dyn Iterator<Item = (LN::LayerId, SimpleRPolygon<LN::Coord>)>>
Shapes where routes should not pass.
source§fn boundary(&self) -> Option<SimpleRPolygon<LN::Coord>>
fn boundary(&self) -> Option<SimpleRPolygon<LN::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.