mirror of
https://github.com/myhdl/myhdl.git
synced 2024-12-14 07:44:38 +08:00
71 lines
1.8 KiB
Python
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()
|
|
|
|
|
|
|
|
|
|
|
|
|