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():
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]