From 3c7673c0eacc41a3ba6231df5a1bea5173c23b67 Mon Sep 17 00:00:00 2001
From: Mikael Henriksson <mike.zx@hotmail.com>
Date: Tue, 9 May 2023 18:18:53 +0200
Subject: [PATCH] architecture.py: add assignments of Resources

---
 b_asic/architecture.py                        |  33 ++++++++++++++++
 b_asic/resources.py                           |  23 ++++++-----
 .../test_left_edge_cell_assignment.png        | Bin 23058 -> 23142 bytes
 test/test_resources.py                        |  36 ++++++++++++------
 4 files changed, 68 insertions(+), 24 deletions(-)

diff --git a/b_asic/architecture.py b/b_asic/architecture.py
index 510a29b4..28f44d96 100644
--- a/b_asic/architecture.py
+++ b/b_asic/architecture.py
@@ -5,6 +5,7 @@ from collections import defaultdict
 from io import TextIOWrapper
 from typing import Dict, Iterable, Iterator, List, Optional, Set, Tuple, Union, cast
 
+import matplotlib.pyplot as plt
 from graphviz import Digraph
 
 from b_asic.port import InputPort, OutputPort
@@ -132,6 +133,7 @@ class Resource(HardwareBlock):
         self._collection = process_collection
         self._input_count = -1
         self._output_count = -1
+        self._assignment: Optional[List[ProcessCollection]] = None
 
     def __repr__(self):
         return self.entity_name
@@ -172,6 +174,19 @@ class Resource(HardwareBlock):
         # doc-string inherited
         return self._collection.schedule_time
 
+    def show_content(self):
+        if not self.is_assigned:
+            self._collection.show()
+        else:
+            fig, ax = plt.subplots()
+            for i, pc in enumerate(self._assignment):  # type: ignore
+                pc.plot(ax=ax, row=i)
+            fig.show()  # type: ignore
+
+    @property
+    def is_assigned(self) -> bool:
+        return self._assignment is not None
+
 
 class ProcessingElement(Resource):
     """
@@ -210,6 +225,11 @@ class ProcessingElement(Resource):
         self._entity_name = entity_name
         self._input_count = ops[0].input_count
         self._output_count = ops[0].output_count
+        self._assignment = list(
+            self._collection.split_on_execution_time(heuristic="left_edge")
+        )
+        if len(self._assignment) > 1:
+            raise ValueError("Cannot map ProcessCollection to single ProcessingElement")
 
     @property
     def processes(self) -> Set[OperatorProcess]:
@@ -275,6 +295,19 @@ class Memory(Resource):
         # Add information about the iterator type
         return cast(Iterator[MemoryVariable], iter(self._collection))
 
+    def _assign_ram(self, heuristic: str = "left_edge"):
+        """
+        Perform RAM-type assignment of MemoryVariables in this Memory.
+
+        Parameters
+        ----------
+        heuristic : {'left_edge', 'graph_color'}
+            The underlying heuristic to use when performing RAM assignment.
+        """
+        self._assignment = list(
+            self._collection.split_on_execution_time(heuristic=heuristic)
+        )
+
 
 class Architecture(HardwareBlock):
     """
diff --git a/b_asic/resources.py b/b_asic/resources.py
index 8ad13879..a3155736 100644
--- a/b_asic/resources.py
+++ b/b_asic/resources.py
@@ -852,7 +852,7 @@ class ProcessCollection:
             )
             return self._split_from_graph_coloring(coloring)
         elif heuristic == "left_edge":
-            raise NotImplementedError()
+            return self._left_edge_assignment()
         else:
             raise ValueError(f"Invalid heuristic '{heuristic}'")
 
@@ -989,18 +989,17 @@ class ProcessCollection:
     def __iter__(self):
         return iter(self._collection)
 
