1 from nmigen
import Module
, Signal
2 from nmigen
.back
.pysim
import Simulator
, Delay
3 from nmutil
.formaltest
import FHDLTestCase
5 from ieee754
.cordic
.sin_cos
import CORDIC
6 from python_sin_cos
import run_cordic
12 class SinCosTestCase(FHDLTestCase
):
13 def run_test(self
, zin
=0, fracbits
=8, expected_sin
=0, expected_cos
=0):
17 m
.submodules
.dut
= dut
= CORDIC(fracbits
)
18 z
= Signal(dut
.z0
.shape())
21 sin
= Signal(dut
.sin
.shape())
22 cos
= Signal(dut
.cos
.shape())
42 for i
in range(fracbits
+ 5):
46 msg
= "sin: {}, expected {}".format(result
, expected_sin
)
47 assert result
== expected_sin
, msg
49 msg
= "cos: {}, expected {}".format(result
, expected_cos
)
50 assert result
== expected_cos
, msg
54 sim
.add_sync_process(process
)
55 with sim
.write_vcd("sin_cos.vcd", "sin_cos.gtkw", traces
=[
56 z
, cos
, sin
, ready
, start
]):
59 def run_test_assert(self
, z
, fracbits
=8):
60 (sin
, cos
) = run_cordic(z
, fracbits
=fracbits
, log
=False)
61 self
.run_test(zin
=z
, fracbits
=fracbits
,
62 expected_sin
=sin
, expected_cos
=cos
)
65 self
.run_test_assert(0)
68 self
.run_test_assert(-6)
73 ZMAX
= int(round(M
* math
.pi
/2))
75 z
= random
.randrange(-ZMAX
, ZMAX
-1)
76 self
.run_test_assert(z
, fracbits
=fracbits
)
79 if __name__
== "__main__":