bcfd563f0d936d3abaabf883474cb55a51b055e7
1 from nmigen
import Module
, Signal
2 from nmigen
.back
.pysim
import Simulator
, Delay
, Passive
3 from nmigen
.test
.utils
import FHDLTestCase
5 from ieee754
.cordic
.sin_cos_pipeline
import CordicBasePipe
6 from ieee754
.cordic
.pipe_data
import CordicPipeSpec
7 from python_sin_cos
import run_cordic
13 class SinCosTestCase(FHDLTestCase
):
14 def run_test(self
, inputs
, outputs
, fracbits
=8):
16 pspec
= CordicPipeSpec(fracbits
=fracbits
)
17 m
.submodules
.dut
= dut
= CordicBasePipe(pspec
)
19 z
= Signal(dut
.p
.data_i
.z0
.shape())
22 x
= Signal(dut
.n
.data_o
.x
.shape())
23 y
= Signal(dut
.n
.data_o
.y
.shape())
26 dut
.p
.data_i
.z0
.eq(z
),
27 dut
.p
.valid_i
.eq(z_valid
),
28 dut
.n
.ready_i
.eq(ready
),
46 vld
= yield dut
.n
.valid_o
49 (sin
, cos
) = outputs
.__next
__()
51 msg
= "cos: {}, expected {}".format(result
, cos
)
52 assert result
== cos
, msg
54 msg
= "sin: {}, expected {}".format(result
, sin
)
55 assert result
== sin
, msg
61 sim
.add_sync_process(writer_process
)
62 sim
.add_sync_process(reader_process
)
63 with sim
.write_vcd("pipeline.vcd", "pipeline.gtkw", traces
=[
71 ZMAX
= int(round(M
* math
.pi
/2))
75 z
= random
.randrange(-ZMAX
, ZMAX
-1)
76 (sin
, cos
) = run_cordic(z
, fracbits
=fracbits
, log
=False)
78 outputs
.append((sin
, cos
))
79 self
.run_test(iter(inputs
), iter(outputs
), fracbits
=fracbits
)
83 if __name__
== "__main__":