6 from contextlib
import contextmanager
10 def redirect_stdout(new_target
):
11 old_target
, sys
.stdout
= sys
.stdout
, new_target
15 sys
.stdout
= old_target
19 return "%s x" % random
.choice(['+', '+', '+', '-', '-', '|', '&', '^'])
22 def maybe_plus_x(expr
):
23 if random
.randint(0, 4) == 0:
24 return "(%s %s)" % (expr
, random_plus_x())
29 parser
= argparse
.ArgumentParser(
30 formatter_class
=argparse
.ArgumentDefaultsHelpFormatter
)
31 parser
.add_argument('-S', '--seed', type=int, help='seed for PRNG')
32 parser
.add_argument('-c',
36 help='number of test cases to generate')
37 args
= parser
.parse_args()
39 if args
.seed
is not None:
40 print("PRNG seed: %d" % args
.seed
)
41 random
.seed(args
.seed
)
43 for idx
in range(args
.count
):
44 with
open('temp/uut_%05d.v' % idx
, 'w') as f
:
45 with
redirect_stdout(f
):
46 print('module uut_%05d(a, b, c, s, y);' % (idx
))
48 random
.choice(['+', '-', '*', '/', '%']),
49 random
.choice(['<', '<=', '==', '!=', '===', '!==', '>=',
51 random
.choice(['<<', '>>', '<<<', '>>>']),
52 random
.choice(['|', '&', '^', '~^', '||', '&&']),
54 print(' input%s [%d:0] a;' % (random
.choice(['', ' signed']), 8))
55 print(' input%s [%d:0] b;' % (random
.choice(['', ' signed']), 8))
56 print(' input%s [%d:0] c;' % (random
.choice(['', ' signed']), 8))
58 print(' output [%d:0] y;' % 8)
63 cast1
= random
.choice(['', '$signed', '$unsigned'])
64 cast2
= random
.choice(['', '$signed', '$unsigned'])
65 print(' assign y = (s ? %s(%s %s %s) : %s(%s %s %s));' %
66 (cast1
, ops1
[0], op
, ops1
[1],
67 cast2
, ops2
[0], op
, ops2
[1]))
70 with
open('temp/uut_%05d.ys' % idx
, 'w') as f
:
71 with
redirect_stdout(f
):
72 print('read_verilog temp/uut_%05d.v' % idx
)
74 print('copy uut_%05d gold' % idx
)
75 print('rename uut_%05d gate' % idx
)
76 print('tee -a temp/all_share_log.txt log')
77 print('tee -a temp/all_share_log.txt log #job# uut_%05d' % idx
)
78 print('tee -a temp/all_share_log.txt opt gate')
79 print('tee -a temp/all_share_log.txt opt_share gate')
80 print('tee -a temp/all_share_log.txt opt_clean gate')
82 'miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter'
85 'sat -set-def-inputs -verify -prove trigger 0 -show-inputs -show-outputs miter'