Skip to content
Snippets Groups Projects
Commit 1f09757a authored by Oscar Gustafsson's avatar Oscar Gustafsson :bicyclist:
Browse files

Add cluster argument to Architecture Digraph

parent dd61ce7c
No related branches found
No related tags found
1 merge request!391Add cluster argument to Architecture Digraph
Pipeline #97512 passed
......@@ -736,13 +736,35 @@ of :class:`~b_asic.architecture.ProcessingElement`
raise KeyError(f"{proc} not in {re_from.entity_name}")
self._build_dicts()
def _digraph(self, branch_node=True) -> Digraph:
def _digraph(
self, branch_node=True, cluster=True, splines: str = "spline"
) -> Digraph:
dg = Digraph(node_attr={'shape': 'record'})
dg.attr(splines=splines)
# Add nodes for memories and PEs to graph
for i, mem in enumerate(self._memories):
dg.node(mem.entity_name, mem._struct_def())
for i, pe in enumerate(self._processing_elements):
dg.node(pe.entity_name, pe._struct_def())
if cluster:
# Add subgraphs
if len(self._memories):
with dg.subgraph(name='cluster_0') as c:
for i, mem in enumerate(self._memories):
c.node(mem.entity_name, mem._struct_def())
label = "Memory" if len(self._memories) <= 1 else "Memories"
c.attr(label=label)
with dg.subgraph(name='cluster_1') as c:
for i, pe in enumerate(self._processing_elements):
c.node(pe.entity_name, pe._struct_def())
label = (
"Processing element"
if len(self._processing_elements) <= 1
else "Processing elements"
)
c.attr(label=label)
else:
for i, mem in enumerate(self._memories):
dg.node(mem.entity_name, mem._struct_def())
for i, pe in enumerate(self._processing_elements):
dg.node(pe.entity_name, pe._struct_def())
# Create list of interconnects
edges: DefaultDict[str, Set[Tuple[str, str]]] = defaultdict(set)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment