forked from github/verilator
536bdf506e
Verilator should now correctly re-evaluate any logic that depends on state set in a DPI exported function, including if the DPI export is called outside eval, or if the DPI export is called from a DPI import. Whenever the design contains a DPI exported function that sets a non-local variable, we create a global __Vdpi_export_trigger flag, that is set in the body of the DPI export, and make all variables set in any DPI exported functions dependent on this flag (this ensures correct ordering and change detection on state set in DPI exports when needed). The DPI export trigger flag is cleared at the end of eval, which ensured calls to DPI exports outside of eval are detected. Additionally the ordering is modifies to assume that any call to a 'context' DPI import might call DPI exports by adding an edge to the ordering graph from the logic vertex containing the call to the DPI import to the DPI export trigger variable vertex (note the standard does not allow calls to DPI exports from DPI imports that were not imported with 'context', so we do not enforce ordering on those).
24 lines
672 B
Perl
Executable File
24 lines
672 B
Perl
Executable File
#!/usr/bin/env perl
|
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
|
#
|
|
# Copyright 2011 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
|
|
|
|
scenarios(simulator => 1);
|
|
|
|
compile(
|
|
v_flags2 => ["t/t_dpi_qw_c.cpp"],
|
|
verilator_flags2 => ["-Wall -Wno-DECLFILENAME -Wno-UNOPTFLAT -no-l2name"],
|
|
);
|
|
|
|
execute(
|
|
check_finished => 1,
|
|
);
|
|
|
|
ok(1);
|
|
1;
|