From c9caca5583aa11c10adf0902c0546e4c25b7d681 Mon Sep 17 00:00:00 2001 From: Luke Kenneth Casson Leighton Date: Sat, 23 Feb 2019 12:40:41 +0000 Subject: [PATCH] use function to get chain of v/ack/stb --- src/add/dual_add_experiment.py | 32 ++++++++++---------------------- src/add/fpbase.py | 6 ++++++ 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/add/dual_add_experiment.py b/src/add/dual_add_experiment.py index de07e778..a70c9335 100644 --- a/src/add/dual_add_experiment.py +++ b/src/add/dual_add_experiment.py @@ -44,28 +44,16 @@ class ALU: m = Module() m.submodules.add1 = self.add1 m.submodules.add2 = self.add2 - m.d.comb += [ - # join add1 a to a: add1.in_a = a - self.add1.in_a.v.eq(self.a.v), - self.add1.in_a.stb.eq(self.a.stb), - self.a.ack.eq(self.add1.in_a.ack), - # join add1 b to b: add1.in_b = b - self.add1.in_b.v.eq(self.b.v), - self.add1.in_b.stb.eq(self.b.stb), - self.b.ack.eq(self.add1.in_b.ack), - # join add2 a to c: add2.in_a = c - self.add2.in_a.v.eq(self.c.v), - self.add2.in_a.stb.eq(self.c.stb), - self.c.ack.eq(self.add2.in_a.ack), - # join add2 b to add1 z: add2.in_b = add1.out_z - self.add2.in_b.v.eq(self.add1.out_z.v), - self.add2.in_b.stb.eq(self.add1.out_z.stb), - self.add1.out_z.ack.eq(self.add2.in_b.ack), - # join output from add2 to z: z = add2.out_z - self.z.v.eq(self.add2.out_z.v), - self.z.stb.eq(self.add2.out_z.stb), - self.add2.out_z.ack.eq(self.z.ack), - ] + # join add1 a to a: add1.in_a = a + m.d.comb += self.add1.in_a.chain_from(self.a) + # join add1 b to b: add1.in_b = b + m.d.comb += self.add1.in_b.chain_from(self.b) + # join add2 a to c: add2.in_a = c + m.d.comb += self.add2.in_a.chain_from(self.c) + # join add2 b to add1 z: add2.in_b = add1.out_z + m.d.comb += self.add2.in_b.chain_from(self.add1.out_z) + # join output from add2 to z: z = add2.out_z + m.d.comb += self.z.chain_from(self.add2.out_z) #with m.If(self.op): # m.d.comb += self.o.eq(self.sub.o) #with m.Else(): diff --git a/src/add/fpbase.py b/src/add/fpbase.py index 961824f0..6a135705 100644 --- a/src/add/fpbase.py +++ b/src/add/fpbase.py @@ -342,6 +342,12 @@ class FPOp: self.stb = Signal() self.ack = Signal() + def chain_from(self, in_op): + return [self.v.eq(in_op.v), # receive value + self.stb.eq(in_op.stb), # receive STB + in_op.ack.eq(self.ack), # send ACK + ] + def ports(self): return [self.v, self.stb, self.ack] -- 2.30.2