diff options
Diffstat (limited to 'testbench.cc')
-rw-r--r-- | testbench.cc | 44 |
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); +} + |