Skip to content
Snippets Groups Projects

Implemented "Modify Word Length"

Merged Arvid Westerlund requested to merge 29-modify-word-length into develop
2 files
+ 48
36
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 22
20
@@ -35,15 +35,6 @@ class Port(ABC):
"""Return a list of all connected signals."""
raise NotImplementedError
@abstractmethod
def signal(self, i: int = 0) -> Signal:
"""Return the connected signal at index i.
Keyword argumens:
i: integer index of the signal requsted.
"""
raise NotImplementedError
@property
@abstractmethod
def connected_ports(self) -> List["Port"]:
@@ -58,20 +49,23 @@ class Port(ABC):
@abstractmethod
def connect(self, port: "Port") -> Signal:
"""Create and return a signal that is connected to this port and the entered
port and connect this port to the signal and the entered port to the signal."""
port and connect this port to the signal and the entered port to the signal.
"""
raise NotImplementedError
@abstractmethod
def add_signal(self, signal: Signal) -> None:
"""Connect this port to the entered signal. If the entered signal isn't connected to
this port then connect the entered signal to the port aswell."""
this port then connect the entered signal to the port aswell.
"""
raise NotImplementedError
@abstractmethod
def disconnect(self, port: "Port") -> None:
"""Disconnect the entered port from the port by removing it from the ports signal.
If the entered port is still connected to this ports signal then disconnect the entered
port from the signal aswell."""
port from the signal aswell.
"""
raise NotImplementedError
@abstractmethod
@@ -119,31 +113,38 @@ class InputPort(AbstractPort):
"""
_source_signal: Optional[Signal]
_value_length: Optional[int]
def __init__(self, port_id: PortIndex, operation: Operation):
super().__init__(port_id, operation)
self._source_signal = None
self._value_length = None
@property
def signals(self) -> List[Signal]:
return [] if self._source_signal is None else [self._source_signal]
def signal(self, i: int = 0) -> Signal:
assert 0 <= i < self.signal_count(), "Signal index out of bound."
assert self._source_signal is not None, "No Signal connect to InputPort."
return self._source_signal
@property
def value_length(self) -> Optional[int]:
return self._value_length
@property
def connected_ports(self) -> List[Port]:
return [] if self._source_signal is None or self._source_signal.source is None \
else [self._source_signal.source]
@value_length.setter
def value_length(self, bits: Optional[int]) -> None:
assert (isinstance(bits, int) and bits >= 0) or bits is None, \
"Value length on input port has to be a non-negative integer or None."
self._value_length = bits
def signal_count(self) -> int:
return 0 if self._source_signal is None else 1
def connect(self, port: "OutputPort") -> Signal:
assert self._source_signal is None, "Connecting new port to already connected input port."
return Signal(port, self) # self._source_signal is set by the signal constructor
return Signal(port, self) # self._source_signal is set by the signal constructor.
def add_signal(self, signal: Signal) -> None:
assert self._source_signal is None, "Connecting new port to already connected input port."
@@ -160,12 +161,13 @@ class InputPort(AbstractPort):
old_signal: Signal = self._source_signal
self._source_signal = None
if self is old_signal.destination:
# Disconnect the dest of the signal if this inputport currently is the dest
# Disconnect the dest of the signal if this inputport currently is the dest.
old_signal.remove_destination()
def clear(self) -> None:
self.remove_signal(self._source_signal)
class OutputPort(AbstractPort):
"""Output port.
TODO: More info.
@@ -194,14 +196,14 @@ class OutputPort(AbstractPort):
return len(self._destination_signals)
def connect(self, port: InputPort) -> Signal:
return Signal(self, port) # Signal is added to self._destination_signals in signal constructor
return Signal(self, port) # Signal is added to self._destination_signals in signal constructor.
def add_signal(self, signal: Signal) -> None:
assert signal not in self.signals, \
"Attempting to connect to Signal already connected."
self._destination_signals.append(signal)
if self is not signal.source:
# Connect this outputport to the signal if it isn't already
# Connect this outputport to the signal if it isn't already.
signal.set_source(self)
def disconnect(self, port: InputPort) -> None:
Loading