Skip to main content

EngineConfig

Struct EngineConfig 

Source
pub struct EngineConfig {
Show 14 fields pub ir: PropertyIr, pub kind: AssertKind, pub n_clocks: usize, pub leaf_reads: Vec<Vec<LocalVarId>>, pub leaf_writes: Vec<Option<LocalVarId>>, pub activated: bool, pub captured: Vec<LocalVarId>, pub disable_mixed: bool, pub history_depth: usize, pub hist_clocks: usize, pub future: bool, pub future_clock: u32, pub live_history: bool, pub tick_history: bool,
}
Expand description

Everything the engine needs to know about one assertion.

Fields§

§ir: PropertyIr§kind: AssertKind§n_clocks: usize

The number of distinct clocks of the assertion.

§leaf_reads: Vec<Vec<LocalVarId>>

Per leaf, the local variables its expression reads (each must be assigned when the leaf is evaluated, 16.10).

§leaf_writes: Vec<Option<LocalVarId>>

Per leaf, the local variable a PLAIN assignment match item (v = e) writes: the kernel is handed its frame slot but the variable need not be assigned yet (the item is what assigns it).

§activated: bool

A procedural concurrent assertion (16.14.6) instead of a static one: its attempts start only for instances queued with Engine::activate, not at every tick.

§captured: Vec<LocalVarId>

The automaton local-variable slot of each value an instance captures (Engine::activate’s values, same order). Assigned when the attempt starts, so the leaves that read the captured items find them.

§disable_mixed: bool

The disable iff condition reads captured values AND signals (16.12, 16.14.6.1). The condition is not a constant of the attempt, nor a pure signal: the engine evaluates it against the live signals once per distinct tuple of captured values (Host::live_with) and each attempt reads the record of its own tuple.

§history_depth: usize

How many previous clock ticks’ rows a position carries behind its own (0: just the row). The sampled value functions of an assertion read them (16.9.3): $rose/$fell/$stable/$changed the previous tick’s, $past(x, n) the n-th previous. A position’s row handed to Host::leaf is then (1 + history_depth) * row_len entries long, the tick’s own sampled row first, then the row of the previous tick, then the one before it, and so on. Before the first tick the previous rows are the initial row (16.5.1: the default sampled value is the initial one). Only a single-clock assertion has such a history: with several clocks the positions are the union of the clocks’ ticks, not any one clock’s.

§hist_clocks: usize

How many clocks past the assertion’s own EngineConfig::n_clocks the host also tells the ticks of (Host::clock_ticked is asked for clocks n_clocks..n_clocks + hist_clocks too). They have a history block in a position’s row like any clock but start no attempt and make no position: they are the clocking events ($past(x, 1, , @(posedge fclk))), gated events ($past(x, 2, en)) and global clock ($rose_gclk(x)) of the sampled value functions that are not the clock of their own leaf (16.9.3, 16.9.4).

§future: bool

The property calls a global clocking future sampled value function (16.9.4): a position’s row carries, after its history, the sampled row of the NEXT tick of EngineConfig::future_clock (the global clock) strictly after the position’s time step. A position is therefore held back until that tick arrives, so every verdict, and the action it runs, comes at the global clock tick that follows the attempt’s end, as the LRM requires; the attempt’s interval is unchanged.

§future_clock: u32

With EngineConfig::future: the global clock, one of the assertion’s clocks or one of its history-only ones.

§live_history: bool

A live leaf (the disable iff condition, an asynchronous abort condition) reads sampled values: Host::live is handed the position-shaped row of the current time step, the step’s sampled row followed by every clock’s history (16.12, 16.9.3: $sampled(x) and $rose(x, @ev) in a disable condition are meaningful since the condition itself is not sampled).

§tick_history: bool

A clocking event’s iff condition calls a sampled value function (16.9.3: legal when explicitly clocked): Host::clock_ticked is handed the position-shaped row of the step (Engine::tick_row), the step’s sampled row followed by every clock’s history as of before this step’s ticks, instead of the sampled row alone.

Trait Implementations§

Source§

impl Clone for EngineConfig

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V