2003-01-23 22:33:19 +00:00
|
|
|
from __future__ import generators
|
2003-01-28 14:21:56 +00:00
|
|
|
from myhdl import Signal, intbv
|
2003-01-23 22:33:19 +00:00
|
|
|
from arith_utils import BEHAVIOR
|
|
|
|
from PrefixAnd import PrefixAnd
|
|
|
|
|
|
|
|
def Dec(width, speed, A, Z, architecture=BEHAVIOR):
|
|
|
|
|
|
|
|
def Behavioral():
|
|
|
|
while 1:
|
|
|
|
yield A
|
|
|
|
Z.next = A.val - 1
|
|
|
|
|
|
|
|
def Structural():
|
|
|
|
AI = Signal(intbv())
|
|
|
|
PO = Signal(intbv())
|
|
|
|
prefix = PrefixAnd(width, speed, AI, PO)
|
|
|
|
def logic():
|
|
|
|
while 1:
|
|
|
|
yield A, PO
|
|
|
|
AI.next = ~A.val
|
2003-01-28 14:21:56 +00:00
|
|
|
Z.next = A.val ^ intbv.concat(PO.val[width-1:], '1')
|
2003-01-23 22:33:19 +00:00
|
|
|
return [prefix, logic()]
|
|
|
|
|
|
|
|
if architecture == BEHAVIOR:
|
|
|
|
return Behavioral()
|
|
|
|
else:
|
|
|
|
return Structural()
|
|
|
|
|
|
|
|
|