aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/util/BackendCompilationUtilities.scala2
-rw-r--r--src/test/resources/top.cpp8
2 files changed, 9 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/util/BackendCompilationUtilities.scala b/src/main/scala/firrtl/util/BackendCompilationUtilities.scala
index c1ead8b9..502f02df 100644
--- a/src/main/scala/firrtl/util/BackendCompilationUtilities.scala
+++ b/src/main/scala/firrtl/util/BackendCompilationUtilities.scala
@@ -98,7 +98,7 @@ trait BackendCompilationUtilities {
s"+define+PRINTF_COND=!$topModule.reset",
s"+define+STOP_COND=!$topModule.reset",
"-CFLAGS",
- s"""-Wno-undefined-bool-conversion -O1 -DTOP_TYPE=V$dutFile -include V$dutFile.h""",
+ s"""-Wno-undefined-bool-conversion -O1 -DTOP_TYPE=V$dutFile -DVL_USER_FINISH -include V$dutFile.h""",
"-Mdir", dir.toString,
"--exe", cppHarness.toString)
System.out.println(s"${command.mkString(" ")}") // scalastyle:ignore regex
diff --git a/src/test/resources/top.cpp b/src/test/resources/top.cpp
index 08ad42fa..ba27c917 100644
--- a/src/test/resources/top.cpp
+++ b/src/test/resources/top.cpp
@@ -7,6 +7,13 @@
# include <verilated_vcd_c.h> // Trace file format header
#endif
+// Override Verilator definition so first $finish ends simulation
+// Note: VL_USER_FINISH needs to be defined when compiling Verilator code
+void vl_finish(const char* filename, int linenum, const char* hier) {
+ Verilated::flushCall();
+ exit(0);
+}
+
using namespace std;
//VGCDTester *top;
@@ -61,6 +68,7 @@ int main(int argc, char** argv) {
if (main_time >= timeout) {
cout << "Assertion failed! Simulation terminated by timeout at time " << main_time <<
" (cycle " << main_time / 10 << ")"<< endl;
+ return -1;
} else {
cout << "Simulation completed at time " << main_time <<
" (cycle " << main_time / 10 << ")"<< endl;