pub struct VehicleMacro {
pub die_um: (f64, f64),
pub hold_margin_ns: f64,
pub grid: MacroGrid,
}Expand description
A macro hardened to sit INSIDE a shuttle vehicle’s wrapper — the Caravel user macro.
Its die is ours to choose, but its power nets and routing ceiling are the vehicle’s: it takes the harness’s
supplies through power pins, and its routing ceiling follows from how the wrapper’s grid feeds it
(MacroGrid).
Fields§
§die_um: (f64, f64)§hold_margin_ns: f64Extra hold slack the macro closes every path to. The paths the wrapper would see violated start at a
harness input port and end at a flop in here; the wrapper is a cell-free routing shell (cells in it need
taps and fill, which broke its LVS: 0 -> 7,755 with input buffering), so they are closed on THIS side —
by vehicle_macro_sdc, which holds the macro’s ports to the harness’s real minimum input delays.
dram_user_project was hardened before that SDC existed and closed its 97 such paths (the pure shell
ran hold -0.57 ns over them) with a 0.7 ns margin here; a margin that size applies to every internal
path as well, which a macro with tens of thousands of flops cannot afford.
grid: MacroGridTrait Implementations§
Source§impl Clone for VehicleMacro
impl Clone for VehicleMacro
Source§fn clone(&self) -> VehicleMacro
fn clone(&self) -> VehicleMacro
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VehicleMacro
impl Debug for VehicleMacro
Source§impl PartialEq for VehicleMacro
impl PartialEq for VehicleMacro
impl Copy for VehicleMacro
impl StructuralPartialEq for VehicleMacro
Auto Trait Implementations§
impl Freeze for VehicleMacro
impl RefUnwindSafe for VehicleMacro
impl Send for VehicleMacro
impl Sync for VehicleMacro
impl Unpin for VehicleMacro
impl UnsafeUnpin for VehicleMacro
impl UnwindSafe for VehicleMacro
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.