pub struct DramTimings {}Expand description
LPDDR5X-class timing parameters, in CONTROLLER CLOCK CYCLES, plus geometry.
Values are engineering-realistic for an LPDDR5X-6400-class part driven by a
controller clock where one RD/WR burst (BL16) occupies data_cycles on the bus —
the table is DATA for the memory architect to correct, and every measurement in
this module re-derives from it.
Fields§
§banks: u32§row_bytes: u64Row (page) size in bytes.
burst_bytes: u64Bytes transferred by one RD/WR burst.
data_cycles: u64Cycles one burst occupies the data bus.
trcd: u64ACT → RD/WR to the same bank.
trp: u64PRE → ACT to the same bank.
tras: u64ACT → PRE minimum to the same bank.
trc: u64ACT → ACT to the same bank.
trrd: u64ACT → ACT to DIFFERENT banks.
tfaw: u64Rolling window in which at most four ACTs may issue.
tccd: u64CAS → CAS (any bank) — data-bus burst spacing.
trfc_pb: u64Per-bank refresh (REFpb) duration: REFpb → next ACT to that bank.
trefi_pb: u64Per-bank refresh interval: every bank needs one REFpb per window this long.
twr: u64Write recovery: last WRITE burst end → PRE on that bank.
tturn: u64Data-bus turnaround bubble when switching read↔write direction.
hot: boolAbove 85 °C the refresh interval halves.
Implementations§
Source§impl DramTimings
impl DramTimings
Sourcepub fn lpddr5x() -> Self
pub fn lpddr5x() -> Self
An LPDDR5X-6400-class nominal-corner timing table (16 banks, 2 KB rows, BL16 ≈ 32 B
bursts). The t* counts below are JEDEC LPDDR5X typical timings for that speed grade,
expressed in the controller’s tick unit — a representative nominal corner, NOT a datasheet
pin for a specific die. Validate them against the exact part’s datasheet before production.
Sourcepub fn ddr2_micron() -> Self
pub fn ddr2_micron() -> Self
Micron MT47H64M16 (1 Gb, x16, 8 banks) at DDR2-800 (-25E speed grade, tCK = 2.5 ns), JEDEC 5-5-5 timings expressed in DDR-clock cycles. This is the on-board DRAM of the Nexys A7-100T and the timing FLOOR the ComputeDRAM streams deliberately violate. NOTE: DDR2 has all-bank AUTO-REFRESH only (no per-bank REFpb); the RefPb schema here models refresh as per-bank for schedule/checker compatibility — flagged, and irrelevant to the ACT-PRE-ACT compute path this campaign exercises.
pub fn trefi_effective(&self) -> u64
Trait Implementations§
Source§impl Clone for DramTimings
impl Clone for DramTimings
Source§fn clone(&self) -> DramTimings
fn clone(&self) -> DramTimings
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for DramTimings
impl RefUnwindSafe for DramTimings
impl Send for DramTimings
impl Sync for DramTimings
impl Unpin for DramTimings
impl UnsafeUnpin for DramTimings
impl UnwindSafe for DramTimings
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.