1 from nmigen
import Module
, Signal
2 from nmigen
.back
.pysim
import Simulator
, Delay
3 from nmigen
.test
.utils
import FHDLTestCase
5 from ieee754
.cordic
.fpsin_cos
import CORDIC
6 from ieee754
.fpcommon
.fpbase
import FPNumBaseRecord
7 from python_sin_cos
import run_cordic
8 from sfpy
import Float16
, Float32
14 class SinCosTestCase(FHDLTestCase
):
15 def run_test(self
, zin
=0, fracbits
=8, expected_sin
=0, expected_cos
=0):
19 m
.submodules
.dut
= dut
= CORDIC(32)
20 z
= Signal(dut
.z0
.width
)
23 sin
= Signal(dut
.sin
.shape())
24 cos
= Signal(dut
.cos
.shape())
38 yield z
.eq(zin
.get_bits())
44 for i
in range(fracbits
* 3):
48 sim
.add_sync_process(process
)
49 with sim
.write_vcd("fpsin_cos.vcd", "fpsin_cos.gtkw", traces
=[
50 cos
, sin
, ready
, start
]):
53 def run_test_assert(self
, z
, fracbits
=8):
54 self
.run_test(zin
=z
, fracbits
=fracbits
)
58 self
.run_test_assert(x
)
61 # self.run_test_assert(-6)
63 # def test_rand(self):
66 # ZMAX = int(round(M * math.pi/2))
67 # for i in range(500):
68 # z = random.randrange(-ZMAX, ZMAX-1)
69 # self.run_test_assert(z, fracbits=fracbits)
72 if __name__
== "__main__":