pub struct SramMacro {
pub name: &'static str,
pub words: u32,
pub bits: u32,
pub width_um: f64,
pub height_um: f64,
pub ports: &'static str,
pub corners: &'static [&'static str],
}Expand description
A standard-cell SRAM macro the PDK actually ships, with the facts that decide whether a design can use it.
corners is not decoration. Of sky130’s four macros, three ship only TT_1p8V_25C, and
the signoff recorder gates on multi_corner — so a design built from those three cannot
honestly claim a multi-corner signoff no matter how clean its logic is. That fact belongs next
to the macro, not in someone’s memory.
Fields§
§name: &'static str§words: u32Addressable words.
bits: u32Bits per word — the macro’s data width. A design whose arrays are this wide needs no width-banking, which is most of what makes a memory plan cheap or expensive.
width_um: f64Physical size in micrometres, from the macro’s own LEF SIZE line.
height_um: f64§ports: &'static strRead/write ports, e.g. “1rw1r”. An array read every cycle against writes in the same block needs a dual-port macro; a single-port one cannot express it at any speed.
corners: &'static [&'static str]Liberty corners shipped. Fewer than a full set caps what the design can claim.
Implementations§
Trait Implementations§
impl StructuralPartialEq for SramMacro
Auto Trait Implementations§
impl Freeze for SramMacro
impl RefUnwindSafe for SramMacro
impl Send for SramMacro
impl Sync for SramMacro
impl Unpin for SramMacro
impl UnsafeUnpin for SramMacro
impl UnwindSafe for SramMacro
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.