forked from github/verilator
9d7086067c
Instead of __ALLfast.cpp and __ALLslow.cpp, we now create only a single __ALL.cpp and compile it with OPT_FAST, this speeds up small builds where the C compiler does not dominate. A separate patch will follow turning VM_PARALLEL_BUILDS on by default at a certain size. Given this change to the build there is now no point in emitting both fast and slow routines into the same .cpp file when --output-split is not set as they will be just included in the same __ALL.cpp file. To keep things simpler and the output easier to comprehend, V3EmitC has also been changed to always emit the fast and slow files separately. Also change verilated.mk to apply OPT_SLOW to all slow files, not just ones called *__Slow.cpp. This change in particular ensures __Syms.cpp is build as slow. Part of #2360.
78 lines
1.9 KiB
C++
78 lines
1.9 KiB
C++
// DESCRIPTION: Verilator: Verilog Test
|
|
//
|
|
// Copyright 2003-2020 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
|
|
|
|
#include "verilatedos.h"
|
|
#include VM_PREFIX_INCLUDE
|
|
#include "Vt_trace_two_b.h"
|
|
#include "verilated.h"
|
|
#ifdef TEST_HDR_TRACE
|
|
# include "verilated_vcd_sc.h"
|
|
#endif
|
|
|
|
// Compile in place
|
|
#include "Vt_trace_two_b.cpp"
|
|
#include "Vt_trace_two_b__Slow.cpp"
|
|
#include "Vt_trace_two_b__Syms.cpp"
|
|
#include "Vt_trace_two_b__Trace.cpp"
|
|
#include "Vt_trace_two_b__Trace__Slow.cpp"
|
|
|
|
// General headers
|
|
#include "verilated.h"
|
|
#include "systemc.h"
|
|
|
|
VM_PREFIX* ap;
|
|
Vt_trace_two_b* bp;
|
|
|
|
int sc_main(int argc, char** argv) {
|
|
sc_signal<bool> clk;
|
|
sc_time sim_time(1100, SC_NS);
|
|
Verilated::commandArgs(argc, argv);
|
|
Verilated::traceEverOn(true);
|
|
Verilated::debug(0);
|
|
srand48(5);
|
|
ap = new VM_PREFIX("topa");
|
|
bp = new Vt_trace_two_b("topb");
|
|
ap->clk(clk);
|
|
bp->clk(clk);
|
|
|
|
#ifdef TEST_HDR_TRACE
|
|
VerilatedVcdSc* tfp = new VerilatedVcdSc;
|
|
ap->trace(tfp, 99);
|
|
bp->trace(tfp, 99);
|
|
tfp->open(VL_STRINGIFY(TEST_OBJ_DIR) "/simx.vcd");
|
|
#endif
|
|
{
|
|
clk = false;
|
|
#if (SYSTEMC_VERSION>=20070314)
|
|
sc_start(10, SC_NS);
|
|
#else
|
|
sc_start(10);
|
|
#endif
|
|
}
|
|
while (sc_time_stamp() < sim_time && !Verilated::gotFinish()) {
|
|
clk = !clk;
|
|
#if (SYSTEMC_VERSION>=20070314)
|
|
sc_start(5, SC_NS);
|
|
#else
|
|
sc_start(5);
|
|
#endif
|
|
}
|
|
if (!Verilated::gotFinish()) {
|
|
vl_fatal(__FILE__, __LINE__, "main", "%Error: Timeout; never got a $finish");
|
|
}
|
|
ap->final();
|
|
bp->final();
|
|
#ifdef TEST_HDR_TRACE
|
|
if (tfp) tfp->close();
|
|
#endif
|
|
|
|
VL_DO_DANGLING(delete ap, ap);
|
|
VL_DO_DANGLING(delete bp, bp);
|
|
exit(0L);
|
|
}
|