Struct libreda_sta::models::ndlm_cell_delay::NDLMCellModel
source · pub struct NDLMCellModel<'a, N: NetlistBase> {
sta_mode: StaMode,
delay_model_type: DelayModelType,
library: &'a LibertyTimingLibrary<'a>,
pin_capacitances: FnvHashMap<N::PinId, NDLMOutputLoad>,
pin_data: FnvHashMap<N::PinId, &'a Pin>,
ordered_pins: FnvHashMap<N::CellId, Vec<N::PinId>>,
warn_negative_slew: Once,
warn_negative_delay: Once,
}Expand description
Parameters
'a: Lifetime of the liberty library.
Fields§
§sta_mode: StaMode§delay_model_type: DelayModelTypeChoose between using NDLM or a constant delay.
library: &'a LibertyTimingLibrary<'a>§pin_capacitances: FnvHashMap<N::PinId, NDLMOutputLoad>Table for quickly finding the input capacitance of a pin.
Capacitance is available also in pin_data but access might be faster using this field.
pin_data: FnvHashMap<N::PinId, &'a Pin>Lookup-table for pin data (capacitance, delay arcs, constraint arcs, …).
ordered_pins: FnvHashMap<N::CellId, Vec<N::PinId>>Cache the pin ordering for all the cells.
warn_negative_slew: OnceWarn once about negative slew.
warn_negative_delay: OnceImplementations§
source§impl<'a, N: NetlistBase> NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> NDLMCellModel<'a, N>
sourcepub fn new(library: &'a LibertyTimingLibrary<'_>, netlist: &N) -> Self
pub fn new(library: &'a LibertyTimingLibrary<'_>, netlist: &N) -> Self
Create a new NDLM cell model based on a liberty library.
sourcepub fn set_delay_model_type(&mut self, model_type: DelayModelType)
pub fn set_delay_model_type(&mut self, model_type: DelayModelType)
Choose between NDLM and constant delays.
fn init(&mut self, netlist: &N)
sourcefn init_capacitance_table(&mut self, netlist: &N)
fn init_capacitance_table(&mut self, netlist: &N)
Create a lookup-table for the default pin capacitances.
Trait Implementations§
source§impl<'a, N: NetlistBase> CellConstraintModel<N> for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> CellConstraintModel<N> for NDLMCellModel<'a, N>
source§fn get_required_input(
&self,
netlist: &N,
constrained_pin: &N::PinId,
constrained_pin_signal: &Self::Signal,
related_pin: &N::PinId,
related_pin_signal: &Self::Signal,
_other_inputs: &impl Fn(&N::PinId) -> Option<Self::Signal>,
output_loads: &impl Fn(&N::PinId) -> Option<Self::Load>
) -> Option<Self::RequiredSignal>
fn get_required_input( &self, netlist: &N, constrained_pin: &N::PinId, constrained_pin_signal: &Self::Signal, related_pin: &N::PinId, related_pin_signal: &Self::Signal, _other_inputs: &impl Fn(&N::PinId) -> Option<Self::Signal>, output_loads: &impl Fn(&N::PinId) -> Option<Self::Load> ) -> Option<Self::RequiredSignal>
Compute the constraint on the
constrained_pin imposed by the related_pin.
Returns None if there’s no such constraint. Read moresource§fn constraint_arcs(
&self,
netlist: &N,
cell_id: &N::CellId
) -> Box<dyn Iterator<Item = CellConstraintArc<N::PinId>> + '_>
fn constraint_arcs( &self, netlist: &N, cell_id: &N::CellId ) -> Box<dyn Iterator<Item = CellConstraintArc<N::PinId>> + '_>
Get all constraint arcs in the given cell.
source§impl<'a, N: NetlistBase> CellDelayModel<N> for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> CellDelayModel<N> for NDLMCellModel<'a, N>
source§fn cell_output(
&self,
netlist: &N,
input_pin: &N::PinId,
input_signal: &Self::Signal,
output_pin: &N::PinId,
output_load: &Self::Load,
_other_inputs: &impl Fn(&N::PinId) -> Option<Self::LogicValue>
) -> Option<Self::Signal>
fn cell_output( &self, netlist: &N, input_pin: &N::PinId, input_signal: &Self::Signal, output_pin: &N::PinId, output_load: &Self::Load, _other_inputs: &impl Fn(&N::PinId) -> Option<Self::LogicValue> ) -> Option<Self::Signal>
Propagate a signal from the
input_pin to the output_pin.
This is used as a more general form of computing the cell delay.
The input_pin and the output_pin must be pins of the same cell. Read moresource§fn delay_arcs(
&self,
netlist: &N,
cell: &N::CellId
) -> Box<dyn Iterator<Item = CellDelayArc<N::PinId>> + '_>
fn delay_arcs( &self, netlist: &N, cell: &N::CellId ) -> Box<dyn Iterator<Item = CellDelayArc<N::PinId>> + '_>
Iterate over the output pins of all delay arcs starting at
related_pin.source§impl<'a, N: NetlistBase> CellLoadModel<N> for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> CellLoadModel<N> for NDLMCellModel<'a, N>
source§impl<'a, N: NetlistBase> CellModel<N> for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> CellModel<N> for NDLMCellModel<'a, N>
source§fn ordered_pins(&self, cell: &N::CellId) -> Vec<N::PinId>
fn ordered_pins(&self, cell: &N::CellId) -> Vec<N::PinId>
Get the cell pins in a consistent ordering.
The same ordering will be used for passing input signals to the cell delay model
or cell constraint model.
source§impl<'a, N: NetlistBase> ConstraintBase for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> ConstraintBase for NDLMCellModel<'a, N>
§type Constraint = NDLMConstraint
type Constraint = NDLMConstraint
Representation of a constraint.
This might be for example an earliest or latest required arrival time or a allowed timing window
or also a constraint on any other signal properties such as the slew.
§type RequiredSignal = NDLMRequiredSignal
type RequiredSignal = NDLMRequiredSignal
Representation of a signal which is required to satisfy constraints.
§type Slack = NDLMSlack
type Slack = NDLMSlack
Difference between the arrival times of an actual signal and a required signal.
source§fn summarize_constraints(
&self,
s1: &Self::RequiredSignal,
s2: &Self::RequiredSignal
) -> Self::RequiredSignal
fn summarize_constraints( &self, s1: &Self::RequiredSignal, s2: &Self::RequiredSignal ) -> Self::RequiredSignal
Summarize two constraints
c1 and c2 into a single constraint c such that if c is satisfied
then also c1 and c2 are satisfied.
Depending on the timing analysis mode (late/early) this might be
a max or min function.source§fn solve_delay_constraint(
&self,
actual_delay: &Self::Delay,
required_output: &Self::RequiredSignal,
_actual_input: &Self::Signal
) -> Self::RequiredSignal
fn solve_delay_constraint( &self, actual_delay: &Self::Delay, required_output: &Self::RequiredSignal, _actual_input: &Self::Signal ) -> Self::RequiredSignal
Find the required input signal such that the actual output signal is equal to the
required_output. The actual_delay from the input to the output is given.
Also the actual output is given (might not be necessary to compute the result).source§impl<'a, N: Debug + NetlistBase> Debug for NDLMCellModel<'a, N>where
N::PinId: Debug,
N::CellId: Debug,
impl<'a, N: Debug + NetlistBase> Debug for NDLMCellModel<'a, N>where N::PinId: Debug, N::CellId: Debug,
source§impl<'a, N: NetlistBase> DelayBase for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> DelayBase for NDLMCellModel<'a, N>
§type Delay = NDLMDelay
type Delay = NDLMDelay
Type representing a delay.
This can be as simple as a
f64 or more complicated such as a probability distribution.source§impl<'a, N: NetlistBase> LoadBase for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> LoadBase for NDLMCellModel<'a, N>
source§impl<'a, N: NetlistBase> TimingBase for NDLMCellModel<'a, N>
impl<'a, N: NetlistBase> TimingBase for NDLMCellModel<'a, N>
§type Signal = NDLMSignal
type Signal = NDLMSignal
Representation of signals at input or output pins.
In case of the Non-linear delay model (NDLM) this could be a bundle of the slew rate
and the delay but also the polarity of the signal.
But this type could as well also be a statistical representation of a signal, e.g. a probability
distribution of arrival times.
§type LogicValue = Logic3
type LogicValue = Logic3
Type of logic value.
Typically this might be a three-valued type which represents logical
0, 1 and ‘unknown’.
The default is typically ‘unknown’.
This is used to specify static input signals when evaluating cell delays or constraints.