mirror of https://github.com/XS-MLVP/picker.git
48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
try:
|
|
from UT_RandomGenerator import *
|
|
except:
|
|
try:
|
|
from RandomGenerator import *
|
|
except:
|
|
from __init__ import *
|
|
|
|
import random
|
|
|
|
|
|
class LSRF_16:
|
|
def __init__(self, seed):
|
|
self.state = seed & ((1 << 16) - 1)
|
|
|
|
def step(self):
|
|
new_bit = (self.state >> 15) ^ (self.state >> 14) & 1
|
|
self.state = ((self.state << 1) | new_bit) & ((1 << 16) - 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
dut = DUTRandomGenerator()
|
|
dut.InitClock("clk")
|
|
|
|
seed = random.randint(0, 2**16 - 1)
|
|
|
|
dut.seed.value = seed
|
|
ref = LSRF_16(seed)
|
|
|
|
# reset
|
|
dut.reset.value = 1
|
|
dut.Step(1)
|
|
dut.reset.value = 0
|
|
dut.Step(1)
|
|
|
|
for i in range(50):
|
|
if i % 10 == 0:
|
|
dut.FlushWaveform()
|
|
dut.SetWaveform(f"dut{i}.fsdb")
|
|
print(f"Cycle {i}, DUT: {dut.random_number.value:x}, REF: {ref.state:x}")
|
|
assert dut.random_number.value == ref.state, "Mismatch"
|
|
dut.Step(1)
|
|
ref.step()
|
|
|
|
print("Test Passed, destroy UT_RandomGenerator")
|
|
dut.Finish()
|
|
|