summaryrefslogtreecommitdiff
path: root/verilator_add/sim_main.cc
blob: 6059d635a8c77f8300ea1bea18c4a7955f233fbd (plain) (blame)
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
#include <cstdint>
#include <cstdio>

#include "Vadd.h"
#include "verilated.h"

enum { MAX = 10000 };

int
main(int argc, char **argv)
{
	VerilatedContext *cp = new VerilatedContext;
	cp->commandArgs(argc, argv);

	Vadd *top = new Vadd{cp};
	top->clk = 0;

	int numclks = 0;
	for (int x = 0; x < MAX; ++x) {
		for (int y = 0; y < MAX; ++y) {
			top->x = x;
			top->y = y;
			top->clk = 1;
			top->eval();

			int s = top->s;
			if (s != (uint8_t)(x + y))
				printf("%4d + %4d = %4d\n", x, y, s);

			top->clk = 0;
			top->eval();
			++numclks;
		}
	}
	fprintf(stderr, "%d clock cycles\n", numclks);
}