Skip to content
Snippets Groups Projects

Use HTML tables for architecture blocks

Merged Hugo Winbladh requested to merge 252-use-html-tables-for-architecture-blocks into master
2 files
+ 41
10
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 38
8
@@ -172,7 +172,11 @@ class Resource(HardwareBlock):
def _digraph(self) -> Digraph:
dg = Digraph(node_attr={'shape': 'box'})
dg.node(
self.entity_name, self._struct_def(), style='filled', fillcolor=self._color
self.entity_name,
self._struct_def(),
style='filled',
fillcolor=self._color,
fontname='Times New Roman',
)
return dg
@@ -193,11 +197,22 @@ class Resource(HardwareBlock):
ret = '<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">'
table_width = max(len(inputs), len(outputs), 1)
if inputs:
in_strs = [f'<TD COLSPAN="{int(table_width/len(inputs))}" PORT="{in_str}">{in_str}</TD>' for in_str in inputs]
in_strs = [
f'<TD COLSPAN="{int(table_width/len(inputs))}"'
f' PORT="{in_str}">{in_str}</TD>'
for in_str in inputs
]
ret += f"<TR>{''.join(in_strs)}</TR>"
ret += f'<TR><TD COLSPAN="{table_width}">{self.entity_name}{self._info()}</TD></TR>'
ret += (
'<TR><TD'
f' COLSPAN="{table_width}">{self.entity_name}{self._info()}</TD></TR>'
)
if outputs:
out_strs = [f'<TD COLSPAN="{int(table_width/len(outputs))}" PORT="{out_str}">{out_str}</TD>' for out_str in outputs]
out_strs = [
f'<TD COLSPAN="{int(table_width/len(outputs))}"'
f' PORT="{out_str}">{out_str}</TD>'
for out_str in outputs
]
ret += f"<TR>{''.join(out_strs)}</TR>"
return ret + "</TABLE>>"
@@ -960,13 +975,28 @@ of :class:`~b_asic.architecture.ProcessingElement`
if len(source_list) > 1:
# Create GraphViz struct for multiplexer
inputs = [f"in{i}" for i in range(len(source_list))]
ret = '<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">'
in_strs = [f'<TD COLSPAN="1" PORT="{in_str}">{in_str}</TD>' for in_str in inputs]
ret = (
'<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"'
' CELLPADDING="4">'
)
in_strs = [
f'<TD COLSPAN="1" PORT="{in_str}">{in_str}</TD>'
for in_str in inputs
]
ret += f"<TR>{''.join(in_strs)}</TR>"
name = f"{destination.replace(':', '_')}_mux"
ret += f'<TR><TD COLSPAN="{len(inputs)}" PORT="{name}">{name}</TD></TR>'
ret += (
f'<TR><TD COLSPAN="{len(inputs)}"'
f' PORT="{name}">{name}</TD></TR>'
)
ret += f'<TR><TD COLSPAN="{len(inputs)}" PORT="out0">out0</TD></TR>'
dg.node(name, ret + "</TABLE>>", style='filled', fillcolor=mux_color, fontname='Times New Roman')
dg.node(
name,
ret + "</TABLE>>",
style='filled',
fillcolor=mux_color,
fontname='Times New Roman',
)
# Add edge from mux output to resource input
dg.edge(f"{name}:out0", destination)
Loading