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
49 self
.add1
.in_a
.v
.eq(self
.a
.v
),
50 self
.add1
.in_a
.stb
.eq(self
.a
.stb
),
52 self
.add1
.in_b
.v
.eq(self
.b
.v
),
53 self
.add1
.in_b
.stb
.eq(self
.b
.stb
),
55 self
.add2
.in_a
.v
.eq(self
.c
.v
),
56 self
.add2
.in_a
.stb
.eq(self
.c
.stb
),
57 # join add2 b to add1 z
58 self
.add2
.in_b
.v
.eq(self
.add1
.out_z
.v
),
59 self
.add2
.in_b
.stb
.eq(self
.add1
.out_z
.stb
),
63 self
.add1
.in_a
.ack
.eq(self
.a
.ack
),
65 self
.add1
.in_b
.ack
.eq(self
.b
.ack
),
67 self
.add2
.in_a
.ack
.eq(self
.c
.ack
),
68 # join add2 b to add1 z
69 self
.add2
.in_b
.ack
.eq(self
.add1
.out_z
.ack
),
72 # m.d.comb += self.o.eq(self.sub.o)
74 # m.d.comb += self.o.eq(self.add.o)
78 if __name__
== "__main__":
80 main(alu
, ports
=alu
.a
.ports() + \