forked from YosysHQ/picorv32
-
Notifications
You must be signed in to change notification settings - Fork 0
/
testbench.cc
44 lines (38 loc) · 1.14 KB
/
testbench.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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);
}