from myhdl import * from arith_utils import BEHAVIOR from PrefixAnd import PrefixAnd def Dec(width, speed, A, Z, architecture=BEHAVIOR): """ Decrementer module. width -- bitwidth of input and output speed -- SLOW, MEDIUM, or FAST performance A -- input Z -- output architecture -- BEHAVIOR or STRUCTURE architecture selection """ @instance def Behavioral(): while 1: yield A Z.next = A - 1 def Structural(): AI = Signal(intbv(0)) PO = Signal(intbv(0)) prefix = PrefixAnd(width, speed, AI, PO) @instance def logic(): while 1: yield A, PO AI.next = ~A Z.next = A ^ concat(PO[width-1:], '1') return [prefix, logic] if architecture == BEHAVIOR: return Behavioral else: return Structural()