summaryrefslogtreecommitdiff
path: root/verilator_mul/sim_main.cc
blob: b525e00a5a178e8be5e40ef179d6d3d180b7d0a9 (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 "Vmul.h"
#include "verilated.h"

enum { MAX = 10000 };

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

	Vmul *top = new Vmul{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 p = top->p;
			if (p != (uint32_t)(x * y))
				printf("%4d * %4d = %4d\n", x, y, p);

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