pub enum MemBackend {
Registers,
Bram,
ConfigBram,
}Expand description
The MEMORY BACKEND for the config-driven engine’s on-chip memories — a first-class, selectable choice of
substrate. The whole-program engine holds two kinds of memory: the STATE PLANE (the shared heap + the
recursion sfile frame stack) and the CONFIG memories (the UART-streamed program image: blk_*, cell_*,
live-ins, writes, constants). Each can live in LUT flip-flops or in block RAM.
Variants§
Registers
Everything in LUT flip-flops: combinational reads, smallest latency, but the capacity is bounded by the
FF budget (the WPE_SYNTH_* profile). The open-flow-safe default for tiny programs.
Bram
The STATE PLANE (heap + sfile) in BLOCK RAM (registered reads, 1-cycle latency absorbed by the FSM’s
wait-states); config stays in flip-flops. Moves the FF-heavy state off flip-flops so a bigger program
both HOLDS and ROUTES on the open flow — the DEPLOYED silicon backend (wpe_soc_big.bit, proven Board B).
ConfigBram
State plane AND the config image in BLOCK RAM — the large-capacity backend that lets the whole 158-block transformer fit one chip’s BRAM. Requires registered CONFIG reads (block/cell fetch wait-states) — the interpret-FSM extension that is the remaining build; the BRAM budget already fits (4 Mb of 4.9 Mb).
Trait Implementations§
Source§impl Clone for MemBackend
impl Clone for MemBackend
Source§fn clone(&self) -> MemBackend
fn clone(&self) -> MemBackend
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MemBackend
impl Debug for MemBackend
Source§impl PartialEq for MemBackend
impl PartialEq for MemBackend
impl Copy for MemBackend
impl Eq for MemBackend
impl StructuralPartialEq for MemBackend
Auto Trait Implementations§
impl Freeze for MemBackend
impl RefUnwindSafe for MemBackend
impl Send for MemBackend
impl Sync for MemBackend
impl Unpin for MemBackend
impl UnsafeUnpin for MemBackend
impl UnwindSafe for MemBackend
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.