2 from nmigen
.cli
import main
4 from nmigen_add_experiment
import FPADD
5 from 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
):
40 self
.add1
= FPADD(width
)
41 self
.add2
= FPADD(width
)
43 def elaborate(self
, platform
):
45 m
.submodules
.add1
= self
.add1
46 m
.submodules
.add2
= self
.add2
48 # join add1 a to a: add1.in_a = a
49 self
.add1
.in_a
.v
.eq(self
.a
.v
),
50 self
.add1
.in_a
.stb
.eq(self
.a
.stb
),
51 self
.a
.ack
.eq(self
.add1
.in_a
.ack
),
52 # join add1 b to b: add1.in_b = b
53 self
.add1
.in_b
.v
.eq(self
.b
.v
),
54 self
.add1
.in_b
.stb
.eq(self
.b
.stb
),
55 self
.b
.ack
.eq(self
.add1
.in_b
.ack
),
56 # join add2 a to c: add2.in_a = c
57 self
.add2
.in_a
.v
.eq(self
.c
.v
),
58 self
.add2
.in_a
.stb
.eq(self
.c
.stb
),
59 self
.c
.ack
.eq(self
.add2
.in_a
.ack
),
60 # join add2 b to add1 z: add2.in_b = add1.out_z
61 self
.add2
.in_b
.v
.eq(self
.add1
.out_z
.v
),
62 self
.add2
.in_b
.stb
.eq(self
.add1
.out_z
.stb
),
63 self
.add1
.out_z
.ack
.eq(self
.add2
.in_b
.ack
),
64 # join output from add2 to z: z = add2.out_z
65 self
.z
.v
.eq(self
.add2
.out_z
.v
),
66 self
.z
.stb
.eq(self
.add2
.out_z
.stb
),
67 self
.add2
.out_z
.ack
.eq(self
.z
.ack
),
70 # m.d.comb += self.o.eq(self.sub.o)
72 # m.d.comb += self.o.eq(self.add.o)
76 if __name__
== "__main__":
78 main(alu
, ports
=alu
.a
.ports() + \