Skip to main content

OffchipMemory

Struct OffchipMemory 

Source
pub struct OffchipMemory {
    pub edge: PsramEdge,
    pub heap: Option<PsramCache>,
    pub frames: Option<PsramCache>,
    pub cells: Option<PsramCache>,
}
Expand description

The engine memories behind one PSRAM edge, each with its own cache; None keeps a memory on the die.

Fields§

§edge: PsramEdge§heap: Option<PsramCache>§frames: Option<PsramCache>§cells: Option<PsramCache>

The config image, as three lanes of one word per cell — {code, kind}, {op1, op0}, {op3, op2} — each behind a cache of this geometry.

Implementations§

Source§

impl OffchipMemory

Source

pub fn roles(&self) -> Vec<ArrayRole>

The floorplan roles this engine takes off the die.

Source

pub fn part_words(&self) -> u64

The part’s words within the edge’s word address.

Source

pub fn regions(&self, caps: [usize; 10]) -> Vec<Region>

Each off-chip memory’s region for the cap profile caps, largest first so every region is aligned to its own size: the three cell lanes (MAXCELL words each), the frame stack (DEPTH x NREG) and the heap (HEAP), each rounded up to a power of two. An index past its memory’s cap wraps inside its own region and never reaches another memory’s.

Source

pub fn check( &self, caps: [usize; 10], backend: MemBackend, ) -> Result<(), OffchipUnplaceable>

Refuse a combination the engine cannot build: nothing off-chip, the config image off-chip without the registered config port, or regions the part cannot hold.

Source

pub fn loading_stall_cycles(&self) -> u64

The longest stall the loader can meet while bytes are still arriving. Until it takes the go byte the loader touches the part only to write — one config-image field per four bytes, one preloaded heap word per eight — and the walk fetches no cells, so the worst is one write miss in the heap or cell caches that evicts a dirty line. Stalls in the run are not bounded by the UART: the host sends nothing until the result frame is back.

Source

pub fn check_uart(&self, clks_per_bit: u64) -> Result<(), OffchipUnplaceable>

Refuse a UART that could lose a byte. The receiver holds one byte while the FSM is stalled, so a byte is lost only if another completes before the stall ends; requiring every loading stall to be shorter than a byte means no byte ever waits at all. The first access to the part comes no sooner than wire_bytes_before_first_part_access bytes after reset, and the edge must have initialized the part by then, or that access would wait out the power-up too.

Source

pub fn min_clks_per_bit(&self) -> u64

The fastest UART (fewest system cycles per bit) check_uart accepts.

Trait Implementations§

Source§

impl Clone for OffchipMemory

Source§

fn clone(&self) -> OffchipMemory

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OffchipMemory

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for OffchipMemory

Source§

fn eq(&self, other: &OffchipMemory) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for OffchipMemory

Source§

impl Eq for OffchipMemory

Source§

impl StructuralPartialEq for OffchipMemory

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,