1 from nmigen
.sim
import Delay
2 from nmutil
.clz
import CLZ
, clz
3 from nmutil
.sim_util
import do_sim
7 def reference_clz(v
, width
):
8 assert isinstance(width
, int) and 0 <= width
9 assert isinstance(v
, int) and 0 <= v
< 1 << width
10 msb
= 1 << (width
- 1)
20 class TestCLZ(unittest
.TestCase
):
22 assert isinstance(width
, int) and 0 <= width
26 for inp
in range(1 << width
):
27 expected
= reference_clz(inp
, width
)
28 with self
.subTest(inp
=hex(inp
), expected
=expected
):
29 yield dut
.sig_in
.eq(inp
)
32 py_lz
= clz(inp
, width
)
33 with self
.subTest(sim_lz
=sim_lz
, py_lz
=py_lz
):
34 self
.assertEqual(sim_lz
, expected
)
35 self
.assertEqual(py_lz
, expected
)
36 with
do_sim(self
, dut
, [dut
.sig_in
, dut
.lz
]) as sim
:
37 sim
.add_process(process
)
77 if __name__
== "__main__":