summaryrefslogtreecommitdiff
path: root/tests/share
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-07-21 12:04:56 +0200
committerClifford Wolf <clifford@clifford.at>2014-07-21 12:18:29 +0200
commit3cb61d03f8722fddfa14877accae1b3ca51e3926 (patch)
treee7703c629396ae4da9c666f5e934529e3663e66c /tests/share
parentc54d1f2ad1a781363f9c35e4f7266f4560a6aba8 (diff)
Wider range of cell types supported in "share" pass
Diffstat (limited to 'tests/share')
-rw-r--r--tests/share/generate.py60
-rwxr-xr-xtests/share/run-test.sh11
2 files changed, 52 insertions, 19 deletions
diff --git a/tests/share/generate.py b/tests/share/generate.py
index 9e5bef7a..e3b4bc96 100644
--- a/tests/share/generate.py
+++ b/tests/share/generate.py
@@ -15,36 +15,58 @@ def redirect_stdout(new_target):
finally:
sys.stdout = old_target
-def maybe_plus_e(expr):
+def random_plus_x():
+ return "%s x" % random.choice(['+', '+', '+', '-', '-', '|', '&', '^'])
+
+def maybe_plus_x(expr):
if random.randint(0, 4) == 0:
- return "(%s + e)" % expr
+ return "(%s %s)" % (expr, random_plus_x())
else:
return expr
for idx in range(100):
with file('temp/uut_%05d.v' % idx, 'w') as f, redirect_stdout(f):
- print('module uut_%05d(a, b, c, d, e, s, y);' % (idx))
- ac_signed = random.choice(['', ' signed'])
- bd_signed = random.choice(['', ' signed'])
- op = random.choice(['+', '-', '*', '/', '%', '<<', '>>', '<<<', '>>>'])
- print(' input%s [%d:0] a;' % (ac_signed, random.randint(0, 8)))
- print(' input%s [%d:0] b;' % (bd_signed, random.randint(0, 8)))
- print(' input%s [%d:0] c;' % (ac_signed, random.randint(0, 8)))
- print(' input%s [%d:0] d;' % (bd_signed, random.randint(0, 8)))
- print(' input signed [%d:0] e;' % random.randint(0, 8))
- print(' input s;')
- print(' output [%d:0] y;' % random.randint(0, 8))
- print(' assign y = (s ? %s(%s %s %s) : %s(%s %s %s))%s;' %
- (random.choice(['', '$signed', '$unsigned']), maybe_plus_e('a'), op, maybe_plus_e('b'),
- random.choice(['', '$signed', '$unsigned']), maybe_plus_e('c'), op, maybe_plus_e('d'),
- ' + e' if random.randint(0, 4) == 0 else ''))
- print('endmodule')
+ if random.choice(['bin', 'uni']) == 'bin':
+ print('module uut_%05d(a, b, c, d, x, s, y);' % (idx))
+ op = random.choice([
+ random.choice(['+', '-', '*', '/', '%']),
+ random.choice(['<', '<=', '==', '!=', '===', '!==', '>=', '>' ]),
+ random.choice(['<<', '>>', '<<<', '>>>']),
+ random.choice(['|', '&', '^', '~^', '||', '&&']),
+ ])
+ print(' input%s [%d:0] a;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input%s [%d:0] b;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input%s [%d:0] c;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input%s [%d:0] d;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input%s [%d:0] x;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input s;')
+ print(' output [%d:0] y;' % random.randint(0, 8))
+ print(' assign y = (s ? %s(%s %s %s) : %s(%s %s %s))%s;' %
+ (random.choice(['', '$signed', '$unsigned']), maybe_plus_x('a'), op, maybe_plus_x('b'),
+ random.choice(['', '$signed', '$unsigned']), maybe_plus_x('c'), op, maybe_plus_x('d'),
+ random_plus_x() if random.randint(0, 4) == 0 else ''))
+ print('endmodule')
+ else:
+ print('module uut_%05d(a, b, x, s, y);' % (idx))
+ op = random.choice(['~', '-', '!'])
+ print(' input%s [%d:0] a;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input%s [%d:0] b;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input%s [%d:0] x;' % (random.choice(['', ' signed']), random.randint(0, 8)))
+ print(' input s;')
+ print(' output [%d:0] y;' % random.randint(0, 8))
+ print(' assign y = (s ? %s(%s%s) : %s(%s%s))%s;' %
+ (random.choice(['', '$signed', '$unsigned']), op, maybe_plus_x('a'),
+ random.choice(['', '$signed', '$unsigned']), op, maybe_plus_x('b'),
+ random_plus_x() if random.randint(0, 4) == 0 else ''))
+ print('endmodule')
with file('temp/uut_%05d.ys' % idx, 'w') as f, redirect_stdout(f):
print('read_verilog temp/uut_%05d.v' % idx)
print('proc;;')
print('copy uut_%05d gold' % idx)
print('rename uut_%05d gate' % idx)
- print('share -aggressive gate')
+ print('tee -a temp/all_share_log.txt log')
+ print('tee -a temp/all_share_log.txt log #job# uut_%05d' % idx)
+ print('tee -a temp/all_share_log.txt share -aggressive gate')
print('miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter')
print('sat -set-def-inputs -verify -prove trigger 0 -show-inputs -show-outputs miter')
diff --git a/tests/share/run-test.sh b/tests/share/run-test.sh
index d511c909..203d6fcd 100755
--- a/tests/share/run-test.sh
+++ b/tests/share/run-test.sh
@@ -1,4 +1,8 @@
#!/bin/bash
+
+# run this test many times:
+# time bash -c 'for ((i=0; i<100; i++)); do echo "-- $i --"; bash run-test.sh || exit 1; done'
+
set -e
rm -rf temp
@@ -14,3 +18,10 @@ for i in $( ls temp/*.ys | sed 's,[^0-9],,g; s,^0*\(.\),\1,g;' ); do
done
echo
+failed_share=$( echo $( gawk '/^#job#/ { j=$2; db[j]=0; } /^Removing [24] cells/ { delete db[j]; } END { for (j in db) print(j); }' temp/all_share_log.txt ) )
+if [ -n "$failed_share" ]; then
+ echo "Resource sharing failed for the following test cases: $failed_share"
+ false
+fi
+
+exit 0