1 # IEEE Floating Point Adder (Single Precision)
2 # Copyright (C) 2019 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
4 from nmigen
import Signal
5 from ieee754
.fpcommon
.fpbase
import FPRoundingMode
6 from ieee754
.fpcommon
.getop
import FPPipeContext
11 def __init__(self
, pspec
):
14 self
.ctx
= FPPipeContext(pspec
)
16 for i
in range(n_ops
):
17 name
= chr(ord("a")+i
)
18 operand
= Signal(width
, name
=name
)
19 setattr(self
, name
, operand
)
21 self
.muxid
= self
.ctx
.muxid
# make muxid available here: complicated
24 self
.rm
= Signal(FPRoundingMode
, reset
=FPRoundingMode
.DEFAULT
)
29 for op1
, op2
in zip(self
.ops
, i
.ops
):
30 ret
.append(op1
.eq(op2
))
31 ret
.append(self
.ctx
.eq(i
.ctx
))
32 ret
.append(self
.rm
.eq(i
.rm
))