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: L2NBase, RG> DetailRoutingProblem<LN> for SimpleRoutingProblem<'a, LN, RG>where RG: RoutingGuide<LN>,

§

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> RefUnwindSafe for SimpleRoutingProblem<'a, LN, RoutingGuide>where LN: RefUnwindSafe, RoutingGuide: RefUnwindSafe, <LN as HierarchyIds>::CellId: RefUnwindSafe, <LN as LayoutIds>::Coord: RefUnwindSafe, <LN as NetlistIds>::NetId: RefUnwindSafe,

§

impl<'a, LN, RoutingGuide> Send for SimpleRoutingProblem<'a, LN, RoutingGuide>where LN: Sync, RoutingGuide: Send, <LN as HierarchyIds>::CellId: Send, <LN as NetlistIds>::NetId: Send,

§

impl<'a, LN, RoutingGuide> Sync for SimpleRoutingProblem<'a, LN, RoutingGuide>where LN: Sync, RoutingGuide: Sync, <LN as HierarchyIds>::CellId: Sync, <LN as NetlistIds>::NetId: Sync,

§

impl<'a, LN, RoutingGuide> Unpin for SimpleRoutingProblem<'a, LN, RoutingGuide>where RoutingGuide: Unpin, <LN as HierarchyIds>::CellId: Unpin, <LN as LayoutIds>::Coord: Unpin, <LN as NetlistIds>::NetId: Unpin,

§

impl<'a, LN, RoutingGuide> UnwindSafe for SimpleRoutingProblem<'a, LN, RoutingGuide>where LN: RefUnwindSafe, RoutingGuide: UnwindSafe, <LN as HierarchyIds>::CellId: UnwindSafe, <LN as LayoutIds>::Coord: UnwindSafe, <LN as NetlistIds>::NetId: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.