#include #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; if (argc > 0 && argv[1][0] == '1') top->testcase = 1; else top->testcase = 0; // 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->wb_clk = 0; top->wb_rst = 1; int t = 0; while (!Verilated::gotFinish()) { if (t > 200) top->wb_rst = 0; top->wb_clk = !top->wb_clk; top->eval(); if (tfp) tfp->dump(t); if (trace_fd && top->wb_clk && top->trace_valid) fprintf(trace_fd, "%9.9lx\n", top->trace_data); t += 5; } if (tfp) tfp->close(); delete top; exit(0); }