aboutsummaryrefslogtreecommitdiffstats
path: root/testbench.cc
diff options
context:
space:
mode:
Diffstat (limited to 'testbench.cc')
-rw-r--r--testbench.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/testbench.cc b/testbench.cc
index cd835df..61c4366 100644
--- a/testbench.cc
+++ b/testbench.cc
@@ -7,12 +7,25 @@ int main(int argc, char **argv, char **env)
printf("Recommended: Verilator 4.0 or later.\n");
Verilated::commandArgs(argc, argv);
- Verilated::traceEverOn(true);
Vpicorv32_wrapper* top = new Vpicorv32_wrapper;
- VerilatedVcdC* tfp = new VerilatedVcdC;
- top->trace (tfp, 99);
- tfp->open ("testbench.vcd");
+ // 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()) {
@@ -20,10 +33,11 @@ int main(int argc, char **argv, char **env)
top->resetn = 1;
top->clk = !top->clk;
top->eval();
- tfp->dump (t);
+ if (tfp) tfp->dump (t);
+ if (trace_fd && top->clk && top->trace_valid) fprintf(trace_fd, "%9.9lx\n", top->trace_data);
t += 5;
}
- tfp->close();
+ if (tfp) tfp->close();
delete top;
exit(0);
}