forked from ms3273/ece4750-S01-pymtl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRegIncrPipeline_test.py
71 lines (49 loc) · 1.63 KB
/
RegIncrPipeline_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#=======================================================================
# RegIncrPipeline_test.py
#=======================================================================
import collections
import pytest
import random
from pymtl import *
from RegIncrPipeline import RegIncrPipeline
#-----------------------------------------------------------------------
# gen_simple_test_vectors
#-----------------------------------------------------------------------
def gen_simple_test_vectors( nstages ):
simple_test_vectors = [
( 4, 4 + nstages ),
( 6, 6 + nstages ),
( 2, 2 + nstages ),
(15, 15 + nstages ),
( 8, 8 + nstages ),
( 0, 0 + nstages ),
(10, 10 + nstages ),
]
return simple_test_vectors
#-----------------------------------------------------------------------
# test_simple
#-----------------------------------------------------------------------
def test_simple( test_verilog, nstages=2 ):
# instantiate the model and elaborate it
model = RegIncrPipeline( dtype = 8 )
if test_verilog:
model = TranslationTool( model )
model.elaborate()
# create the simulator
sim = SimulationTool( model )
# verify the model
print
results = collections.deque()
for input_vector, expected_out in gen_simple_test_vectors( nstages ):
model.in_.value = input_vector
results.append( expected_out )
sim.print_line_trace()
sim.cycle()
if sim.ncycles >= nstages:
assert model.out == results.popleft()
# drain the results queue, verify these too
while results:
sim.print_line_trace()
sim.cycle()
assert model.out == results.popleft()
sim.print_line_trace()