From: Luke Kenneth Casson Leighton Date: Sat, 23 Feb 2019 12:33:31 +0000 (+0000) Subject: yippee got dual add chained together X-Git-Tag: ls180-24jan2020~1833 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6487a34301595940debf733c6c0a7053fd30cefb;p=ieee754fpu.git yippee got dual add chained together --- diff --git a/src/add/dual_add_experiment.py b/src/add/dual_add_experiment.py index 136294d3..de07e778 100644 --- a/src/add/dual_add_experiment.py +++ b/src/add/dual_add_experiment.py @@ -45,28 +45,26 @@ class ALU: m.submodules.add1 = self.add1 m.submodules.add2 = self.add2 m.d.comb += [ - # join add1 a to a + # 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), - # join add1 b to b + 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), - # join add2 a to c + 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), - # join add2 b to add1 z + 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), - ] - m.d.sync += [ - # join add1 a to a - self.add1.in_a.ack.eq(self.a.ack), - # join add1 b to b - self.add1.in_b.ack.eq(self.b.ack), - # join add2 a to c - self.add2.in_a.ack.eq(self.c.ack), - # join add2 b to add1 z - self.add2.in_b.ack.eq(self.add1.out_z.ack), + 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), ] #with m.If(self.op): # m.d.comb += self.o.eq(self.sub.o) diff --git a/src/add/test_dual.py b/src/add/test_dual.py index 43f28404..410aba91 100644 --- a/src/add/test_dual.py +++ b/src/add/test_dual.py @@ -20,6 +20,8 @@ def get_case(dut, a, b, c): yield dut.b.v.eq(b) yield dut.b.stb.eq(1) + yield + yield b_ack = (yield dut.b.ack) assert b_ack == 0 @@ -28,6 +30,9 @@ def get_case(dut, a, b, c): out_z_stb = (yield dut.z.stb) if not out_z_stb: continue + + out_z = yield dut.z.v + yield dut.a.stb.eq(0) yield dut.b.stb.eq(0) yield dut.c.stb.eq(0) @@ -38,7 +43,6 @@ def get_case(dut, a, b, c): yield break - out_z = yield dut.z.v return out_z def check_case(dut, a, b, c, z):