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

Optimization pass on Signal

--HG--
branch : 0.8-dev
This commit is contained in:
Jan Decaluwe 2011-05-25 06:38:41 +02:00
parent 263f02b3d1
commit 0b5b88c62b
3 changed files with 126 additions and 119 deletions

View File

@ -116,7 +116,9 @@ class _Signal(object):
val -- initial value
"""
self._next = self._val = self._init = copy(val)
self._init = deepcopy(val)
self._val = deepcopy(val)
self._next = deepcopy(val)
self._min = self._max = None
self._name = self._read = self._driven = None
self._used = False
@ -126,20 +128,20 @@ class _Signal(object):
if isinstance(val, bool):
self._type = bool
self._setNextVal = self._setNextBool
self._copyVal2Next = self._assignVal
#self._copyVal2Next = self._assignVal
self._printVcd = self._printVcdBit
self._nrbits = 1
elif isinstance(val, (int, long)):
self._type = (int, long)
self._setNextVal = self._setNextInt
self._copyVal2Next = self._assignVal
#self._copyVal2Next = self._assignVal
elif isinstance(val, intbv):
self._type = intbv
self._min = val._min
self._max = val._max
self._nrbits = val._nrbits
self._setNextVal = self._setNextIntbv
self._copyVal2Next = self._copyVal
#self._copyVal2Next = self._copyIntbv
if self._nrbits:
self._printVcd = self._printVcdVec
else:
@ -150,7 +152,7 @@ class _Signal(object):
else:
self._type = type(val)
self._setNextVal = self._setNextType
self._copyVal2Next = self._deepcopyVal
#self._copyVal2Next = self._deepcopyVal
if hasattr(val, '_nrbits'):
self._nrbits = val._nrbits
self._eventWaiters = _WaiterList()
@ -181,7 +183,12 @@ class _Signal(object):
elif not next and val:
waiters.extend(self._negedgeWaiters[:])
del self._negedgeWaiters[:]
self._val = next
if isinstance(val, intbv):
self._val._val = next._val
elif isinstance(val, (int, long)):
self._val = next
else:
self._val = deepcopy(next)
if self._tracing:
self._printVcd()
return waiters
@ -195,8 +202,8 @@ class _Signal(object):
# support for the 'next' attribute
def _get_next(self):
if self._next is self._val:
self._copyVal2Next()
# if self._next is self._val:
# self._next = deepcopy(self._val)
_siglist.append(self)
return self._next
def _set_next(self, val):
@ -265,8 +272,8 @@ class _Signal(object):
val = val._val
elif not isinstance(val, (int, long)):
raise TypeError("Expected int or intbv, got %s" % type(val))
if self._next is self._val:
self._next = copy(self._val)
# if self._next is self._val:
# self._next = type(self._val)(self._val)
self._next._val = val
self._next._handleBounds()
@ -279,14 +286,14 @@ class _Signal(object):
# self._next = val
# copy val to next methods
def _assignVal(self):
self._next = self._val
def _copyVal(self):
self._next = copy(self._val)
def _deepcopyVal(self):
self._next = deepcopy(self._val)
# def _assignVal(self):
# self._next = self._val
#
# def _copyIntbv(self):
# self._next = type(self._val)(self._val)
#
# def _deepcopyVal(self):
# self._next = deepcopy(self._val)
# vcd print methods
def _printVcdStr(self):

View File

@ -3,39 +3,39 @@ Test: timer
=====
pypy
----
real 85.14
user 84.90
sys 0.04
real 81.13
user 80.89
sys 0.06
Test: lfsr24
=====
pypy
----
real 110.88
user 110.26
sys 0.36
real 105.43
user 105.14
sys 0.04
Test: randgen
=====
pypy
----
real 90.07
user 89.78
sys 0.08
real 89.21
user 88.89
sys 0.11
Test: longdiv
=====
pypy
----
real 91.56
user 91.07
sys 0.27
real 88.25
user 87.98
sys 0.05
Test: findmax
=====
pypy
----
real 123.09
user 122.59
sys 0.20
real 112.74
user 112.44
sys 0.03

View File

@ -3,189 +3,189 @@ Test: timer
=====
python
------
real 853.66
user 851.41
sys 0.37
real 888.59
user 886.25
sys 0.40
pypy
----
real 81.23
user 80.80
sys 0.06
real 81.17
user 80.82
sys 0.16
icarus
------
real 108.60
user 108.31
sys 0.02
real 106.18
user 105.77
sys 0.18
ghdl
----
real 144.27
user 143.98
real 146.23
user 145.92
sys 0.00
vlog
----
real 256.14
user 100.29
sys 154.84
real 257.18
user 103.22
sys 153.18
vcom
----
real 224.91
user 109.73
sys 114.47
real 215.11
user 101.96
sys 112.48
Test: lfsr24
=====
python
------
real 1381.11
user 1377.58
sys 0.42
real 1281.90
user 1278.74
sys 0.33
pypy
----
real 110.86
user 110.37
sys 0.24
real 104.69
user 104.27
sys 0.18
icarus
------
real 78.26
user 77.97
sys 0.12
real 80.43
user 80.10
sys 0.16
ghdl
----
real 71.13
user 70.98
real 71.11
user 70.95
sys 0.00
vlog
----
real 259.88
user 102.67
sys 156.42
real 264.82
user 106.83
sys 157.19
vcom
----
real 240.16
user 110.00
sys 129.43
real 239.24
user 109.43
sys 129.07
Test: randgen
=====
python
------
real 752.92
user 749.94
sys 1.32
real 744.20
user 741.00
sys 1.56
pypy
----
real 91.83
user 91.07
sys 0.54
real 92.22
user 91.82
sys 0.18
icarus
------
real 192.88
user 192.10
sys 0.37
real 192.26
user 191.46
sys 0.38
ghdl
----
real 33.62
user 30.99
sys 2.56
real 33.56
user 31.01
sys 2.48
vlog
----
real 78.09
user 33.60
sys 42.93
real 77.22
user 33.72
sys 41.85
vcom
----
real 65.39
user 33.47
sys 30.30
real 65.99
user 33.85
sys 30.70
Test: longdiv
=====
python
------
real 766.57
user 764.71
sys 0.14
real 737.65
user 735.88
sys 0.13
pypy
----
real 92.44
user 92.18
sys 0.04
real 84.93
user 84.68
sys 0.05
icarus
------
real 43.27
user 43.17
real 43.97
user 43.86
sys 0.01
ghdl
----
real 223.20
user 222.72
real 223.40
user 222.92
sys 0.00
vlog
----
real 96.00
user 38.55
sys 57.01
real 95.97
user 38.63
sys 56.89
vcom
----
real 101.33
user 49.58
sys 51.29
real 100.33
user 48.69
sys 51.19
Test: findmax
=====
python
------
real 789.07
user 785.74
sys 1.57
real 674.31
user 671.54
sys 1.26
pypy
----
real 124.79
user 124.37
sys 0.10
real 113.09
user 112.44
sys 0.38
icarus
------
real 55.98
user 55.84
sys 0.02
real 56.05
user 55.93
sys 0.00
ghdl
----
real 2258.68
user 2253.75
sys 0.01
real 2262.24
user 2257.29
sys 0.00
vlog
----
real 20.80
user 11.46
sys 9.02
real 20.82
user 11.67
sys 8.83
vcom
----
real 37.03
user 23.82
sys 12.69
real 37.65
user 23.96
sys 13.24