pub enum WFault {
None,
RegDecodeBits(u32),
RegZeroAbove(u16),
HeapDecodeBits(u32),
HeapZeroAbove(usize),
VDecodeBits(u32),
HeapStoreLatency(u32),
}Expand description
A hardware fault model injected into the golden interpreter. Running a program through the model under each
fault and comparing the result against a value observed on silicon localizes a synthesis/place-and-route
divergence to one state memory + one address bit in pure Rust: eval is the ground truth, so a fault whose
result equals the observed value characterizes the hardware defect.
Variants§
None
No fault — byte-identical to eval_wprog_config_counted_heap_preloaded.
RegDecodeBits(u32)
Register file file address decode is bits wide: logical index r reads/writes physical
r & ((1<<bits)-1) (both ports share the decode, so two logical registers alias onto one cell).
RegZeroAbove(u16)
Register file high half is dead: a read of r >= thresh yields 0.
HeapDecodeBits(u32)
Heap load/store address decode is bits wide: heap[addr] accesses physical addr & ((1<<bits)-1).
The allocator’s length counter is a register and stays exact; only the RAM addressing folds.
HeapZeroAbove(usize)
Heap high half is dead: a load from addr >= thresh yields 0.
VDecodeBits(u32)
Cell-value plane v address decode is bits wide: an earlier-cell reference ci reads physical
ci & ((1<<bits)-1).
HeapStoreLatency(u32)
A heap[X] = v (kind-4) store becomes visible to heap reads only after steps further block-steps,
modelling a registered read/write pipeline. Allocations (bump-pointer) commit immediately so addressing
stays valid; only explicit stores lag.
Trait Implementations§
impl Copy for WFault
impl Eq for WFault
impl StructuralPartialEq for WFault
Auto Trait Implementations§
impl Freeze for WFault
impl RefUnwindSafe for WFault
impl Send for WFault
impl Sync for WFault
impl Unpin for WFault
impl UnsafeUnpin for WFault
impl UnwindSafe for WFault
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.