dsignal Class
Overview
The dsignal class represents a digital signal used in logic circuit simulations. It is designed to model binary signals that may consist of valid logic levels (‘0’, ‘1’) as well as undefined or high-impedance states (‘X’, ‘Z’). This makes it ideal for emulating real-world behavior in digital systems such as processors, FPGAs, and custom logic circuits.
Key Features
Supports binary values: ‘0’, ‘1’, ‘X’, and ‘Z’
Performs bitwise logical operations: AND, OR, XOR, NOT
Performs arithmetic operations: addition (+), subtraction (-), division (/), modulus (%)
Accepts interaction with int and str for arithmetic and logic operations
Supports input/output directionality for port modeling
Enforces a fixed bit width (bitwidth), automatically adjusting values to fit
Class Definition
class dsignal:
def __init__(self, direction="out", port='0', value='0', name='', bitwidth=None)
Constructor Parameters:
direction: Direction of the signal, either"in"or"out".port: Port name or number the signal is associated with.value: Initial binary string representing the signal state.name: Optional name for identifying the signal.bitwidth: Maximum number of bits allowed for the signal value.
Behavior
Validation: Only accepts characters ‘0’, ‘1’, ‘X’, and ‘Z’.
Bit Width Enforcement: If the input value exceeds the specified bitwidth, it is truncated from the left. If shorter, it is zero-padded from the left.
String Representation: Returns a human-readable string showing signal name, direction, value, and port.
Supported Operations
Logical Operations
The following bitwise logic operations are supported, including with dsignal, int, or str operands:
&: Bitwise AND|: Bitwise OR^: Bitwise XOR~: Bitwise NOT<<: Logical left shift>>: Logical right shift
Arithmetic Operations
Arithmetic operations are performed after converting the signal value to decimal:
+: Addition (supports int, str, or dsignal)-: Subtraction/: Integer division%: Modulo-=,/=and%=for in-place operations+=: It equals operations=
All results are adjusted to match the original bitwidth.
Usage in Logic Circuits
The dsignal class is intended for use as a signal wire between digital components such as logic gates, multiplexers, or ALUs.
Example:
class AND:
def __init__(self, In1, In2, Out):
self.In1 = dsignal('in', In1, '11', bitwidth=2)
self.In2 = dsignal('in', In2, '11', bitwidth=2)
self.Out = dsignal('out', Out, bitwidth=2)
def digital(self):
self.Out += self.In1 & self.In2
print(self.Out)
Example Usage
A = dsignal("out", "A", "1", bitwidth=4)
B = dsignal("out", "B", "1", bitwidth=4)
C = dsignal("out", "C", "0000", bitwidth=4)
C += A + B
print("C:", C) # Output: C (out): 0010 on port C
You can also use integers and strings directly:
A = dsignal("out", "A", "0010", bitwidth=4)
A += A+1
A &= "1101"
print("A:", A)
Conclusion
The dsignal class abstracts signal-level behavior in digital circuits, providing a programmable and extensible way to simulate logic and arithmetic interactions between components. It is an essential building block for digital design simulation and educational tools.