pub struct DriverEntry {
pub source: StateCellId,
pub strength: DriveStrengthPair,
pub forced: bool,
}Expand description
One driver’s own private contribution slot plus its strength (ST-034):
source is a StateCellId this driver alone writes to (never shared
read-modify-write storage with any other driver or with resolved).
Review fix (Task 14 r2, blocking finding 3) adds forced. Before this
fix, force_driver modeled force purely via Supply/Supply
strength, relying on strength-grouping (the “every other kind” branch of
[combine_bit]) to make it win outright by being the sole top-strength
member. That assumption broke the moment r1 changed wand/triand/
wor/trior resolution to skip strength-grouping entirely (matching real
LRM/iverilog behavior for the ordinary multi-driver case) — on those net
kinds a Supply-strength forced entry is just one more live contributor
in the wired-AND/OR fold and can be outvoted. forced is an explicit,
net-kind-independent tag: resolve_net_step short-circuits to a forced
entry’s own value directly (see its doc comment), the way force/
release (ST-055) are specified to override every other driver outright
regardless of net kind or strength. Ordinary drivers always set this
false; only force_driver’s own synthetic entry ever sets it true.
Fields§
§source: StateCellId§strength: DriveStrengthPair§forced: boolTrait Implementations§
Source§impl Clone for DriverEntry
impl Clone for DriverEntry
impl Copy for DriverEntry
Source§impl Debug for DriverEntry
impl Debug for DriverEntry
impl Eq for DriverEntry
Source§impl PartialEq for DriverEntry
impl PartialEq for DriverEntry
impl StructuralPartialEq for DriverEntry
Auto Trait Implementations§
impl Freeze for DriverEntry
impl RefUnwindSafe for DriverEntry
impl Send for DriverEntry
impl Sync for DriverEntry
impl Unpin for DriverEntry
impl UnsafeUnpin for DriverEntry
impl UnwindSafe for DriverEntry
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.