diff --git a/b_asic/architecture.py b/b_asic/architecture.py
index 0802648720355f81086fdda0b2bfab87083ff4d1..4c71bbe1d92fea39efa4e03a9258deb3606f9c7f 100644
--- a/b_asic/architecture.py
+++ b/b_asic/architecture.py
@@ -184,12 +184,15 @@ class Resource(HardwareBlock):
         if inputs:
             in_strs = [f"<{in_str}> {in_str}" for in_str in inputs]
             ret += f"{{{'|'.join(in_strs)}}}|"
-        ret += f"{self.entity_name}"
+        ret += f"<{self.entity_name}> {self.entity_name}{self._info()}"
         if outputs:
             out_strs = [f"<{out_str}> {out_str}" for out_str in outputs]
             ret += f"|{{{'|'.join(out_strs)}}}"
         return "{" + ret + "}"
 
+    def _info(self):
+        return ""
+
     @property
     def schedule_time(self) -> int:
         # doc-string inherited
@@ -456,6 +459,13 @@ class Memory(Resource):
         # Add information about the iterator type
         return cast(Iterator[MemoryVariable], iter(self._collection))
 
+    def _info(self):
+        if self.is_assigned:
+            if self._memory_type == "RAM":
+                plural_s = 's' if len(self._assignment) >= 2 else ''
+                return f": (RAM, {len(self._assignment)} cell{plural_s})"
+        return ""
+
     def assign(self, heuristic: str = "left_edge") -> None:
         """
         Perform assignment of the memory variables.
@@ -819,7 +829,7 @@ of :class:`~b_asic.architecture.ProcessingElement`
                     in_strs = [f"<{in_str}> {in_str}" for in_str in inputs]
                     ret += f"{{{'|'.join(in_strs)}}}|"
                     name = f"{destination.replace(':', '_')}_mux"
-                    ret += name
+                    ret += f"<{name}> {name}"
                     ret += "|<out> out"
                     dg.node(name, "{" + ret + "}")
                     dg.edge(f"{name}:out", destination)
diff --git a/test/test_architecture.py b/test/test_architecture.py
index 48e4cc313945c07fc3d4a51eed3448b84d918aa7..14ae7dfc72aea84fecd373f653a7aeeeb3e680a4 100644
--- a/test/test_architecture.py
+++ b/test/test_architecture.py
@@ -104,9 +104,9 @@ def test_architecture(schedule_direct_form_iir_lp_filter: Schedule):
         if pe._type_name == 'add':
             s = (
                 'digraph {\n\tnode [shape=record]\n\t'
-                + pe._entity_name
+                + pe.entity_name
                 + ' [label="{{<in0> in0|<in1> in1}|'
-                + pe._entity_name
+                + f'<{pe.entity_name}> {pe.entity_name}'
                 + '|{<out0> out0}}"]\n}'
             )
             assert pe._digraph().source in (s, s + '\n')
@@ -123,8 +123,8 @@ def test_architecture(schedule_direct_form_iir_lp_filter: Schedule):
     for i, memory in enumerate(memories):
         memory.set_entity_name(f"MEM{i}")
         s = (
-            'digraph {\n\tnode [shape=record]\n\tMEM0 [label="{{<in0> in0}|MEM0|{<out0>'
-            ' out0}}"]\n}'
+            'digraph {\n\tnode [shape=record]\n\tMEM0 [label="{{<in0> in0}|<MEM0>'
+            ' MEM0|{<out0> out0}}"]\n}'
         )
         assert memory.schedule_time == 18
         assert memory._digraph().source in (s, s + '\n')
@@ -134,6 +134,14 @@ def test_architecture(schedule_direct_form_iir_lp_filter: Schedule):
         processing_elements, memories, direct_interconnects=direct_conn
     )
 
+    # Parts are non-deterministic, but this first part seems OK
+    s = (
+        'digraph {\n\tnode [shape=record]\n\tsplines=spline\n\tsubgraph'
+        ' cluster_memories'
+    )
+    assert architecture._digraph().source.startswith(s)
+    s = 'digraph {\n\tnode [shape=record]\n\tsplines=spline\n\tMEM0'
+    assert architecture._digraph(cluster=False).source.startswith(s)
     assert architecture.schedule_time == 18
 
     # assert architecture._digraph().source == "foo"