Improved tests/share/generate.py
authorClifford Wolf <clifford@clifford.at>
Sun, 20 Jul 2014 15:06:57 +0000 (17:06 +0200)
committerClifford Wolf <clifford@clifford.at>
Sun, 20 Jul 2014 15:06:57 +0000 (17:06 +0200)
tests/share/generate.py

index 07821b72130d8a32df638f0c8939872163e58b0a..fa17080f9c52219873d3c5abcb1bc76d29e2804e 100644 (file)
@@ -15,9 +15,15 @@ def redirect_stdout(new_target):
     finally:
         sys.stdout = old_target
 
+def maybe_plus_e(expr):
+    if random.randint(0, 4) == 0:
+        return "(%s + e)" % expr
+    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, s, y);' % (idx))
+        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(['+', '-', '*', '/', '%', '<<', '>>', '<<<', '>>>'])
@@ -25,9 +31,13 @@ for idx in range(100):
         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(a %s b) : %s(c %s d);' % (random.choice(['', '$signed', '$unsigned']), op, random.choice(['', '$signed', '$unsigned']), op))
+        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')
     with file('temp/uut_%05d.ys' % idx, 'w') as f, redirect_stdout(f):
         print('read_verilog temp/uut_%05d.v' % idx)