1 from nmutil
.singlepipe
import ControlBase
2 from nmutil
.concurrentunit
import ReservationStations
, num_bits
3 from nmutil
.pipemodbase
import PipeModBaseChain
5 from ieee754
.cordic
.sin_cos_pipe_stage
import (
6 CordicStage
, CordicInitialStage
)
7 from ieee754
.cordic
.pipe_data
import (CordicPipeSpec
, CordicData
,
10 class CordicPipeChain(PipeModBaseChain
):
11 def __init__(self
, pspec
, stages
):
13 super().__init
__(pspec
)
19 class CordicBasePipe(ControlBase
):
20 def __init__(self
, pspec
):
21 ControlBase
.__init
__(self
)
22 self
.initstage
= CordicPipeChain(pspec
,
23 [CordicInitialStage(pspec
)])
24 self
.cordicstages
= []
25 for i
in range(pspec
.iterations
):
26 stage
= CordicPipeChain(pspec
,
27 [CordicStage(pspec
, i
)])
28 self
.cordicstages
.append(stage
)
30 self
._eqs
= self
.connect([self
.initstage
] + self
.cordicstages
)
32 def elaborate(self
, platform
):
33 m
= ControlBase
.elaborate(self
, platform
)
34 m
.submodules
.init
= self
.initstage
35 for i
, stage
in enumerate(self
.cordicstages
):
36 setattr(m
.submodules
, "cordic%d" % i
,