-    def graph_color_cell_assignment(
+    def _graph_color_assignment(
         self,
         coloring_strategy: str = "saturation_largest_first",
         *,
         coloring: Optional[Dict[Process, int]] = None,
     ) -> Set["ProcessCollection"]:
         """
-        Perform cell assignment of the processes in this collection using graph
-        coloring.
+        Perform assignment of the processes in this collection using graph coloring.
 
-        Two or more processes can share a single cell if, and only if, they have no
-        overlaping time alive.
+        Two or more processes can share a single resource if, and only if, they have no
+        overlaping execution time.
 
         Parameters
         ----------
@@ -1029,17 +1028,17 @@ class ProcessCollection:
             cell_assignment[cell].add_process(process)
         return set(cell_assignment.values())
 
-    def left_edge_cell_assignment(self) -> Dict[int, "ProcessCollection"]:
+    def _left_edge_assignment(self) -> Set["ProcessCollection"]:
         """
-        Perform cell assignment of the processes in this collection using the left-edge
+        Perform assignment of the processes in this collection using the left-edge
         algorithm.
 
-        Two or more processes can share a single cell if, and only if, they have no
-        overlaping time alive.
+        Two or more processes can share a single resource if, and only if, they have no
+        overlaping execution time.
 
         Returns
         -------
-        Dict[int, ProcessCollection]
+        Set[ProcessCollection]
         """
         next_empty_cell = 0
         cell_assignment: Dict[int, ProcessCollection] = dict()
@@ -1070,7 +1069,7 @@ class ProcessCollection:
                 )
                 cell_assignment[next_empty_cell].add_process(next_process)
                 next_empty_cell += 1
-        return cell_assignment
+        return {pc for pc in cell_assignment.values()}
 
     def generate_memory_based_storage_vhdl(
         self,
diff --git a/test/baseline/test_left_edge_cell_assignment.png b/test/baseline/test_left_edge_cell_assignment.png
index 45420a64ac885227c686564337c2be329830e71e..0c7802654bf3b6734b223543df418df1bad3b9b8 100644
GIT binary patch
literal 23142
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

literal 23058
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
S!z2a<1_n=8KbLh*2~7Y#uCO!!

diff --git a/test/test_resources.py b/test/test_resources.py
index 6751879f..b5f5b13d 100644
--- a/test/test_resources.py
+++ b/test/test_resources.py
@@ -34,27 +34,30 @@ class TestProcessCollectionPlainMemoryVariable:
     @pytest.mark.mpl_image_compare(style='mpl20')
     def test_left_edge_cell_assignment(self, simple_collection: ProcessCollection):
         fig, ax = plt.subplots(1, 2)
-        assignment = simple_collection.left_edge_cell_assignment()
-        for cell in assignment:
-            assignment[cell].plot(ax=ax[1], row=cell)  # type: ignore
+        assignment = list(simple_collection._left_edge_assignment())
+        for i, cell in enumerate(assignment):
+            cell.plot(ax=ax[1], row=i)  # type: ignore
         simple_collection.plot(ax[0])  # type:ignore
         return fig
 
     def test_cell_assignment_matrix_transposer(self):
         collection = generate_matrix_transposer(4, min_lifetime=5)
-        assignment_left_edge = collection.left_edge_cell_assignment()
-        assignment_graph_color = collection.graph_color_cell_assignment(
+        assignment_left_edge = collection._left_edge_assignment()
+        assignment_graph_color = collection.split_on_execution_time(
             coloring_strategy='saturation_largest_first'
         )
-        assert len(assignment_left_edge.keys()) == 18
+        assert len(assignment_left_edge) == 18
         assert len(assignment_graph_color) == 16
 
     def test_generate_memory_based_vhdl(self):
         for rows in [2, 3, 4, 5, 7]:
             collection = generate_matrix_transposer(rows, min_lifetime=0)
-            assignment = collection.graph_color_cell_assignment()
+            assignment = collection.split_on_execution_time(heuristic="graph_color")
             collection.generate_memory_based_storage_vhdl(
-                filename=f'b_asic/codegen/testbench/streaming_matrix_transposition_memory_{rows}x{rows}.vhdl',
+                filename=(
+                    'b_asic/codegen/testbench/'
+                    f'streaming_matrix_transposition_memory_{rows}x{rows}.vhdl'
+                ),
                 entity_name=f'streaming_matrix_transposition_memory_{rows}x{rows}',
                 assignment=assignment,
                 word_length=16,
@@ -65,22 +68,31 @@ class TestProcessCollectionPlainMemoryVariable:
             generate_matrix_transposer(
                 rows, min_lifetime=0
             ).generate_register_based_storage_vhdl(
-                filename=f'b_asic/codegen/testbench/streaming_matrix_transposition_register_{rows}x{rows}.vhdl',
+                filename=(
+                    'b_asic/codegen/testbench/streaming_matrix_transposition_'
+                    f'register_{rows}x{rows}.vhdl'
+                ),
                 entity_name=f'streaming_matrix_transposition_register_{rows}x{rows}',
                 word_length=16,
             )
 
     def test_rectangular_matrix_transposition(self):
         collection = generate_matrix_transposer(rows=4, cols=8, min_lifetime=2)
-        assignment = collection.graph_color_cell_assignment()
+        assignment = collection.split_on_execution_time(heuristic="graph_color")
         collection.generate_memory_based_storage_vhdl(
-            filename='b_asic/codegen/testbench/streaming_matrix_transposition_memory_4x8.vhdl',
+            filename=(
+                'b_asic/codegen/testbench/streaming_matrix_transposition_memory_'
+                '4x8.vhdl'
+            ),
             entity_name='streaming_matrix_transposition_memory_4x8',
             assignment=assignment,
             word_length=16,
         )
         collection.generate_register_based_storage_vhdl(
-            filename='b_asic/codegen/testbench/streaming_matrix_transposition_register_4x8.vhdl',
+            filename=(
+                'b_asic/codegen/testbench/streaming_matrix_transposition_register_'
+                '4x8.vhdl'
+            ),
             entity_name='streaming_matrix_transposition_register_4x8',
             word_length=16,
         )
-- 
GitLab