pub struct AnalogTarget {Show 19 fields
pub name: &'static str,
pub rows: usize,
pub cols: usize,
pub mul_tiles: usize,
pub rails_v: (Volts, Volts),
pub headroom: f64,
pub cells: BTreeSet<AnalogCellKind>,
pub sum_fanin: usize,
pub weight_bits: u8,
pub weight_range: (f64, f64),
pub mul_vref_options_v: Vec<Volts>,
pub scale_log2_range: (i32, i32),
pub dac_bits: u8,
pub adc_bits: u8,
pub n_dac: usize,
pub n_adc: usize,
pub integrator_k_range: (Hertz, Hertz),
pub settle_ns: Nanoseconds,
pub provenance: &'static str,
}Expand description
A described analog fabric. One lowering retargets across shapes by varying this descriptor;
each demand is either realizable on it or refused with a typed AnaUnplaceable.
Fields§
§name: &'static strHuman name (carried into refusal errors).
rows: usizeDescribed tile-array dimensions (physical tile SITES; the linear/multiplier mix below says what populates them).
cols: usize§mul_tiles: usizeMultiplier tiles among the sites — the scarce resource (DSP-block discipline).
rails_v: (Volts, Volts)Supply rails in volts, (low, high). Signals are differential around mid-rail; the
usable signed span is ±headroom·(high−low)/2.
headroom: f64Usable fraction of the differential half-span (clipping guard band).
cells: BTreeSet<AnalogCellKind>The tile kinds this target provides.
sum_fanin: usizeHard per-tile summing fan-in (a physical resource: node loading, settling, noise). The compiler trees larger sums.
weight_bits: u8Weight resolution: sign + magnitude from matched unit elements. A programmed weight is
quantized to weight_lsb steps; the snap error is a budget term.
weight_range: (f64, f64)Realizable programmed weight magnitudes, (min, max) — the unit-element range.
mul_vref_options_v: Vec<Volts>The DISCRETE realizable multiplier normalization references in volts. A Mul-bearing
graph’s block scale must land on a member (or refuse) — see the module doc.
scale_log2_range: (i32, i32)The block-scale exponent range the fabric’s references/biasing support
(volts-per-math-unit = 2^e, e ∈ [min, max]).
dac_bits: u8DAC / ADC converter resolutions in bits.
adc_bits: u8§n_dac: usizeDAC input / ADC output channel counts.
n_adc: usize§integrator_k_range: (Hertz, Hertz)Realizable integrator rates gm/C in 1/s, (min, max).
settle_ns: NanosecondsPer-tick DC settling budget in nanoseconds (linear tile; the multiplier and longer routing legs get their own figures with the characterization phases).
provenance: &'static strSourcing statement: which figures are cited physical facts and which are modeled-design
parameters. Pinned verbatim by analog_target_lock — changing sourcing is a conscious edit.
Implementations§
Source§impl AnalogTarget
impl AnalogTarget
Sourcepub fn ideal() -> AnalogTarget
pub fn ideal() -> AnalogTarget
IDEAL — the abstract superset preset: every tile kind, generous converters and ranges, no non-ideality. Even the ideal preset keeps the PHYSICAL DISCIPLINES finite (fan-in, quantized weights, discrete references) so every certification exercises the real compiler obligations. Makes NO physical claims.
Sourcepub fn sky130_fpaa() -> AnalogTarget
pub fn sky130_fpaa() -> AnalogTarget
SKY130-FPAA — a modeled FPAA on the open SkyWater SKY130 process, in the deliberately boring V1 shape: a 16×16 site array with a scarce multiplier population, differential linear tiles with 8-bit unit-element weights and fan-in 8, modest converters, and ~8 effective bits as the accuracy ambition.
The rail is the ONE sourced physical figure: SKY130’s nominal digital-domain supply is 1.8 V (SkyWater SKY130 PDK, sky130_fd_pr device models; skywater-pdk.readthedocs.io). Everything else is OUR modeled fabric’s design parameters — design choices, not silicon measurements. The non-ideality physics (mismatch sigmas, parasitics, noise floor) ships in its own phase with cited constants; until then this preset carries none rather than invented ones.
Sourcepub fn half_span_v(&self) -> f64
pub fn half_span_v(&self) -> f64
The usable differential half-span in volts (headroom · (rail_hi − rail_lo) / 2).
Sourcepub fn weight_lsb(&self) -> f64
pub fn weight_lsb(&self) -> f64
The weight quantum: the smallest programmed-weight step the unit elements realize.
Sign+magnitude with weight_bits total ⇒ 2^(weight_bits−1) − 1 magnitude steps over
weight_range.1.
Sourcepub fn provides(&self, cap: AnalogCapability) -> bool
pub fn provides(&self, cap: AnalogCapability) -> bool
Whether this target provides a discrete capability.
Sourcepub fn require_gain_ratio(&self, needed: f64) -> Result<(), AnaUnplaceable>
pub fn require_gain_ratio(&self, needed: f64) -> Result<(), AnaUnplaceable>
Gate a required programmed weight/gain magnitude against the realizable range.
Sourcepub fn require_integrator_rate(
&self,
needed_per_s: f64,
) -> Result<(), AnaUnplaceable>
pub fn require_integrator_rate( &self, needed_per_s: f64, ) -> Result<(), AnaUnplaceable>
Gate a required integrator rate (gm/C, 1/s) against the realizable range.
Sourcepub fn require_mul_reference(&self, needed_v: f64) -> Result<(), AnaUnplaceable>
pub fn require_mul_reference(&self, needed_v: f64) -> Result<(), AnaUnplaceable>
Gate a required multiplier reference voltage against the discrete realizable set (exact match — the schedule chooses FROM this set, it does not approximate into it).
Trait Implementations§
Source§impl Clone for AnalogTarget
impl Clone for AnalogTarget
Source§fn clone(&self) -> AnalogTarget
fn clone(&self) -> AnalogTarget
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AnalogTarget
impl Debug for AnalogTarget
Source§impl PartialEq for AnalogTarget
impl PartialEq for AnalogTarget
impl StructuralPartialEq for AnalogTarget
Auto Trait Implementations§
impl Freeze for AnalogTarget
impl RefUnwindSafe for AnalogTarget
impl Send for AnalogTarget
impl Sync for AnalogTarget
impl Unpin for AnalogTarget
impl UnsafeUnpin for AnalogTarget
impl UnwindSafe for AnalogTarget
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.