diff --git a/Changes b/Changes index 09f11af2d..10eb5db51 100644 --- a/Changes +++ b/Changes @@ -4,6 +4,8 @@ The contributors that suggested a given feature are shown in []. Thanks! * Verilator 4.017 devel +** Add --rr. [Todd Strader] + ** When showing an error, show source code and offer suggestions of replacements. *** Change MULTITOP to warning to help linting, see manual. diff --git a/bin/verilator b/bin/verilator index 50a2208fc..1cf92d3db 100755 --- a/bin/verilator +++ b/bin/verilator @@ -34,6 +34,7 @@ autoflush STDERR 1; $Debug = 0; my $opt_gdb; +my $opt_rr; my $opt_gdbbt; my $opt_quiet_exit; @@ -61,6 +62,7 @@ if (! GetOptions( "gdb!" => \$opt_gdb, "gdbbt!" => \$opt_gdbbt, "quiet-exit!" => \$opt_quiet_exit, + "rr!" => \$opt_rr, # Additional parameters "<>" => sub {}, # Ignored )) { @@ -93,6 +95,10 @@ if ($opt_gdb) { ." -ex \"run ".join(' ', @quoted_sw)."\"" ." -ex 'set width 0'" ." -ex 'bt'"); +} elsif ($opt_rr) { + # Record with rr + run ("rr record ".verilator_bin() + ." ".join(' ', @quoted_sw)); } elsif ($opt_gdbbt && $Debug) { # Run under GDB to get gdbbt run ("gdb" @@ -353,6 +359,7 @@ detailed descriptions in L for more information. --relative-includes Resolve includes relative to current file --no-relative-cfuncs Disallow 'this->' in generated functions --report-unoptflat Extra diagnostics for UNOPTFLAT + --rr Run Verilator and record with rr --savable Enable model save-restore --sc Create SystemC output --stats Create statistics file @@ -1192,6 +1199,10 @@ printing. For example: will generate a PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf from the DOT file. +=item --rr + +Run Verilator and record with rr. See: rr-project.org. + =item --savable Enable including save and restore functions in the generated model. diff --git a/src/V3Options.cpp b/src/V3Options.cpp index 0aea814c6..6c89914f0 100644 --- a/src/V3Options.cpp +++ b/src/V3Options.cpp @@ -1018,6 +1018,9 @@ void V3Options::parseOptsList(FileLine* fl, const string& optdir, int argc, char else if (!strcmp(sw, "-gdb")) { // Used only in perl shell } + else if (!strcmp(sw, "-rr")) { + // Used only in perl shell + } else if (!strcmp(sw, "-gdbbt")) { // Used only in perl shell } diff --git a/test_regress/driver.pl b/test_regress/driver.pl index 7ddf01bc3..f06957099 100755 --- a/test_regress/driver.pl +++ b/test_regress/driver.pl @@ -55,12 +55,14 @@ my $opt_benchmark; my @opt_tests; my $opt_dist; my $opt_gdb; +my $opt_rr; my $opt_gdbbt; my $opt_gdbsim; my $opt_jobs = 1; my $opt_optimize; my $opt_quiet; my $opt_rerun; +my $opt_rrsim; my %opt_scenarios; my $opt_site; my $opt_stop; @@ -85,6 +87,8 @@ if (! GetOptions( "optimize:s" => \$opt_optimize, "quiet!" => \$opt_quiet, "rerun!" => \$opt_rerun, + "rr!" => \$opt_rr, + "rrsim!" => \$opt_rrsim, "site!" => \$opt_site, "stop!" => \$opt_stop, "trace!" => \$opt_trace, @@ -727,6 +731,7 @@ sub compile_vlt_flags { my @verilator_flags = @{$param{verilator_flags}}; unshift @verilator_flags, "--gdb" if $opt_gdb; unshift @verilator_flags, "--gdbbt" if $opt_gdbbt; + unshift @verilator_flags, "--rr" if $opt_rr; unshift @verilator_flags, "--x-assign unique"; # More likely to be buggy unshift @verilator_flags, "--trace" if $opt_trace; my $threads = ::calc_threads($Vltmt_threads); @@ -1047,9 +1052,15 @@ sub execute { #&& (!$param{needs_v4} || -r "$ENV{VERILATOR_ROOT}/src/V3Gate.cpp") ) { $param{executable} ||= "$self->{obj_dir}/$param{VM_PREFIX}"; + my $debugger = ""; + if ($opt_gdbsim) { + $debugger = ($ENV{VERILATOR_GDB}||"gdb")." "; + } elsif ($opt_rrsim) { + $debugger = "rr record "; + } $self->_run(logfile=>"$self->{obj_dir}/vlt_sim.log", cmd=>[($run_env - .($opt_gdbsim ? ($ENV{VERILATOR_GDB}||"gdb")." " : "") + .$debugger .$param{executable} .($opt_gdbsim ? " -ex 'run " : "")), @{$param{all_run_flags}}, @@ -2288,6 +2299,14 @@ C<--rerun>, and C<--verbose> which is not the opposite of C<--quiet>. Rerun all tests that failed in this run. Reruns force the flags C<--no-quiet --j 1>. +=item --rr + +Same as C: Run Verilator and record with rr. + +=item --rrsim + +Run Verilator generated executable and record with rr. + =item --site Run site specific tests also.