1fc7ea0b94facaa18eb74d588de59d301cae7c94
1 from nmigen
import Elaboratable
, Signal
, Module
2 from nmigen
.cli
import main
5 class Adder(Elaboratable
):
6 def __init__(self
, width
):
11 def elaborate(self
, platform
):
13 m
.d
.comb
+= self
.o
.eq(self
.a
+ self
.b
)
17 class Subtractor(Elaboratable
):
18 def __init__(self
, width
):
19 self
.a
= Signal(width
)
20 self
.b
= Signal(width
)
21 self
.o
= Signal(width
)
23 def elaborate(self
, platform
):
25 m
.d
.comb
+= self
.o
.eq(self
.a
- self
.b
)
29 class ALU(Elaboratable
):
30 def __init__(self
, width
):
32 self
.a
= Signal(width
)
33 self
.b
= Signal(width
)
34 self
.o
= Signal(width
)
36 self
.add
= Adder(width
)
37 self
.sub
= Subtractor(width
)
39 def elaborate(self
, platform
):
41 m
.submodules
.add
= self
.add
42 m
.submodules
.sub
= self
.sub
44 self
.add
.a
.eq(self
.a
),
45 self
.sub
.a
.eq(self
.a
),
46 self
.add
.b
.eq(self
.b
),
47 self
.sub
.b
.eq(self
.b
),
50 m
.d
.comb
+= self
.o
.eq(self
.sub
.o
)
52 m
.d
.comb
+= self
.o
.eq(self
.add
.o
)
56 if __name__
== "__main__":
58 main(alu
, ports
=[alu
.op
, alu
.a
, alu
.b
, alu
.o
])