ALA: use records for tokens
authorSebastien Bourdeauducq <sebastien@milkymist.org>
Fri, 6 Jan 2012 13:32:00 +0000 (14:32 +0100)
committerSebastien Bourdeauducq <sebastien@milkymist.org>
Fri, 6 Jan 2012 13:32:00 +0000 (14:32 +0100)
migen/flow/ala.py

index 03dd9af2e070ad5f3e0b1710670d07eece4ee2ed..d8693115fd804111b961a8c7a69a154ce9afeb31 100644 (file)
@@ -1,27 +1,29 @@
 from migen.fhdl.structure import *
 from migen.flow.actor import *
+from migen.corelogic.record import *
 from migen.corelogic import divider
 
-class Sum(Actor):
+class Adder(Actor):
        def __init__(self, width):
-               self.a = Signal(BV(width))
-               self.b = Signal(BV(width))
-               self.r = Signal(BV(width+1))
+               self.operands = Record([('a', BV(width)), ('b', BV(width))])
+               self.result = Record(['sum', BV(width+1)])
                Actor.__init__(self,
                        SchedulingModel(SchedulingModel.COMBINATORIAL),
-                       [Sink(self, [self.a, self.b])],
-                       [Source(self, self.r)])
-       
+                       [Sink(self, self.operands)],
+                       [Source(self, self.result)])
+
        def get_process_fragment(self):
-               return Fragment([self.r.eq(self.a + self.b)])
+               return Fragment([self.result.sum.eq(self.operands.a + self.operands.b)])
 
 class Divider(Actor):
        def __init__(self, width):
                self.div = divider.Inst(width)
+               self.operands = Record([('dividend', self.div.dividend_i), ('divisor', self.div.divisor_i)])
+               self.result = Record([('quotient', self.div.quotient_o), ('remainder', self.div.remainder_o)])
                Actor.__init__(self,
                        SchedulingModel(SchedulingModel.SEQUENTIAL, width),
-                       [Sink(self, [self.div.dividend_i]), Sink(self, [self.div.divisor_i])],
-                       [Source(self, [self.div.quotient_o]), Source(self, [self.div.remainder_o])])
-       
+                       [Sink(self, [self.operands])],
+                       [Source(self, [self.result])])
+
        def get_process_fragment(self):
                return self.div.get_fragment() + Fragment([self.div.start_i.eq(self.trigger)])