| 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
'''
|