From 752932ffa655d7c19c8196ba1cde1d710969d2ff Mon Sep 17 00:00:00 2001
From: Simon Bjurek <simbj106@student.liu.se>
Date: Tue, 11 Mar 2025 13:12:00 +0100
Subject: [PATCH] fixed bug in scheduling

---
 b_asic/schedule.py | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index 71e9e9d7..d6c4cea0 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -365,10 +365,10 @@ class Schedule:
                     available_time = (
                         cast(int, source.latency_offset)
                         + self._start_times[source.operation.graph_id]
-                        - self._schedule_time * self._laps[signal.graph_id]
                     )
                     if available_time > self._schedule_time:
                         available_time -= self._schedule_time
+                    available_time -= self._schedule_time * self._laps[signal.graph_id]
                 else:
                     available_time = (
                         cast(int, source.latency_offset)
@@ -458,6 +458,26 @@ class Schedule:
             raise ValueError(
                 f"New schedule time ({time}) too short, minimum: {max_end_time}."
             )
+
+        # if updating the scheduling time -> update laps due to operations
+        # reading and writing in different iterations (across the edge)
+        if self._schedule_time is not None:
+            for signal_id in self._laps.keys():
+                port = self._sfg.find_by_id(signal_id).destination
+
+                source_port = port.signals[0].source
+                source_op = source_port.operation
+                source_port_start_time = self._start_times[source_op.graph_id]
+                source_port_latency_offset = source_op.latency_offsets[
+                    f"out{source_port.index}"
+                ]
+                if (
+                    source_port_start_time + source_port_latency_offset
+                    > self._schedule_time
+                    and source_port_start_time + source_port_latency_offset <= time
+                ):
+                    self._laps[signal_id] += 1
+
         self._schedule_time = time
         return self
 
@@ -945,11 +965,12 @@ class Schedule:
                 f"out{source_port.index}"
             ]
             if (
-                lap == 0
-                and source_port_start_time + source_port_latency_offset
+                source_port_start_time + source_port_latency_offset
                 > self._schedule_time
             ):
-                lap = 1
+                lap += (
+                    source_port_start_time + source_port_latency_offset
+                ) // self._schedule_time
 
             destination_laps.append((port.operation.graph_id, port.index, lap))
 
-- 
GitLab