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§

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>

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).

source

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.

Implementors§

source§

impl<'a, N: NetlistBase> CellConstraintModel<N> for NDLMCellModel<'a, N>