pub struct GainSchedule {
pub scale_log2: i32,
pub out_descale_log2: i32,
pub mul_vref_v: f64,
pub quantized: AnalogNetlist,
pub per_net_scale_log2: Vec<i32>,
}Expand description
The per-program gain schedule: one block scale for every net, the exact ADC descale, the REALIZABLE multiplier reference, and the weight-quantized twin of the netlist (weights snapped to the target’s unit elements — what the silicon actually programs).
Fields§
§scale_log2: i32The block scale exponent: volt = 2^scale_log2 · math on every net.
out_descale_log2: i32The output descale exponent (math = 2^out_descale_log2 · volt); always -scale_log2.
mul_vref_v: f64The multiplier normalization reference in volts. When the graph carries a Mul, this is
a member of the target’s mul_vref_options_v equal to the block scale — chosen FROM the
realizable set, never approximated into it.
quantized: AnalogNetlistThe netlist with every programmed weight snapped to the target’s unit-element grid —
the configuration the fabric actually realizes (PHYSICAL weights, which under a
per-net schedule include the exact power-of-two rescale between operand and cell
scales). The snap error is a budget term (ErrorSource::WeightQuant), never silently
absorbed.
per_net_scale_log2: Vec<i32>Per-cell scale exponents (volt_i = 2^{per_net_scale_log2[i]} · math_i). Uniform
schedules carry scale_log2 everywhere; a per-net schedule (O4) lets internal nets
diverge while inputs and the output stay on scale_log2, so the converter grid is
untouched. The independent range checker judges per-cell scales natively.
Implementations§
Source§impl GainSchedule
impl GainSchedule
Sourcepub fn realized_math_cells(&self) -> Vec<AnalogCell>
pub fn realized_math_cells(&self) -> Vec<AnalogCell>
The REALIZED math dataflow: each physical weight mapped back to the math domain by the
exact power-of-two rescale (w_math_realized = w_phys · 2^{e_operand − e_cell}).
Under a uniform schedule this is the quantized netlist verbatim. Certificates and
budgets judge THIS — the dataflow the silicon actually computes.
Trait Implementations§
Source§impl Clone for GainSchedule
impl Clone for GainSchedule
Source§fn clone(&self) -> GainSchedule
fn clone(&self) -> GainSchedule
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GainSchedule
impl Debug for GainSchedule
Source§impl PartialEq for GainSchedule
impl PartialEq for GainSchedule
impl StructuralPartialEq for GainSchedule
Auto Trait Implementations§
impl Freeze for GainSchedule
impl RefUnwindSafe for GainSchedule
impl Send for GainSchedule
impl Sync for GainSchedule
impl Unpin for GainSchedule
impl UnsafeUnpin for GainSchedule
impl UnwindSafe for GainSchedule
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.