struct PropagationOp<'a, G, N, D, IC, ICL> {
    netlist: &'a N,
    cell_model: &'a D,
    interconnect_delay_model: &'a IC,
    interconnect_load_model: &'a ICL,
    generation: u32,
    _graph_type: PhantomData<G>,
    _node_data_type: PhantomData<N>,
}
Expand description

Propagate actual signals, constraints and required signals on the full (!) netlist. Requires that all (!) primary inputs of the delay graph are present in the initial worklist. Otherwise the algorithm will miss parts of the graph.

Fields§

§netlist: &'a N

Eventually need the netlist to do the mapping from terminals to cells. TODO: remove

§cell_model: &'a D

The cell model provides the timing behaviour of cells (delays, constraints).

§interconnect_delay_model: &'a IC

Model for wire delays.

§interconnect_load_model: &'a ICL

Provides the loads imposed by nets attached to the outputs of logic gates.

§generation: u32

The number of the current iteration. Used to detect nodes which have not yet been touched in the current iteration.

§_graph_type: PhantomData<G>§_node_data_type: PhantomData<N>

Implementations§

source§

impl<'a, G, N, C, IC, ICL> PropagationOp<'a, G, N, C, IC, ICL>where N: NetlistBase, C: DelayBase + ConstraintBase + CellDelayModel<N> + CellConstraintModel<N>, IC: InterconnectDelayModel<N, Signal = C::Signal>, ICL: InterconnectLoadModel<N, Load = C::Load>, G: GraphBase + Data<NodeWeight = NodeData<N, C>, EdgeWeight = EdgeData<C>> + IntoEdgesDirected + DataMap, G::NodeId: Debug,

source

fn new( netlist: &'a N, delay_model: &'a C, interconnect_delay_model: &'a IC, interconnect_load_model: &'a ICL, generation: u32 ) -> Self

source

fn evaluate_delay_arc( &self, netlist: &N, local_view: &LocalGraphView<&G, FullConflictDetection>, input_signal: &C::Signal, output_load: &C::Load, graph_edge: G::EdgeRef, other_inputs: &impl Fn(&N::PinId) -> Option<C::LogicValue> ) -> Option<C::Signal>

Propagate the signal along a delay arc. The graph edge represents the delay arc. The delay arc might go from a cell output to a cell input (inter-cell or wiring delay) or the other way from a cell input to a cell output (intra-cell delay).

source

fn evaluate_constraint_arc( &self, local_view: &LocalGraphView<&G, FullConflictDetection>, local_data: &SyncNodeData<C>, constraint_edge: G::EdgeRef, other_inputs: &impl Fn(&N::PinId) -> Option<C::Signal>, output_loads: &impl Fn(&N::PinId) -> Option<C::Load> ) -> Option<C::RequiredSignal>

source

fn mark_forward_dependency_resolved( &self, local_view: &LocalGraphView<&G, FullConflictDetection>, push_to_worklist: &mut impl FnMut(WorkItem<G::NodeId>) )

Mark this dependency as resolved. Create new activities from output nodes which have all dependencies resolved.

source

fn mark_backward_dependency_resolved( &self, local_view: &LocalGraphView<&G, FullConflictDetection>, push_to_worklist: &mut impl FnMut(WorkItem<G::NodeId>) )

Mark this dependency as resolved for backward propagation. Create new activities from output nodes which have all dependencies resolved.

source

fn propagate_forward( &self, local_view: &LocalGraphView<&G, FullConflictDetection>, local_data: &mut SyncNodeData<C>, push_to_worklist: impl FnMut(WorkItem<G::NodeId>) ) -> Result<(), DataConflictErr<G::NodeId, G::EdgeId>>

source

fn propagate_backward( &self, local_view: &LocalGraphView<&G, FullConflictDetection>, local_data: &mut SyncNodeData<C>, push_to_worklist: impl FnMut(WorkItem<G::NodeId>) ) -> Result<(), DataConflictErr<G::NodeId, G::EdgeId>>

Compute the required signals such that constraints are met. Signal requirements of a node are imposed by outgoing delay arcs and incoming constraint arcs.

Trait Implementations§

source§

impl<'a, G: Clone, N: Clone, D: Clone, IC: Clone, ICL: Clone> Clone for PropagationOp<'a, G, N, D, IC, ICL>

source§

fn clone(&self) -> PropagationOp<'a, G, N, D, IC, ICL>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, G, N, D, IC, ICL> LabellingOperator<G> for &PropagationOp<'a, G, N, D, IC, ICL>where N: NetlistBase, D: DelayBase + ConstraintBase + CellDelayModel<N> + CellConstraintModel<N>, IC: InterconnectDelayModel<N, Signal = D::Signal>, ICL: InterconnectLoadModel<N, Load = D::Load>, G: GraphBase + Data<NodeWeight = NodeData<N, D>, EdgeWeight = EdgeData<D>> + IntoEdgesDirected + DataMap, G::NodeId: Debug,

§

type NodeWeight = SyncNodeData<D>

Data type used for label of the nodes.
§

type WorkItem = WorkItem<<G as GraphBase>::NodeId>

Type used for representing a graph node. Read more
source§

fn op( &self, work_item: Self::WorkItem, local_view: LocalGraphView<&G, FullConflictDetection>, local_data: &mut Self::NodeWeight, worklist: impl WorklistPush<Self::WorkItem> ) -> Result<(), DataConflictErr<G::NodeId, G::EdgeId>>

Do the graph operation on the given active node. Read more

Auto Trait Implementations§

§

impl<'a, G, N, D, IC, ICL> RefUnwindSafe for PropagationOp<'a, G, N, D, IC, ICL>where D: RefUnwindSafe, G: RefUnwindSafe, IC: RefUnwindSafe, ICL: RefUnwindSafe, N: RefUnwindSafe,

§

impl<'a, G, N, D, IC, ICL> Send for PropagationOp<'a, G, N, D, IC, ICL>where D: Sync, G: Send, IC: Sync, ICL: Sync, N: Send + Sync,

§

impl<'a, G, N, D, IC, ICL> Sync for PropagationOp<'a, G, N, D, IC, ICL>where D: Sync, G: Sync, IC: Sync, ICL: Sync, N: Sync,

§

impl<'a, G, N, D, IC, ICL> Unpin for PropagationOp<'a, G, N, D, IC, ICL>where G: Unpin, N: Unpin,

§

impl<'a, G, N, D, IC, ICL> UnwindSafe for PropagationOp<'a, G, N, D, IC, ICL>where D: RefUnwindSafe, G: UnwindSafe, IC: RefUnwindSafe, ICL: RefUnwindSafe, N: UnwindSafe + RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.