class Multiplier(Component): a: In(Q(8, 8)) b: In(Q(8, 8)) x: Out(Q(16, 16)) y: Out(Q(8, 8)) z: Out(Q(8, 4)) w: Out(Q(8, 0)) def elaborate(self, platform): m = Module() m.d.comb += self.x.eq(self.a * self.b) m.d.comb += self.y.eq(self.a * self.b) m.d.comb += self.z.eq(self.a * self.b) m.d.comb += self.w.eq(self.a * self.b) return m dut = Multiplier() def bench(): yield dut.a.eq(1.5) yield dut.b.eq(3.3) yield Settle() for sig in [dut.x, dut.y, dut.z, dut.w]: print((yield sig.as_value()) / 2**sig.f_width) ''' $ ./test_am_fp.py 4.951171875 4.953125 4.9375 5.0 '''