2 from nmigen
.cli
import main
4 from nmigen_add_experiment
import FPADD
5 from ieee754
.fpcommon
.fpbase
import FPOp
9 def __init__(self
, width
):
10 self
.a
= Signal(width
)
11 self
.b
= Signal(width
)
12 self
.o
= Signal(width
)
14 def elaborate(self
, platform
):
16 m
.d
.comb
+= self
.o
.eq(self
.a
+ self
.b
)
21 def __init__(self
, width
):
22 self
.a
= Signal(width
)
23 self
.b
= Signal(width
)
24 self
.o
= Signal(width
)
26 def elaborate(self
, platform
):
28 m
.d
.comb
+= self
.o
.eq(self
.a
- self
.b
)
33 def __init__(self
, width
):
39 self
.int_stb
= Signal()
41 self
.add1
= FPADD(width
)
42 self
.add2
= FPADD(width
)
44 def elaborate(self
, platform
):
46 m
.submodules
.add1
= self
.add1
47 m
.submodules
.add2
= self
.add2
48 # join add1 a to a: add1.in_a = a
49 m
.d
.comb
+= self
.add1
.in_a
.chain_from(self
.a
)
50 # join add1 b to b: add1.in_b = b
51 m
.d
.comb
+= self
.add1
.in_b
.chain_from(self
.b
)
52 # join add2 a to c: add2.in_a = c
53 m
.d
.comb
+= self
.add2
.in_a
.chain_from(self
.c
)
54 # join add2 b to add1 z: add2.in_b = add1.out_z
55 m
.d
.comb
+= self
.add2
.in_b
.chain_inv(self
.add1
.out_z
)
56 # join output from add2 to z: z = add2.out_z
57 m
.d
.comb
+= self
.z
.chain_from(self
.add2
.out_z
)
58 # get at add1's stb signal
59 m
.d
.comb
+= self
.int_stb
.eq(self
.add1
.out_z
.stb
)
61 # m.d.comb += self.o.eq(self.sub.o)
63 # m.d.comb += self.o.eq(self.add.o)
67 if __name__
== "__main__":
69 main(alu
, ports
=alu
.a
.ports() + \