1 from nmigen
import Signal
, Const
2 from nmutil
.dynamicpipe
import SimpleHandshakeRedir
6 class CordicInitialData
:
8 def __init__(self
, pspec
):
10 self
.z0
= Signal(range(-ZMAX
, ZMAX
), name
="z") # denormed result
16 return [self
.z0
.eq(i
.z0
)]
21 def __init__(self
, pspec
):
25 self
.x
= Signal(range(-M
, M
+1), name
="x") # operand a
26 self
.y
= Signal(range(-M
, M
+1), name
="y") # operand b
27 self
.z
= Signal(range(-ZMAX
, ZMAX
), name
="z") # denormed result
35 ret
= [self
.z
.eq(i
.z
), self
.x
.eq(i
.x
), self
.y
.eq(i
.y
)]
40 def __init__(self
, fracbits
, rounds_per_stage
):
41 self
.fracbits
= fracbits
42 # Number of cordic operations per pipeline stage
43 self
.rounds_per_stage
= rounds_per_stage
44 self
.M
= (1 << fracbits
)
45 self
.ZMAX
= int(round(self
.M
* math
.pi
/2))
46 zm
= Const(-self
.ZMAX
)
47 self
.iterations
= zm
.width
- 1
49 self
.pipekls
= SimpleHandshakeRedir