mirror of
https://github.com/verilator/verilator.git
synced 2025-01-12 17:47:34 +00:00
aa9cde22c8
Use SIMD intrinsics to render VCD traces. I have measured 10-40% single threaded performance increase with VCD tracing on SweRV EH1 and lowRISC Ibex using SSE2 intrinsics to render the trace. Also helps a tiny bit with FST, but now almost all of the FST overhead is in the FST library. I have reworked the tracing routines to use more precisely sized arguments. The nice thing about this is that the performance without the intrinsics is pretty much the same as it was before, as we do at most 2x as much work as necessary, but in exchange there are no data dependent branches at all.
39 lines
1.3 KiB
Perl
Executable File
39 lines
1.3 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
|
#
|
|
# Copyright 2003-2009 by Wilson Snyder. This program is free software; you
|
|
# can redistribute it and/or modify it under the terms of either the GNU
|
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
|
# Version 2.0.
|
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
|
|
|
# Same test as t_trace_complex, but exercising the old VCD tracing API
|
|
|
|
scenarios(vlt => 1);
|
|
|
|
top_filename("t/t_trace_complex.v");
|
|
|
|
compile(
|
|
verilator_flags2 => ['--cc --trace -CFLAGS -DVL_PORTABLE_ONLY'],
|
|
);
|
|
|
|
execute(
|
|
check_finished => 1,
|
|
);
|
|
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_strp /);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_strp_strp /);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arrp /);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arrp_arrp /);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arrp_strp /);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arru\(/);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arru_arru\(/);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arru_arrp\(/);
|
|
file_grep ("$Self->{obj_dir}/simx.vcd", qr/ v_arru_strp\(/);
|
|
|
|
vcd_identical ("$Self->{obj_dir}/simx.vcd", "t/t_trace_complex.out");
|
|
|
|
ok(1);
|
|
1;
|