summaryrefslogtreecommitdiffstats
path: root/testbench.cc
diff options
context:
space:
mode:
Diffstat (limited to 'testbench.cc')
-rw-r--r--testbench.cc44
1 files changed, 44 insertions, 0 deletions
diff --git a/testbench.cc b/testbench.cc
new file mode 100644
index 0000000..61c4366
--- /dev/null
+++ b/testbench.cc
@@ -0,0 +1,44 @@
+#include "Vpicorv32_wrapper.h"
+#include "verilated_vcd_c.h"
+
+int main(int argc, char **argv, char **env)
+{
+ printf("Built with %s %s.\n", Verilated::productName(), Verilated::productVersion());
+ printf("Recommended: Verilator 4.0 or later.\n");
+
+ Verilated::commandArgs(argc, argv);
+ Vpicorv32_wrapper* top = new Vpicorv32_wrapper;
+
+ // Tracing (vcd)
+ VerilatedVcdC* tfp = NULL;
+ const char* flag_vcd = Verilated::commandArgsPlusMatch("vcd");
+ if (flag_vcd && 0==strcmp(flag_vcd, "+vcd")) {
+ Verilated::traceEverOn(true);
+ tfp = new VerilatedVcdC;
+ top->trace (tfp, 99);
+ tfp->open("testbench.vcd");
+ }
+
+ // Tracing (data bus, see showtrace.py)
+ FILE *trace_fd = NULL;
+ const char* flag_trace = Verilated::commandArgsPlusMatch("trace");
+ if (flag_trace && 0==strcmp(flag_trace, "+trace")) {
+ trace_fd = fopen("testbench.trace", "w");
+ }
+
+ top->clk = 0;
+ int t = 0;
+ while (!Verilated::gotFinish()) {
+ if (t > 200)
+ top->resetn = 1;
+ top->clk = !top->clk;
+ top->eval();
+ if (tfp) tfp->dump (t);
+ if (trace_fd && top->clk && top->trace_valid) fprintf(trace_fd, "%9.9lx\n", top->trace_data);
+ t += 5;
+ }
+ if (tfp) tfp->close();
+ delete top;
+ exit(0);
+}
+