diff --git a/b_asic/architecture.py b/b_asic/architecture.py index 75e5d971be000696ee10e677fb6ed80e5680e358..3ccb1a8dbf6e3a19109f9914fee7fc23d170918e 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 e731a480cd9410cf8dfc2d9f4525f71ebb44511c..df0868ee53b0b2d8b0d74706e8f3b31cad813892 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 = ""):