pub struct Abstract { /* private fields */ }
Expand description
The abstract view of an ATOLL tile.
§Coordinates
There are three coordinate systems used within the abstract view.
- Physical coordinates: the raw physical coordinate system of the cell, expressed in PDK database units.
- Track coordinates: track indices indexing the ATOLL
LayerStack
. Track 0 is typically centered at the origin, or immediately to the upper left of the origin. - Grid coordinates: these have the same spacing as track coordinates, but are shifted so that (0, 0) is always at the lower left. These are used to index
LayerAbstract
s.
ATOLL provides the following utilities for converting between these coordinate systems:
- Grid to physical:
Abstract::grid_to_physical
- Track to physical:
Abstract::track_to_physical
- Grid to track:
Abstract::grid_to_track
- Track to grid:
Abstract::track_to_grid
- Physical to track:
RoutingGrid::point_to_grid
For converting physical to grid: convert the physical coordinates to track coordinates, then convert track coordinates to physical coordinates.
Implementations§
source§impl Abstract
impl Abstract
sourcepub fn physical_bounds(&self) -> Rect
pub fn physical_bounds(&self) -> Rect
Returns the physical bounds of this abstract.
sourcepub fn routing_state(&self) -> RoutingState<PdkLayer>
pub fn routing_state(&self) -> RoutingState<PdkLayer>
Returns a RoutingState
corresponding to this abstract.
sourcepub fn from_routing_state(&mut self, state: RoutingState<PdkLayer>)
pub fn from_routing_state(&mut self, state: RoutingState<PdkLayer>)
Populates an Abstract
based on the provided RoutingState
.
sourcepub fn grid_to_physical(&self, coord: GridCoord) -> Point
pub fn grid_to_physical(&self, coord: GridCoord) -> Point
Converts a grid point to a physical point in the coordinates of the cell.
See coordinate systems for more information.
sourcepub fn track_to_physical(&self, coord: TrackCoord) -> Point
pub fn track_to_physical(&self, coord: TrackCoord) -> Point
Converts a track point to a physical point in the coordinates of the cell.
See coordinate systems for more information.
sourcepub fn grid_to_track(&self, coord: GridCoord) -> TrackCoord
pub fn grid_to_track(&self, coord: GridCoord) -> TrackCoord
Converts a grid point to a track point in the coordinates of the cell.
See coordinate systems for more information.
sourcepub fn track_to_grid(&self, coord: TrackCoord) -> GridCoord
pub fn track_to_grid(&self, coord: TrackCoord) -> GridCoord
Converts a track point to a grid point in the coordinates of the cell.
See coordinate systems for more information.
sourcepub fn physical_origin(&self) -> Point
pub fn physical_origin(&self) -> Point
Returns the physical origin of this abstract (i.e. the physical coordinates of its lower left corner.
sourcepub fn generate<PDK: Pdk, T: ExportsNestedData + ExportsLayoutData>(
ctx: &PdkContext<PDK>,
layout: &Cell<T>
) -> Abstract
pub fn generate<PDK: Pdk, T: ExportsNestedData + ExportsLayoutData>( ctx: &PdkContext<PDK>, layout: &Cell<T> ) -> Abstract
Generates an abstract view of a layout cell.
Trait Implementations§
source§impl<'de> Deserialize<'de> for Abstract
impl<'de> Deserialize<'de> for Abstract
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl PartialEq for Abstract
impl PartialEq for Abstract
impl Eq for Abstract
impl StructuralPartialEq for Abstract
Auto Trait Implementations§
impl RefUnwindSafe for Abstract
impl Send for Abstract
impl Sync for Abstract
impl Unpin for Abstract
impl UnwindSafe for Abstract
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
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§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