SimpleRoutingProblem

Struct 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 LN

A fused layout-netlist structure.

§top_cell: LN::CellId

The 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>

Source

pub fn new(chip: &'a LN, top_cell: LN::CellId) -> Self

Create a new routing problem. By default, no nets are included. Nets which should be routed need to be added to the nets field.

Source

pub fn with_routing_guides(self, routing_guides: HashMap<LN::NetId, RG>) -> Self

Set global routes.

Trait Implementations§

Source§

impl<'a, LN, RoutingGuide: Clone> Clone for SimpleRoutingProblem<'a, LN, RoutingGuide>
where LN: L2NBase + Clone, LN::CellId: Clone, LN::NetId: Clone, LN::Coord: Clone,

Source§

fn clone(&self) -> SimpleRoutingProblem<'a, LN, RoutingGuide>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a, LN: L2NBase, RG> DetailRoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>
where RG: RoutingGuide<LN>,

Source§

type RoutingGuide = RG

Representation of a global route which guides a single net.
Source§

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,

Source§

fn fused_layout_netlist(&self) -> &LN

Get the base layout/netlist structure.
Source§

fn top_cell(&self) -> LN::CellId

Get the top cell whose content should be placed.
Source§

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

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>)>>

Shapes where routes should not pass.
Source§

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

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.
Source§

impl<'a, LN: L2NBase, RG> GlobalRoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>

Auto Trait Implementations§

§

impl<'a, LN, RoutingGuide> Freeze for SimpleRoutingProblem<'a, LN, RoutingGuide>
where <LN as HierarchyBase>::CellId: Freeze,

§

impl<'a, LN, RoutingGuide> RefUnwindSafe for SimpleRoutingProblem<'a, LN, RoutingGuide>

§

impl<'a, LN, RoutingGuide> Send for SimpleRoutingProblem<'a, LN, RoutingGuide>
where <LN as HierarchyBase>::CellId: Send, LN: Sync, <LN as NetlistBase>::NetId: Send, RoutingGuide: Send, <LN as LayoutBase>::Coord: Send,

§

impl<'a, LN, RoutingGuide> Sync for SimpleRoutingProblem<'a, LN, RoutingGuide>
where <LN as HierarchyBase>::CellId: Sync, LN: Sync, <LN as NetlistBase>::NetId: Sync, RoutingGuide: Sync, <LN as LayoutBase>::Coord: Sync,

§

impl<'a, LN, RoutingGuide> Unpin for SimpleRoutingProblem<'a, LN, RoutingGuide>
where <LN as HierarchyBase>::CellId: Unpin, <LN as NetlistBase>::NetId: Unpin, <LN as LayoutBase>::Coord: Unpin, RoutingGuide: Unpin,

§

impl<'a, LN, RoutingGuide> UnwindSafe for SimpleRoutingProblem<'a, LN, RoutingGuide>
where <LN as HierarchyBase>::CellId: UnwindSafe, LN: RefUnwindSafe, <LN as NetlistBase>::NetId: UnwindSafe, RoutingGuide: UnwindSafe, <LN as LayoutBase>::Coord: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.