pub enum Op {
Show 13 variants
Nop,
Fill,
Check,
HostToMem,
MemToHost,
HostToMemPacked,
MemToHostPacked,
Inject,
EccCounts,
EngineConfig,
EngineTable,
EngineRun,
StoreRead,
}Expand description
The bring-up core’s commands.
Variants§
Nop
Fill
Every channel in mask ARG0 writes ARG2[31:0] lines from line ARG1, line L the pattern seeded ARG2[63:32].
Check
Every channel in the mask reads those lines back; RESULT0 the lines that differ.
HostToMem
ARG2[31:0] host lines from host line ARG0 into channel ARG1[63:56] at line ARG1[26:0], zero-extended.
MemToHost
The reverse, a channel line truncated to a host line; complete when every host write burst is acknowledged.
HostToMemPacked
ARG2[31:0] channel lines of the channel’s full width into channel ARG1[63:56] at line ARG1[26:0], read packed end to end from host line ARG0 on: ceil(lines × line bits / 512) host lines, the bytes past the last channel line unused.
MemToHostPacked
The reverse: the channel lines packed end to end into host lines from ARG0, the last host line zero past them; complete when every host write burst is acknowledged.
Inject
On SECDED lines: the next ARG2[31:0] lines written to each channel in mask ARG0 have bus bits ARG1[9:0] and ARG1[25:16] flipped after they are coded, one bit when the two are equal; complete at once.
EccCounts
On SECDED lines: RESULT0 = {words found uncorrectable, words corrected} of channel ARG0[7:0] since reset, each counted modulo 2^32, so a host’s difference of two reads is exact; complete at once.
EngineConfig
With the engine: its configuration a program keeps — ARG0[15:0] the token-rows of a step, ARG0[19:16] {per-block scaling, two words, an int8 cache, an f16 state} — and the card port’s map: ARG1[31:0] the granule space’s first logical line, ARG2[26:0] the channel line it starts at, ARG2[60:56] log2 of a granule’s lines; complete at once.
EngineTable
With the engine: ARG2[31:0] host lines from host line ARG0 into the engine’s table ARG1[34:32] from entry
ARG1[31:0] on, one entry a line (crate::spatial::decode_engine::rtl::engine::Tables; table 6 the store).
EngineRun
With the engine: a step, the jobs from word ARG0[31:0] to word ARG1[31:0], the card port holding the channels; complete when the engine is idle again, RESULT0 = {the word the sequencer reached [63:32], the card port’s fault [1], the engine’s fault [0]}.
StoreRead
With the engine: ARG2[31:0] beats of its store from beat ARG1[31:0] into host lines from ARG0; complete when every host write burst is acknowledged.
Implementations§
Trait Implementations§
impl Copy for Op
impl Eq for Op
impl StructuralPartialEq for Op
Auto Trait Implementations§
impl Freeze for Op
impl RefUnwindSafe for Op
impl Send for Op
impl Sync for Op
impl Unpin for Op
impl UnsafeUnpin for Op
impl UnwindSafe for Op
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.