3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2026-05-03 08:55:15 +00:00

Did share, opt_share and fsm

This commit is contained in:
Miodrag Milanovic 2026-03-20 12:47:15 +01:00
parent 2b10385edd
commit 799c07a126
13 changed files with 122 additions and 253 deletions

View file

@ -1 +1 @@
temp
uut_*.*

View file

@ -1,48 +1,42 @@
#!/usr/bin/env python3
import sys
sys.path.append("..")
import gen_tests_makefile
import argparse
import sys
import random
from contextlib import contextmanager
@contextmanager
def redirect_stdout(new_target):
old_target, sys.stdout = sys.stdout, new_target
try:
yield new_target
finally:
sys.stdout = old_target
from pathlib import Path
def random_plus_x():
return "%s x" % random.choice(['+', '+', '+', '-', '-', '|', '&', '^'])
def maybe_plus_x(expr):
if random.randint(0, 4) == 0:
return "(%s %s)" % (expr, random_plus_x())
else:
return expr
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-S', '--seed', type=int, help='seed for PRNG')
parser.add_argument('-c',
'--count',
type=int,
default=100,
help='number of test cases to generate')
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-S', '--seed', type = int, help = 'seed for PRNG')
parser.add_argument('-c', '--count', type = int, default = 100, help = 'number of test cases to generate')
args = parser.parse_args()
if args.seed is not None:
print("PRNG seed: %d" % args.seed)
random.seed(args.seed)
seed = args.seed
if seed is None:
seed = random.randrange(sys.maxsize)
print("opt_share PRNG seed: %d" % seed)
random.seed(seed)
for path in Path(".").glob("uut_*.*"):
if path.is_file():
path.unlink()
for idx in range(args.count):
with open('temp/uut_%05d.v' % idx, 'w') as f:
with redirect_stdout(f):
with open('uut_%05d.v' % idx, 'w') as f:
with gen_tests_makefile.redirect_stdout(f):
print('module uut_%05d(a, b, c, s, y);' % (idx))
op = random.choice([
random.choice(['+', '-', '*', '/', '%']),
@ -67,20 +61,20 @@ for idx in range(args.count):
cast2, ops2[0], op, ops2[1]))
print('endmodule')
with open('temp/uut_%05d.ys' % idx, 'w') as f:
with redirect_stdout(f):
print('read_verilog temp/uut_%05d.v' % idx)
with open('uut_%05d.ys' % idx, 'w') as f:
with gen_tests_makefile.redirect_stdout(f):
print('read_verilog uut_%05d.v' % idx)
print('proc;;')
print('copy uut_%05d gold' % idx)
print('rename uut_%05d gate' % idx)
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 opt gate')
print('tee -a temp/all_share_log.txt opt_share gate')
print('tee -a temp/all_share_log.txt opt_clean gate')
print('tee -o uut_%05d.txt opt gate' % idx)
print('tee -o uut_%05d.txt opt_share gate' % idx)
print('tee -o uut_%05d.txt opt_clean gate' % idx)
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'
)
gen_tests_makefile.generate(["--yosys-scripts"])

View file

@ -1,51 +0,0 @@
#!/usr/bin/env bash
source ../common-env.sh
# 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
OPTIND=1
count=100
seed="" # default to no seed specified
while getopts "c:S:" opt
do
case "$opt" in
c) count="$OPTARG" ;;
S) seed="-S $OPTARG" ;;
esac
done
shift "$((OPTIND-1))"
rm -rf temp
mkdir -p temp
echo "generating tests.."
python3 generate.py -c $count $seed
{
echo ".PHONY: all"
echo "all:"
for i in $( ls temp/*.ys | sed 's,[^0-9],,g; s,^0*\(.\),\1,g;' ); do
idx=$( printf "%05d" $i )
echo ".PHONY: test-$idx"
echo "all: test-$idx"
echo "test-$idx:"
printf "\t@%s\n" \
"echo -n [$i]" \
"../../yosys -ql temp/uut_${idx}.log temp/uut_${idx}.ys >/dev/null 2>&1"
done
} > temp/makefile
echo "running tests.."
${MAKE:-make} -f temp/makefile
echo
failed_share=$( echo $( gawk '/^#job#/ { j=$2; db[j]=0; } /^Removing [246] 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