From 5484238aa40bdbe95cd8cce4d77dc0f86b87a625 Mon Sep 17 00:00:00 2001
From: Frans Skarman <frans.skarman@liu.se>
Date: Tue, 14 Feb 2023 16:38:58 +0000
Subject: [PATCH] Add critical path computation

---
 b_asic/signal_flow_graph.py | 6 ++++++
 test/test_sfg.py            | 9 +++++++++
 2 files changed, 15 insertions(+)

diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index c4a6545d..bacdb629 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -1451,3 +1451,9 @@ class SFG(AbstractOperation):
         if format is not None:
             dg.format = format
         dg.view()
+
+    def critical_path(self):
+        # Import here needed to avoid circular imports
+        from b_asic.schedule import Schedule
+
+        return Schedule(self, scheduling_algorithm="ASAP").schedule_time
diff --git a/test/test_sfg.py b/test/test_sfg.py
index 00079b7d..f4f9dc4a 100644
--- a/test/test_sfg.py
+++ b/test/test_sfg.py
@@ -1559,3 +1559,12 @@ class TestSFGErrors:
             match=re.escape("Output index out of range (expected 0-0, got 1)"),
         ):
             sfg.inputs_required_for_output(1)
+
+
+class TestCriticalPath:
+    def test_single_accumulator(self, sfg_simple_accumulator: SFG):
+        sfg_simple_accumulator.set_latency_of_type(Addition.type_name(), 5)
+        assert sfg_simple_accumulator.critical_path() == 5
+
+        sfg_simple_accumulator.set_latency_of_type(Addition.type_name(), 6)
+        assert sfg_simple_accumulator.critical_path() == 6
-- 
GitLab