Added "test_autotb -seed" (and "autotest.sh -S")

This commit is contained in:
Clifford Wolf 2016-08-06 13:32:29 +02:00
parent 90c17aad56
commit 88a67afa7d
2 changed files with 12 additions and 5 deletions

View File

@ -71,7 +71,7 @@ static std::string idy(std::string str1, std::string str2 = std::string(), std::
return id(str1);
}
static void autotest(std::ostream &f, RTLIL::Design *design, int num_iter)
static void autotest(std::ostream &f, RTLIL::Design *design, int num_iter, int seed)
{
f << stringf("`ifndef outfile\n");
f << stringf("\t`define outfile \"/dev/stdout\"\n");
@ -85,7 +85,7 @@ static void autotest(std::ostream &f, RTLIL::Design *design, int num_iter)
f << stringf("reg [31:0] xorshift128_x = 123456789;\n");
f << stringf("reg [31:0] xorshift128_y = 362436069;\n");
f << stringf("reg [31:0] xorshift128_z = 521288629;\n");
f << stringf("reg [31:0] xorshift128_w = %u; // <-- seed value\n", int(time(NULL)));
f << stringf("reg [31:0] xorshift128_w = %u; // <-- seed value\n", seed ? seed : int(time(NULL)));
f << stringf("reg [31:0] xorshift128_t;\n\n");
f << stringf("task xorshift128;\n");
f << stringf("begin\n");
@ -342,6 +342,7 @@ struct TestAutotbBackend : public Backend {
virtual void execute(std::ostream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design)
{
int num_iter = 1000;
int seed = 0;
log_header(design, "Executing TEST_AUTOTB backend (auto-generate pseudo-random test benches).\n");
@ -352,11 +353,15 @@ struct TestAutotbBackend : public Backend {
num_iter = atoi(args[++argidx].c_str());
continue;
}
if (args[argidx] == "-seed" && argidx+1 < GetSize(args)) {
seed = atoi(args[++argidx].c_str());
continue;
}
break;
}
extra_args(f, filename, args, argidx);
autotest(*f, design, num_iter);
autotest(*f, design, num_iter, seed);
}
} TestAutotbBackend;

View File

@ -19,7 +19,7 @@ if [ ! -f $toolsdir/cmp_tbdata -o $toolsdir/cmp_tbdata.c -nt $toolsdir/cmp_tbdat
( set -ex; ${CC:-gcc} -Wall -o $toolsdir/cmp_tbdata $toolsdir/cmp_tbdata.c; ) || exit 1
fi
while getopts xmGl:wkjvref:s:p:n: opt; do
while getopts xmGl:wkjvref:s:p:n:S: opt; do
case "$opt" in
x)
use_xsim=true ;;
@ -50,8 +50,10 @@ while getopts xmGl:wkjvref:s:p:n: opt; do
scriptopt="$OPTARG" ;;
n)
autotb_opts="$autotb_opts -n $OPTARG" ;;
S)
autotb_opts="$autotb_opts -seed $OPTARG" ;;
*)
echo "Usage: $0 [-x|-m] [-w] [-k] [-j] [-v] [-r] [-e] [-l libs] [-f frontend] [-s script] [-p cmdstring] verilog-files\n" >&2
echo "Usage: $0 [-x|-m] [-G] [-w] [-k] [-j] [-v] [-r] [-e] [-l libs] [-f frontend] [-s script] [-p cmdstring] [-n iters] [-S seed] verilog-files\n" >&2
exit 1
esac
done