Struct libreda_sta::models::clock_tag::ClockAwareModel
source · pub struct ClockAwareModel<M> { /* private fields */ }Expand description
Wrap a delay and/or constraint model and add the capability of tracking clock sources.
Implementations§
source§impl<M> ClockAwareModel<M>
impl<M> ClockAwareModel<M>
Trait Implementations§
source§impl<M, N> CellConstraintModel<N> for ClockAwareModel<M>where
N: NetlistBase,
M: CellConstraintModel<N>,
impl<M, N> CellConstraintModel<N> for ClockAwareModel<M>where
N: NetlistBase,
M: CellConstraintModel<N>,
source§fn get_required_input(
&self,
netlist: &N,
arc: &CellConstraintArc<N::PinId>,
constrained_pin_signal: &Self::Signal,
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, arc: &CellConstraintArc<N::PinId>, constrained_pin_signal: &Self::Signal, 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
) -> impl Iterator<Item = CellConstraintArc<N::PinId>> + '_
fn constraint_arcs( &self, netlist: &N, cell_id: &N::CellId ) -> impl Iterator<Item = CellConstraintArc<N::PinId>> + '_
Get all constraint arcs in the given cell.
source§impl<M, N> CellDelayModel<N> for ClockAwareModel<M>where
N: NetlistBase,
M: CellDelayModel<N> + LogicModel<N>,
M::LogicValue: LogicOps + TryInto<bool>,
impl<M, N> CellDelayModel<N> for ClockAwareModel<M>where
N: NetlistBase,
M: CellDelayModel<N> + LogicModel<N>,
M::LogicValue: LogicOps + TryInto<bool>,
source§fn cell_output(
&self,
netlist: &N,
arc: &CellDelayArc<N::PinId>,
input_signal: &Self::Signal,
output_load: &Self::Load,
other_inputs: &impl Fn(&N::PinId) -> Option<Self::LogicValue>
) -> Option<Self::Signal>
fn cell_output( &self, netlist: &N, arc: &CellDelayArc<N::PinId>, input_signal: &Self::Signal, 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_id: &N::CellId
) -> impl Iterator<Item = CellDelayArc<N::PinId>> + '_
fn delay_arcs( &self, netlist: &N, cell_id: &N::CellId ) -> impl Iterator<Item = CellDelayArc<N::PinId>> + '_
Iterate over the output pins of all delay arcs starting at
related_pin.source§impl<M, N> CellModel<N> for ClockAwareModel<M>where
N: NetlistBase,
M: CellModel<N>,
impl<M, N> CellModel<N> for ClockAwareModel<M>where
N: NetlistBase,
M: CellModel<N>,
source§fn ordered_pins(&self, cell: &N::CellId) -> Vec<<N as NetlistIds>::PinId>
fn ordered_pins(&self, cell: &N::CellId) -> Vec<<N as NetlistIds>::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<M> ConstraintBase for ClockAwareModel<M>where
M: ConstraintBase,
impl<M> ConstraintBase for ClockAwareModel<M>where
M: ConstraintBase,
§type Constraint = <M as ConstraintBase>::Constraint
type Constraint = <M as ConstraintBase>::Constraint
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 = SignalWithClock<<M as ConstraintBase>::RequiredSignal>
type RequiredSignal = SignalWithClock<<M as ConstraintBase>::RequiredSignal>
Representation of a signal which is required to satisfy constraints.
§type Slack = <M as ConstraintBase>::Slack
type Slack = <M as ConstraintBase>::Slack
Difference between the arrival times of an actual signal and a required signal.
source§fn summarize_constraints(
&self,
constraint1: &Self::RequiredSignal,
constraint2: &Self::RequiredSignal
) -> Self::RequiredSignal
fn summarize_constraints( &self, constraint1: &Self::RequiredSignal, constraint2: &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_signal: &Self::Signal
) -> Self::RequiredSignal
fn solve_delay_constraint( &self, actual_delay: &Self::Delay, required_output: &Self::RequiredSignal, actual_signal: &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<M: Debug> Debug for ClockAwareModel<M>
impl<M: Debug> Debug for ClockAwareModel<M>
source§impl<M> DelayBase for ClockAwareModel<M>where
M: DelayBase,
impl<M> DelayBase for ClockAwareModel<M>where
M: DelayBase,
§type Delay = <M as DelayBase>::Delay
type Delay = <M as DelayBase>::Delay
Type representing a delay.
This can be as simple as a
f64 or more complicated such as a probability distribution.source§impl<M> Deref for ClockAwareModel<M>
impl<M> Deref for ClockAwareModel<M>
source§impl<M> LoadBase for ClockAwareModel<M>where
M: LoadBase,
impl<M> LoadBase for ClockAwareModel<M>where
M: LoadBase,
source§impl<M> TimingBase for ClockAwareModel<M>where
M: TimingBase,
impl<M> TimingBase for ClockAwareModel<M>where
M: TimingBase,
§type Signal = SignalWithClock<<M as TimingBase>::Signal>
type Signal = SignalWithClock<<M as TimingBase>::Signal>
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 = <M as TimingBase>::LogicValue
type LogicValue = <M as TimingBase>::LogicValue
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.Auto Trait Implementations§
impl<M> !Freeze for ClockAwareModel<M>
impl<M> RefUnwindSafe for ClockAwareModel<M>where
M: RefUnwindSafe,
impl<M> Send for ClockAwareModel<M>where
M: Send,
impl<M> Sync for ClockAwareModel<M>where
M: Sync,
impl<M> Unpin for ClockAwareModel<M>where
M: Unpin,
impl<M> UnwindSafe for ClockAwareModel<M>where
M: 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
Mutably borrows from an owned value. Read more
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more