From 4cda8b7e01281d88344de811a11b93cbf3aa965d Mon Sep 17 00:00:00 2001 From: Johannes Kung <johku144@student.liu.se> Date: Mon, 17 Jun 2024 10:02:49 +0200 Subject: [PATCH] Refactor register --- src/simudator/core/modules/register.py | 53 +++++++++++++++++--------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/simudator/core/modules/register.py b/src/simudator/core/modules/register.py index 22f5694..c17e64e 100644 --- a/src/simudator/core/modules/register.py +++ b/src/simudator/core/modules/register.py @@ -72,6 +72,15 @@ class Register(Module): return state def set_state(self, state: dict[str, Any]) -> None: + """ + Set the state of the register. + + Parameters + ---------- + state : dict[str, Any] + The state of the register to load. Should contain the keys "name" + and "value" with values of type ``str`` and ``int`` respectively. + """ self.name = state["name"] self._value = state["value"] @@ -99,45 +108,55 @@ class Register(Module): class IntegerRegister(Register): """ - A register inteded to store integers only. + A register intended to store integers only. + + Parameters + ---------- + input : Signal + Signal from which the value is stored in the register. + output : Signal + Signal onto which the value of the register is outputted. + bit_length : int + Maximum number of bits of the input to store in the register. All extra + bits of the input value are discarded. + value : Any + Initial value of the register. + name : str + Name of the register. """ def __init__( self, - input_signal: Signal, - output_signal: Signal, + input: Signal, + output: Signal, bit_length: int, value: int = 0, name: str | None = None, ) -> None: - # set the registers name + # set the name if name is None: name = f"{bit_length}-bit register" - super().__init__(input_signal, output_signal, value=value, name=name) + super().__init__(input, output, value=value, name=name) # set the bit length of the register - self.bit_length = bit_length - - # set the registers mask. An 8 bit register should - # have the mask 1111 1111, aka one '1' for every bit - self.mask = 2**bit_length - 1 + self._bit_length = bit_length def update_register(self) -> None: super().update_register() - self._value = self._value & self.mask + mask = 2**self._bit_length - 1 + self._value = self._value & mask def get_state(self) -> dict[str, Any]: state = super().get_state() - state["bit_length"] = self.bit_length + state["bit_length"] = self._bit_length return state def set_state(self, state: dict[str, Any]) -> None: super().set_state(state) if "bit_length" in state: - self.bit_length = state["bit_length"] - self.mask = 2**self.bit_length - 1 + self._bit_length = state["bit_length"] def save_state_to_file(self, file_path: str) -> bool: file = open(file_path, "a") @@ -168,8 +187,8 @@ class Flag(IntegerRegister): # set the flags name super().__init__( - input_signal=input_signal, - output_signal=output_signal, + input=input_signal, + output=output_signal, bit_length=bit_length, value=value, name=name, @@ -207,7 +226,7 @@ class Flag(IntegerRegister): "\n value: ", self._value, "\n bit length: ", - self.bit_length, + self._bit_length, "\n mask: ", self.mask, ) -- GitLab