Struct atoll::grid::RoutingState
source · pub struct RoutingState<L> { /* private fields */ }
Expand description
A fixed-size routing grid.
Implementations§
source§impl<L> RoutingState<L>
impl<L> RoutingState<L>
sourcepub fn grid(&self) -> &RoutingGrid<L>
pub fn grid(&self) -> &RoutingGrid<L>
Returns a reference to the routing grid.
sourcepub fn layer(&self, layer: usize) -> &Grid<PointState>
pub fn layer(&self, layer: usize) -> &Grid<PointState>
Returns a reference to a layer’s state.
sourcepub fn layer_mut(&mut self, layer: usize) -> &mut Grid<PointState>
pub fn layer_mut(&mut self, layer: usize) -> &mut Grid<PointState>
Returns a mutable reference to a layer’s state.
source§impl<L: AtollLayer + Clone> RoutingState<L>
impl<L: AtollLayer + Clone> RoutingState<L>
sourcepub fn new(stack: LayerStack<L>, top: usize, nx: i64, ny: i64) -> Self
pub fn new(stack: LayerStack<L>, top: usize, nx: i64, ny: i64) -> Self
Creates a new RoutingState
.
sourcepub fn find(&self, net: NetId) -> Option<GridCoord>
pub fn find(&self, net: NetId) -> Option<GridCoord>
Finds a single grid coordinate belonging to the given net.
Searches the topmost layer first, starting from the lower left.
Returns the first grid point with a matching net ID, or None
if no grid point has the given net ID.
sourcepub fn find_all(&self, net: NetId) -> Vec<GridCoord>
pub fn find_all(&self, net: NetId) -> Vec<GridCoord>
Finds all grid coordinates belonging to the given net.
Searches the topmost layer first, starting from the lower left.
Returns the first grid point with a matching net ID, or None
if no grid point has the given net ID.
sourcepub fn successors(
&self,
node: RoutingNode,
path: &[RoutingNode],
net: NetId
) -> Vec<(RoutingNode, usize)>
pub fn successors( &self, node: RoutingNode, path: &[RoutingNode], net: NetId ) -> Vec<(RoutingNode, usize)>
The set of points reachable from coord
.
M0 <-> M1 vias are always easy, since both layers have the same grid.
MN <-> M(N+1) vias require interpolation. We first identify the coordinate that stays constant in the transition. If MN has horizontal going tracks, the y-coordinate is constant. If MN has vertical going tracks, the x-coordinate is constant. The non-constant coordinate must be interpolated.
Interpolation is done as follows:
- We translate the track coordinate to a physical coordinate, and retrieve the coordinate in the interpolated direction
- We find two track coordinates on M(N+1): one by rounding up; the other by rounding down.
- If the two coordinates are equal, we report a successor to that grid point.
- Otherwise, we report a successor to the track with a closer physical coordinate, assuming the farther coordinate is unobstructed.
sourcepub fn grid_to_rel_physical(&self, coord: GridCoord) -> Point
pub fn grid_to_rel_physical(&self, coord: GridCoord) -> Point
Converts the given grid point to physical coordinates.
Assumes that (0,0) in grid coordinates is the same as (0,0) in track coordinates. In other words, this assumes that grid and track coordinates are the same; there is not shift between grid and track coordinates.
Trait Implementations§
source§impl<L: Clone> Clone for RoutingState<L>
impl<L: Clone> Clone for RoutingState<L>
source§fn clone(&self) -> RoutingState<L>
fn clone(&self) -> RoutingState<L>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<L: Debug> Debug for RoutingState<L>
impl<L: Debug> Debug for RoutingState<L>
source§impl<L> Index<GridCoord> for RoutingState<L>
impl<L> Index<GridCoord> for RoutingState<L>
Auto Trait Implementations§
impl<L> RefUnwindSafe for RoutingState<L>where
L: RefUnwindSafe,
impl<L> Send for RoutingState<L>where
L: Send,
impl<L> Sync for RoutingState<L>where
L: Sync,
impl<L> Unpin for RoutingState<L>where
L: Unpin,
impl<L> UnwindSafe for RoutingState<L>where
L: UnwindSafe,
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
source§impl<T, U> CustomHardwareType<Flipped<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
impl<T, U> CustomHardwareType<Flipped<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
source§fn from_layout_type(other: &Flipped<T>) -> U
fn from_layout_type(other: &Flipped<T>) -> U
source§impl<T, U> CustomHardwareType<InOut<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
impl<T, U> CustomHardwareType<InOut<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
source§fn from_layout_type(other: &InOut<T>) -> U
fn from_layout_type(other: &InOut<T>) -> U
source§impl<T, U> CustomHardwareType<Input<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
impl<T, U> CustomHardwareType<Input<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
source§fn from_layout_type(other: &Input<T>) -> U
fn from_layout_type(other: &Input<T>) -> U
source§impl<T, U> CustomHardwareType<Output<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
impl<T, U> CustomHardwareType<Output<T>> for Uwhere
U: CustomHardwareType<T>,
T: HardwareType,
source§fn from_layout_type(other: &Output<T>) -> U
fn from_layout_type(other: &Output<T>) -> U
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request