pub struct LEFDesignRuleAdapter<'a, L: LayoutBase> {
lef: &'a LEF,
dbu: f64,
layer_mapping: HashMap<L::LayerId, &'a Layer>,
layer_stack: Vec<(L::LayerId, &'a Layer)>,
ty: PhantomData<L>,
}Expand description
Provides standardized read access to the design-rules defined in a LEF structure.
Fields§
§lef: &'a LEFUnderlying LEF data.
dbu: f64Data-base units per micron.
layer_mapping: HashMap<L::LayerId, &'a Layer>Mapping from layer IDs to actual LEF layer data.
layer_stack: Vec<(L::LayerId, &'a Layer)>Layers sorted by the processing order: Starts with layers close to the substrate, ends with top level metal layers.
ty: PhantomData<L>Implementations§
source§impl<'a, L> LEFDesignRuleAdapter<'a, L>where
L: LayoutBase,
L::Coord: ToPrimitive,
impl<'a, L> LEFDesignRuleAdapter<'a, L>where L: LayoutBase, L::Coord: ToPrimitive,
sourcefn db_distance_to_lef(&self, db_distance: L::Coord) -> f64
fn db_distance_to_lef(&self, db_distance: L::Coord) -> f64
Convert from a distance in data-base units into a LEF distance (f64).
source§impl<'a, L> LEFDesignRuleAdapter<'a, L>where
L: LayoutBase,
L::Coord: FromPrimitive,
impl<'a, L> LEFDesignRuleAdapter<'a, L>where L: LayoutBase, L::Coord: FromPrimitive,
sourcefn lef_distance_to_db(&self, lef_distance: f64) -> L::Coord
fn lef_distance_to_db(&self, lef_distance: f64) -> L::Coord
Convert from a LEF distance (f64) into the correct unit used by the layout.
source§impl<'a, L> LEFDesignRuleAdapter<'a, L>where
L: LayoutBase,
L::Coord: FromPrimitive + ToPrimitive,
impl<'a, L> LEFDesignRuleAdapter<'a, L>where L: LayoutBase, L::Coord: FromPrimitive + ToPrimitive,
sourcepub fn new(lef: &'a LEF, layout: &L) -> Self
pub fn new(lef: &'a LEF, layout: &L) -> Self
Create a new design rule adapter for a LEF data structure. Derives the mapping from layer IDs and LEF layers based on the layer names.
sourcepub fn new_from_layer_mapping(
lef: &'a LEF,
layer_ids_by_name: &HashMap<String, L::LayerId>,
dbu: f64
) -> Self
pub fn new_from_layer_mapping( lef: &'a LEF, layer_ids_by_name: &HashMap<String, L::LayerId>, dbu: f64 ) -> Self
Create a new design rule adapter for a LEF data structure with a custom mapping between layer names and layer IDs.
sourcefn extract_layer_mapping_from_layout(layout: &L) -> HashMap<String, L::LayerId>
fn extract_layer_mapping_from_layout(layout: &L) -> HashMap<String, L::LayerId>
Find the mapping from layer names to layer IDs.
sourcefn create_layer_mapping(
&mut self,
layer_ids_by_name: &HashMap<String, L::LayerId>
)
fn create_layer_mapping( &mut self, layer_ids_by_name: &HashMap<String, L::LayerId> )
Initialize the mapping: layer ID -> LEF layer structure.
Trait Implementations§
source§impl<'a, L> DefaultWidth for LEFDesignRuleAdapter<'a, L>where
L: LayoutBase,
L::Coord: FromPrimitive,
impl<'a, L> DefaultWidth for LEFDesignRuleAdapter<'a, L>where L: LayoutBase, L::Coord: FromPrimitive,
source§fn default_width(
&self,
layer_id: &Self::LayerId,
shape_length: Option<Self::Distance>
) -> Option<Self::Distance>
fn default_width( &self, layer_id: &Self::LayerId, shape_length: Option<Self::Distance> ) -> Option<Self::Distance>
source§impl<'a, L: LayoutBase> DistanceRuleBase for LEFDesignRuleAdapter<'a, L>
impl<'a, L: LayoutBase> DistanceRuleBase for LEFDesignRuleAdapter<'a, L>
source§impl<'a, L: LayoutBase> MinimumSpacing for LEFDesignRuleAdapter<'a, L>where
L::Coord: ToPrimitive + FromPrimitive,
impl<'a, L: LayoutBase> MinimumSpacing for LEFDesignRuleAdapter<'a, L>where L::Coord: ToPrimitive + FromPrimitive,
source§fn min_spacing_absolute(
&self,
layer_id: &Self::LayerId
) -> Option<Self::Distance>
fn min_spacing_absolute( &self, layer_id: &Self::LayerId ) -> Option<Self::Distance>
layer.source§fn min_spacing(
&self,
layer_id: &Self::LayerId,
run_length: Self::Distance,
width: Self::Distance
) -> Option<Self::Distance>
fn min_spacing( &self, layer_id: &Self::LayerId, run_length: Self::Distance, width: Self::Distance ) -> Option<Self::Distance>
layer dependent on the geometries.source§impl<'a, L> MinimumWidth for LEFDesignRuleAdapter<'a, L>where
L: LayoutBase,
L::Coord: FromPrimitive,
impl<'a, L> MinimumWidth for LEFDesignRuleAdapter<'a, L>where L: LayoutBase, L::Coord: FromPrimitive,
source§impl<'a, L: LayoutBase> PreferredRoutingDirection for LEFDesignRuleAdapter<'a, L>where
L::Coord: ToPrimitive + FromPrimitive,
impl<'a, L: LayoutBase> PreferredRoutingDirection for LEFDesignRuleAdapter<'a, L>where L::Coord: ToPrimitive + FromPrimitive,
source§fn preferred_routing_direction(
&self,
layer_id: &Self::LayerId
) -> Option<Orientation2D>
fn preferred_routing_direction( &self, layer_id: &Self::LayerId ) -> Option<Orientation2D>
source§impl<'a, L: LayoutBase> RoutingLayerStack for LEFDesignRuleAdapter<'a, L>
impl<'a, L: LayoutBase> RoutingLayerStack for LEFDesignRuleAdapter<'a, L>
source§fn layer_stack(&self) -> Vec<RoutingLayer<Self::LayerId>>
fn layer_stack(&self) -> Vec<RoutingLayer<Self::LayerId>>
§fn layer_stack_ids(&self) -> Vec<Self::LayerId, Global>
fn layer_stack_ids(&self) -> Vec<Self::LayerId, Global>
§fn routing_layer_stack(&self) -> Vec<Self::LayerId, Global>
fn routing_layer_stack(&self) -> Vec<Self::LayerId, Global>
§fn via_layer_stack(&self) -> Vec<Self::LayerId, Global>
fn via_layer_stack(&self) -> Vec<Self::LayerId, Global>
§fn get_upper_metal_layer(&self, layer: &Self::LayerId) -> Option<Self::LayerId>
fn get_upper_metal_layer(&self, layer: &Self::LayerId) -> Option<Self::LayerId>
§fn get_lower_metal_layer(&self, layer: &Self::LayerId) -> Option<Self::LayerId>
fn get_lower_metal_layer(&self, layer: &Self::LayerId) -> Option<Self::LayerId>
source§impl<'a, L> RoutingRules for LEFDesignRuleAdapter<'a, L>where
L: LayoutBase,
L::Coord: ToPrimitive + FromPrimitive,
impl<'a, L> RoutingRules for LEFDesignRuleAdapter<'a, L>where L: LayoutBase, L::Coord: ToPrimitive + FromPrimitive,
source§fn default_pitch(
&self,
layer_id: &Self::LayerId
) -> Option<(Self::Distance, Self::Distance)>
fn default_pitch( &self, layer_id: &Self::LayerId ) -> Option<(Self::Distance, Self::Distance)>
§fn default_pitch_preferred_direction(
&self,
layer: &Self::LayerId
) -> Option<Self::Distance>
fn default_pitch_preferred_direction( &self, layer: &Self::LayerId ) -> Option<Self::Distance>
None if no default pitch or no routing direction is defined for this layer.