pub trait CellConstraintModel<N: NetlistBase>: CellModel<N> + ConstraintBase {
// Required methods
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 constraint_arcs(
&self,
netlist: &N,
cell_id: &N::CellId
) -> Box<dyn Iterator<Item = CellConstraintArc<N::PinId>> + '_>;
}Expand description
Define the computation of constraint times.
Required Methods§
sourcefn 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.
Example
Assume a flip-flop with three pins: clock, data_in and data_out.
For the flip-flop to work properly there is a constraint imposed by the signal arriving at clock on the signal at data_in.
The constraint might depend on the waveform at data_in (slope and polarity), but also on output loads on other pins (data_out).
sourcefn 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.