1
0
mirror of https://github.com/myhdl/myhdl.git synced 2025-01-24 21:52:56 +08:00

restored 1.8

This commit is contained in:
jand 2003-08-07 20:16:13 +00:00
parent de2ab41f7d
commit f1c371576f

View File

@ -35,7 +35,7 @@ from copy import deepcopy as copy
from myhdl import _simulator as sim
from myhdl._simulator import _siglist, _futureEvents, now
from myhdl._Waiter import _WaiterList, _Waiter
from myhdl._Waiter import _WaiterList
from myhdl._intbv import intbv
from myhdl._bin import bin
@ -202,73 +202,23 @@ class Signal(object):
def _printVcdVec(self):
print >> sim._tf, "b%s %s" % (bin(self._val, self._nrbits), self._code)
# experimental item and slice proxy signals through call interface
def _listener(self, sig, *args):
if len(args) == 1:
index = args[0]
while 1:
self.next[index] = sig.val
yield sig
elif len(args) == 2:
high, low = args
if low is None:
low = 0
if high is None:
while 1:
self.next[:low] = sig.val
yield sig
else:
while 1:
self.next[high:low] = sig.val
yield sig
else:
raise TypeError
def _driver(self, sig, *args):
if len(args) == 1:
index = args[0]
while 1:
sig.next = self.val[index]
yield self
elif len(args) == 2:
high, low = args
if low is None:
low = 0
if high is None:
while 1:
sig.next = self.val[:low]
yield self
else:
while 1:
sig.next = self.val[high:low]
yield self
else:
raise TypeError
def __call__(self, *args):
if len(args) == 1:
index = args[0]
sig = Signal(self[index])
elif len(args) == 2:
high, low = args
if low is None:
low = 0
if high is None:
sig = Signal(self[:low])
else:
sig = Signal(self[high:low])
else:
raise TypeError
listener = self._listener(sig, *args)
sig._eventWaiters.append(_Waiter(listener))
driver = self._driver(sig, *args)
self._eventWaiters.append(_Waiter(driver))
return sig
### operators for which delegation to current value is appropriate ###
# hashing (?)
def __hash__(self):
return hash(self._val)
def __nonzero__(self):
if self._val:
return 1
else:
return 0
# length
def __len__(self):
return len(self._val)
# indexing and slicing methods
def __getitem__(self, i):
@ -276,154 +226,140 @@ class Signal(object):
def __getslice__(self, i, j):
return self._val[i:j]
# hashing (?)
def __hash__(self):
return hash(self.val)
# truth testing
def __nonzero__(self):
if self.val:
return 1
else:
return 0
# length
def __len__(self):
return len(self.val)
# integer-like methods
def __add__(self, other):
if isinstance(other, Signal):
return self.val + other._val
return self._val + other._val
else:
return self.val + other
return self._val + other
def __radd__(self, other):
return other + self.val
return other + self._val
def __sub__(self, other):
if isinstance(other, Signal):
return self.val - other._val
return self._val - other._val
else:
return self.val - other
return self._val - other
def __rsub__(self, other):
return other - self.val
return other - self._val
def __mul__(self, other):
if isinstance(other, Signal):
return self.val * other._val
return self._val * other._val
else:
return self.val * other
return self._val * other
def __rmul__(self, other):
return other * self.val
return other * self._val
def __div__(self, other):
if isinstance(other, Signal):
return self.val / other._val
return self._val / other._val
else:
return self.val / other
return self._val / other
def __rdiv__(self, other):
return other / self.val
return other / self._val
def __mod__(self, other):
if isinstance(other, Signal):
return self.val % other._val
return self._val % other._val
else:
return self.val % other
return self._val % other
def __rmod__(self, other):
return other % self.val
return other % self._val
# XXX divmod
def __pow__(self, other):
if isinstance(other, Signal):
return self.val ** other._val
return self._val ** other._val
else:
return self.val ** other
return self._val ** other
def __rpow__(self, other):
return other ** self.val
return other ** self._val
def __lshift__(self, other):
if isinstance(other, Signal):
return self.val << other._val
return self._val << other._val
else:
return self.val << other
return self._val << other
def __rlshift__(self, other):
return other << self.val
return other << self._val
def __rshift__(self, other):
if isinstance(other, Signal):
return self.val >> other._val
return self._val >> other._val
else:
return self.val >> other
return self._val >> other
def __rrshift__(self, other):
return other >> self.val
return other >> self._val
def __and__(self, other):
if isinstance(other, Signal):
return self.val & other._val
return self._val & other._val
else:
return self.val & other
return self._val & other
def __rand__(self, other):
return other & self.val
return other & self._val
def __or__(self, other):
if isinstance(other, Signal):
return self.val | other._val
return self._val | other._val
else:
return self.val | other
return self._val | other
def __ror__(self, other):
return other | self.val
return other | self._val
def __xor__(self, other):
if isinstance(other, Signal):
return self.val ^ other._val
return self._val ^ other._val
else:
return self.val ^ other
return self._val ^ other
def __rxor__(self, other):
return other ^ self.val
return other ^ self._val
def __neg__(self):
return -self.val
return -self._val
def __pos__(self):
return +self.val
return +self._val
def __abs__(self):
return abs(self.val)
return abs(self._val)
def __invert__(self):
return ~self.val
return ~self._val
# conversions
def __int__(self):
return int(self.val)
return int(self._val)
def __long__(self):
return long(self.val)
return long(self._val)
def __float__(self):
return float(self.val)
return float(self._val)
def __oct__(self):
return oct(self.val)
return oct(self._val)
def __hex__(self):
return hex(self.val)
return hex(self._val)
# comparison
def __cmp__(self, other):
return cmp(self.val, other)
return cmp(self._val, other)
# representation
def __str__(self):
return str(self.val)
return str(self._val)
def __repr__(self):
return "Signal(" + repr(self.val) + ")"
return "Signal(" + repr(self._val) + ")"
# augmented assignment not supported
def _augm(self):
@ -500,6 +436,4 @@ class _SignalWrap(object):
def apply(self):
return self.sig._apply(self.next, self.timeStamp)