2020-05-04 22:42:15 +00:00
|
|
|
#!/usr/bin/env perl
|
2010-03-17 12:22:49 +00:00
|
|
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
|
|
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
|
|
|
#
|
2020-03-21 15:24:24 +00:00
|
|
|
# Copyright 2003 by Wilson Snyder. This program is free software; you
|
|
|
|
# can redistribute it and/or modify it under the terms of either the GNU
|
2010-03-17 12:22:49 +00:00
|
|
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
|
|
|
# Version 2.0.
|
2020-03-21 15:24:24 +00:00
|
|
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
2010-03-17 12:22:49 +00:00
|
|
|
|
2018-05-08 00:42:28 +00:00
|
|
|
scenarios(simulator => 1);
|
2020-01-12 09:03:17 +00:00
|
|
|
my $out_filename = "$Self->{obj_dir}/V$Self->{name}.xml";
|
2018-05-08 00:42:28 +00:00
|
|
|
|
2018-05-07 02:39:18 +00:00
|
|
|
compile(
|
|
|
|
make_top_shell => 0,
|
|
|
|
make_main => 0,
|
2020-01-12 09:03:17 +00:00
|
|
|
verilator_flags2 => ["-DATTRIBUTES --exe --no-l2name $Self->{t_dir}/t_dpi_var.cpp"],
|
2018-05-07 02:39:18 +00:00
|
|
|
);
|
2010-03-17 12:22:49 +00:00
|
|
|
|
2020-01-12 09:03:17 +00:00
|
|
|
if ($Self->{vlt_all}) {
|
Add V3VariableOrder pass
A separate V3VariableOrder pass is now used to order module variables
before Emit. All variables are now ordered together, without
consideration for whether they are ports, signals form the design, or
additional internal variables added by Verilator (which used to be
ordered and emitted as separate groups in Emit). For single threaded
models, this is performance neutral. For multi-threaded models, the
MTask affinity based sorting was slightly modified, so variables with no
MTask affinity are emitted last, otherwise the MTask affinity sets are
sorted using the TSP sorter as before, but again, ports, signals, and
internal variables are not differentiated. This yields a 2%+ speedup for
the multithreaded model on OpenTitan.
2021-06-29 16:57:07 +00:00
|
|
|
file_grep("$out_filename", qr/\<var fl="d56" loc=".*?" name="formatted" dtype_id="\d+" dir="input" vartype="string" origName="formatted" sformat="true"\/\>/i);
|
|
|
|
file_grep("$out_filename", qr/\<var fl="d77" loc=".*?" name="t.sub.in" dtype_id="\d+" vartype="int" origName="in" public="true" public_flat_rd="true"\/\>/i);
|
|
|
|
file_grep("$out_filename", qr/\<var fl="d78" loc=".*?" name="t.sub.fr_a" dtype_id="\d+" vartype="int" origName="fr_a" public="true" public_flat_rd="true" public_flat_rw="true"\/\>/i);
|
|
|
|
file_grep("$out_filename", qr/\<var fl="d79" loc=".*?" name="t.sub.fr_b" dtype_id="\d+" vartype="int" origName="fr_b" public="true" public_flat_rd="true" public_flat_rw="true"\/\>/i);
|
2020-01-12 09:03:17 +00:00
|
|
|
}
|
|
|
|
|
2018-05-07 02:39:18 +00:00
|
|
|
execute(
|
|
|
|
check_finished => 1,
|
|
|
|
);
|
2010-03-17 12:22:49 +00:00
|
|
|
|
|
|
|
ok(1);
|
|
|
|
1;
|