From a22e76aad525b583bddcd67ef943692830070421 Mon Sep 17 00:00:00 2001 From: Robier Al Kaadi <robal695@student.liu.se> Date: Mon, 1 Jul 2024 09:49:23 +0000 Subject: [PATCH] Add slots to architecture classes --- b_asic/architecture.py | 21 +++ b_asic/core_operations.py | 260 +++++++++++++++++++++++++++++++++++++- 2 files changed, 280 insertions(+), 1 deletion(-) diff --git a/b_asic/architecture.py b/b_asic/architecture.py index 75e5d971..3ccb1a8d 100644 --- a/b_asic/architecture.py +++ b/b_asic/architecture.py @@ -53,6 +53,8 @@ class HardwareBlock: entity_name : str, optional The name of the resulting entity. """ + __slots__ = "_entity_name" + _entity_name: Optional[str] def __init__(self, entity_name: Optional[str] = None): self._entity_name: Optional[str] = None @@ -379,6 +381,9 @@ class ProcessingElement(Resource): """ _color = f"#{''.join(f'{v:0>2X}' for v in PE_COLOR)}" + __slots__ = ("_process_collection", "_entity_name") + _process_collection: ProcessCollection + _entity_name : Optional[str] def __init__( self, @@ -462,6 +467,22 @@ class Memory(Resource): """ _color = f"#{''.join(f'{v:0>2X}' for v in MEMORY_COLOR)}" + _slots__ = ( + "_process_collection", + "_memory_type", + "_entity_name", + "_read_ports", + "_write_ports", + "_total_ports", + "_assign", + ) + _process_collection: ProcessCollection + _memory_type: Literal["RAM", "register"] + _entity_name: Optional[str] + _read_ports: Optional[int] + _write_ports: Optional[int] + _total_ports: Optional[int] + _assign: bool def __init__( self, diff --git a/b_asic/core_operations.py b/b_asic/core_operations.py index e731a480..df0868ee 100644 --- a/b_asic/core_operations.py +++ b/b_asic/core_operations.py @@ -32,6 +32,10 @@ class Constant(AbstractOperation): Operation name. """ + __slots__ = ("_value", "_name") + _value: Num + _name: Name + _execution_time = 0 is_linear = True is_constant = True @@ -73,6 +77,7 @@ class Constant(AbstractOperation): def __str__(self) -> str: return f"{self.value}" + class Addition(AbstractOperation): """ Binary addition operation. @@ -105,6 +110,21 @@ class Addition(AbstractOperation): AddSub """ + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True is_swappable = True @@ -172,6 +192,21 @@ class Subtraction(AbstractOperation): is_linear = True + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + def __init__( self, src0: Optional[SignalSourceProvider] = None, @@ -240,6 +275,24 @@ class AddSub(AbstractOperation): ======== Addition, Subtraction """ + + __slots__ = ( + "_is_add", + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _is_add: bool + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True def __init__( @@ -317,6 +370,22 @@ class Multiplication(AbstractOperation): ======== ConstantMultiplication """ + + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_swappable = True def __init__( @@ -385,6 +454,21 @@ class Division(AbstractOperation): Reciprocal """ + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + def __init__( self, src0: Optional[SignalSourceProvider] = None, @@ -450,6 +534,22 @@ class Min(AbstractOperation): ======== Max """ + + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_swappable = True def __init__( @@ -515,6 +615,22 @@ class Max(AbstractOperation): ======== Min """ + + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_swappable = True def __init__( @@ -571,6 +687,13 @@ class SquareRoot(AbstractOperation): Operation execution time (time units before operator can be reused). """ + __slots__ = ("_src0", "_name", "_latency", "_latency_offsets", "_execution_time") + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + def __init__( self, src0: Optional[SignalSourceProvider] = None, @@ -622,6 +745,13 @@ class ComplexConjugate(AbstractOperation): Operation execution time (time units before operator can be reused). """ + __slots__ = ("_src0", "_name", "_latency", "_latency_offsets", "_execution_time") + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + def __init__( self, src0: Optional[SignalSourceProvider] = None, @@ -673,6 +803,13 @@ class Absolute(AbstractOperation): Operation execution time (time units before operator can be reused). """ + __slots__ = ("_src0", "_name", "_latency", "_latency_offsets", "_execution_time") + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + def __init__( self, src0: Optional[SignalSourceProvider] = None, @@ -729,6 +866,22 @@ class ConstantMultiplication(AbstractOperation): -------- Multiplication """ + + __slots__ = ( + "_value", + "_src0", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _value: Num + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True def __init__( @@ -802,6 +955,22 @@ class Butterfly(AbstractOperation): execution_time : int, optional Operation execution time (time units before operator can be reused). """ + + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True def __init__( @@ -865,6 +1034,24 @@ class MAD(AbstractOperation): Multiplication Addition """ + + __slots__ = ( + "_src0", + "_src1", + "_src2", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _src2: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_swappable = True def __init__( @@ -922,6 +1109,22 @@ class SymmetricTwoportAdaptor(AbstractOperation): y_1 & = & x_0 + \text{value}\times\left(x_1 - x_0\right) \end{eqnarray} """ + + __slots__ = ( + "_src0", + "_src1", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _src0: Optional[SignalSourceProvider] + _src1: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True is_swappable = True @@ -1007,6 +1210,13 @@ class Reciprocal(AbstractOperation): Division """ + __slots__ = ("_src0", "_name", "_latency", "_latency_offsets", "_execution_time") + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + def __init__( self, src0: Optional[SignalSourceProvider] = None, @@ -1066,6 +1276,21 @@ class RightShift(AbstractOperation): Shift """ + __slots__ = ( + "_value", + "_src0", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _value: Num + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True def __init__( @@ -1143,6 +1368,21 @@ class LeftShift(AbstractOperation): Shift """ + __slots__ = ( + "_value", + "_src0", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _value: Num + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True def __init__( @@ -1221,6 +1461,21 @@ class Shift(AbstractOperation): RightShift """ + __slots__ = ( + "_value", + "_src0", + "_name", + "_latency", + "_latency_offsets", + "_execution_time", + ) + _value: Num + _src0: Optional[SignalSourceProvider] + _name: Name + _latency: Optional[int] + _latency_offsets: Optional[Dict[str, int]] + _execution_time: Optional[int] + is_linear = True def __init__( @@ -1263,6 +1518,7 @@ class Shift(AbstractOperation): raise TypeError("value must be an int") self.set_param("value", value) + class Sink(AbstractOperation): r""" Sink operation. @@ -1276,7 +1532,9 @@ class Sink(AbstractOperation): Operation name. """ - _execution_time = 0 + __slots__ = "_name" + _name: Name + is_linear = True def __init__(self, name: Name = ""): -- GitLab