1
0
mirror of https://github.com/myhdl/myhdl.git synced 2024-12-14 07:44:38 +08:00
myhdl/example/arith_lib/test_LeadZeroDet.py
2019-03-12 17:51:12 +02:00

71 lines
1.8 KiB
Python

import unittest
from unittest import TestCase
import myhdl
from myhdl import *
from arith_utils import BEHAVIOR, STRUCTURE
from arith_utils import SLOW, FAST
from LeadZeroDet import LeadZeroDet
import random
random.seed = 1
from random import random
class LeadZeroDetTest(TestCase):
""" Leading zeroes detector unit test class """
def bench(self, width, speed, nrsamples=0):
""" Leading zeroes detector test bench
width -- decrementer bit width
speed -- SLOW, MEDIUM or FAST
nrsamples -- required number of random samples, or exhaustive
test if not set (default)
"""
A = Signal(intbv(0))
ZS = Signal(intbv(0))
ZB = Signal(intbv(0))
beh = LeadZeroDet(width, speed, A, ZB, architecture=BEHAVIOR)
str = LeadZeroDet(width, speed, A, ZS, architecture=STRUCTURE)
@instance
def stimulus():
if nrsamples:
vals = [int(random()*(2**width)) for i in range(nrsamples)]
else:
vals = range(2**width)
for i in vals:
A.next = intbv(i)
yield delay(10)
self.assertEqual(ZS, ZB)
return (beh, str, stimulus)
def testLeadZeroDetSmallSlow(self):
Simulation(self.bench(width=8, speed=SLOW)).run()
def testLeadZeroDetLargeSlow(self):
Simulation(self.bench(width=39, speed=SLOW, nrsamples=16)).run()
def testLeadZeroDetSmallFast(self):
Simulation(self.bench(width=8, speed=FAST)).run()
def testLeadZeroDetLargeFast(self):
Simulation(self.bench(width=39, speed=FAST, nrsamples=16)).run()
if __name__ == "__main__":
unittest.main()