Struct libreda_db::flat_view::FlatView [−][src]
pub struct FlatView<'a, N> { /* fields omitted */ }Expand description
Wrapper around a netlist which provides an on-the-fly flat view of a certain cell. The presented view is flattened until leaf cells. Internally this works by using component IDs that are actually paths through the hierarchy.
Names are constructed by creating concatenating the names of the path elements with a separator string in between.
Example
use libreda_db::prelude::{Chip, HierarchyBase, HierarchyEdit, FlatView};
// Create a simple hierarchy.
let mut chip = Chip::new();
let top = chip.create_cell("TOP".into());
let intermediate = chip.create_cell("INTERMEDIATE".into());
let leaf1 = chip.create_cell("LEAF1".into());
let leaf2 = chip.create_cell("LEAF2".into());
// The intermediate cell contains two instances of leaf1 and one instance of leaf2.
chip.create_cell_instance(&intermediate, &leaf1, Some("leaf1_inst1".into()));
chip.create_cell_instance(&intermediate, &leaf1, Some("leaf1_inst2".into()));
chip.create_cell_instance(&intermediate, &leaf2, Some("leaf2_inst1".into()));
// Create two instances of the intermediate cell in the TOP cell.
chip.create_cell_instance(&top, &intermediate, Some("intermediate1".into()));
chip.create_cell_instance(&top, &intermediate, Some("intermediate2".into()));
// Create the flat view.
let flat = FlatView::new_with_separator(&chip, ":".to_string());
let flat_top = flat.cell_by_name("TOP").expect("TOP not found in flat view.");
// There are 2 instances of the intermediate cell which contains 3 leaf cells,
// so now the flattened top should contain 2*3 instances.
assert_eq!(flat.num_child_instances(&flat_top), 2*3);
// Get a cell instance with the path string.
let inst = flat.cell_instance_by_name(&flat_top, "intermediate1:leaf1_inst1").expect("Instance not found.");
// Instance names are assembled from the path.
assert_eq!(flat.cell_instance_name(&inst).unwrap().as_str(), "intermediate1:leaf1_inst1");
// There should be 4 instances of the LEAF1 cell now.
assert_eq!(flat.each_cell_reference(&leaf1).count(), 2*2);Implementations
Trait Implementations
type CellInstId = Vec<N::CellInstId>
type CellInstId = Vec<N::CellInstId>
Cell instance identifier type.
Find a cell by its name.
Return the cell with the given name. Returns None if the cell does not exist. Read more
fn cell_instance_by_name(
&self,
parent_cell: &Self::CellId,
name: &str
) -> Option<Self::CellInstId>
fn cell_instance_by_name(
&self,
parent_cell: &Self::CellId,
name: &str
) -> Option<Self::CellInstId>
Find a cell instance by its name.
Returns None if the name does not exist. Read more
Get the name of the cell instance.
Get the ID of the parent cell of this instance.
Get the ID of the template cell of this instance.
Call a function on each cell of the netlist.
fn for_each_cell_instance<F>(&self, cell: &Self::CellId, f: F) where
F: FnMut(Self::CellInstId),
fn for_each_cell_instance<F>(&self, cell: &Self::CellId, f: F) where
F: FnMut(Self::CellInstId),
Call a function on each instance in this cell.
Call a function for each cell that is a child of this cell.
Call a function for each cell that directly depends on cell.
fn for_each_cell_reference<F>(&self, cell: &Self::CellId, f: F) where
F: FnMut(Self::CellInstId),
fn for_each_cell_reference<F>(&self, cell: &Self::CellId, f: F) where
F: FnMut(Self::CellInstId),
Iterate over all instances of this cell, i.e. instances that use this cell as
a template. Read more
Get the number of cell instances inside the cell.
Get a Vec of all cell IDs in this netlist.
Get a Vec of the IDs of all instances in this cell.
fn each_cell_instance(
&self,
cell: &Self::CellId
) -> Box<dyn Iterator<Item = Self::CellInstId>>
fn each_cell_instance(
&self,
cell: &Self::CellId
) -> Box<dyn Iterator<Item = Self::CellInstId>>
Iterate over all instances in a cell.
Get a Vec of each cell that is a child of this cell.
Iterate over all cells that are instantiated in this cell.
Count all cells that are dependencies of cell.
Get a Vec of each cell that directly depends on cell.
Iterate over each cell that directly depends on cell.
Count all cells that are directly dependent on cell, i.e. contain an instance of cell.
Get a Vec with all cell instances referencing this cell.
fn each_cell_reference(
&self,
cell: &Self::CellId
) -> Box<dyn Iterator<Item = Self::CellInstId>>
fn each_cell_reference(
&self,
cell: &Self::CellId
) -> Box<dyn Iterator<Item = Self::CellInstId>>
Iterate over all instances of this cell, i.e. instances that use this cell as
a template. Read more
Count all reference to the cell template cell.
Get a property of the top-level chip data structure..
fn get_cell_property(
&self,
cell: &Self::CellId,
key: &Self::NameType
) -> Option<PropertyValue>
fn get_cell_property(
&self,
cell: &Self::CellId,
key: &Self::NameType
) -> Option<PropertyValue>
Get a property of a cell.
fn get_cell_instance_property(
&self,
inst: &Self::CellInstId,
key: &Self::NameType
) -> Option<PropertyValue>
fn get_cell_instance_property(
&self,
inst: &Self::CellInstId,
key: &Self::NameType
) -> Option<PropertyValue>
Get a property of a cell instance.
Auto Trait Implementations
impl<'a, N> RefUnwindSafe for FlatView<'a, N> where
N: RefUnwindSafe,
impl<'a, N> UnwindSafe for FlatView<'a, N> where
N: RefUnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Get a cell instance object by its ID.