diff --git a/b_asic/core_operations.py b/b_asic/core_operations.py index c822fe8f4843c26f5dfabc33a48f3cbe92d74eef..6459948ca58a879a7853ea2e5846509d567ee79e 100644 --- a/b_asic/core_operations.py +++ b/b_asic/core_operations.py @@ -22,7 +22,7 @@ class Constant(AbstractOperation): def __init__(self, value: Number = 0, name: Name = ""): """Construct a Constant operation with the given value.""" - super().__init__(input_count=0, output_count=1, name=name) + super().__init__(input_count=0, output_count=1, name=name, latency_offsets={'out0' : 0}) self.set_param("value", value) @classmethod diff --git a/b_asic/schema.py b/b_asic/schema.py index 044df1ca1976a95db0e6e6836b9fab599bde7194..523137741d03f812c6ac14b317526b276c099d98 100644 --- a/b_asic/schema.py +++ b/b_asic/schema.py @@ -174,7 +174,10 @@ class Schema: self._start_times[op.graph_id] = op_start_time for output in self._sfg.find_by_type_name(Output.type_name()): source_port = output.inputs[0].signals[0].source - self._start_times[output.graph_id] = self._start_times[source_port.operation.graph_id] + source_port.latency_offset + if source_port.operation.graph_id in non_schedulable_ops: + self._start_times[output.graph_id] = 0 + else: + self._start_times[output.graph_id] = self._start_times[source_port.operation.graph_id] + source_port.latency_offset self._remove_delays() def plot_schedule(self) -> None: diff --git a/test/test_schema.py b/test/test_schema.py index 425fc02555ffee9569f0701ad16f0f7bde3362de..40f2cc3e50c907a0a5956f320309822e8dd39a2d 100644 --- a/test/test_schema.py +++ b/test/test_schema.py @@ -12,7 +12,7 @@ class TestInit: schema = Schema(sfg_simple_filter) - assert schema._start_times == {"add1": 4, "cmul1": 0} + assert schema._start_times == {"in1": 0, "add1": 4, "cmul1": 0, "out1": 0} def test_complicated_single_outputs_normal_latency(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 4) @@ -28,8 +28,8 @@ class TestInit: op_name = precedence_sfg_delays.find_by_id(op_id).name start_times_names[op_name] = start_time - assert start_times_names == {"C0": 0, "B1": 0, "B2": 0, "ADD2": 3, "ADD1": 7, "Q1": 11, - "A0": 14, "A1": 0, "A2": 0, "ADD3": 3, "ADD4": 17} + assert start_times_names == {"IN1": 0, "C0": 0, "B1": 0, "B2": 0, "ADD2": 3, "ADD1": 7, "Q1": 11, + "A0": 14, "A1": 0, "A2": 0, "ADD3": 3, "ADD4": 17, "OUT1": 21} def test_complicated_single_outputs_complex_latencies(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_offsets_of_type(ConstantMultiplication.type_name(), {'in0': 3, 'out0': 5}) @@ -53,8 +53,8 @@ class TestInit: op_name = precedence_sfg_delays.find_by_id(op_id).name start_times_names[op_name] = start_time - assert start_times_names == {'C0': 0, 'B1': 0, 'B2': 0, 'ADD2': 3, 'ADD1': 5, 'Q1': 6, 'A0': 12, - 'A1': 0, 'A2': 0, 'ADD3': 3, 'ADD4': 8} + assert start_times_names == {'IN1': 0, 'C0': 0, 'B1': 0, 'B2': 0, 'ADD2': 3, 'ADD1': 5, 'Q1': 6, 'A0': 12, + 'A1': 0, 'A2': 0, 'ADD3': 3, 'ADD4': 8, 'OUT1': 17} def test_independent_sfg(self, sfg_two_inputs_two_outputs_independent_with_cmul): schema = Schema(sfg_two_inputs_two_outputs_independent_with_cmul, scheduling_alg="ASAP") @@ -64,7 +64,8 @@ class TestInit: op_name = sfg_two_inputs_two_outputs_independent_with_cmul.find_by_id(op_id).name start_times_names[op_name] = start_time - assert start_times_names == {'CMUL1': 0, 'CMUL2': 5, "ADD1": 0, "CMUL3": 7} + assert start_times_names == {'C1': 0, 'IN1': 0, 'IN2': 0, 'CMUL1': 0, 'CMUL2': 5, + "ADD1": 0, "CMUL3": 7, 'OUT1': 9, 'OUT2': 10} def test_slack_normal_latency(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 1)