diff options
-rw-r--r-- | verilator_lib/.gitignore | 2 | ||||
-rw-r--r-- | verilator_lib/Makefile | 15 | ||||
-rw-r--r-- | verilator_lib/mul.v | 10 | ||||
-rw-r--r-- | verilator_lib/sim.cc | 36 | ||||
-rw-r--r-- | verilator_lib/wrap.cc | 10 |
5 files changed, 73 insertions, 0 deletions
diff --git a/verilator_lib/.gitignore b/verilator_lib/.gitignore new file mode 100644 index 0000000..27f7104 --- /dev/null +++ b/verilator_lib/.gitignore @@ -0,0 +1,2 @@ +/obj_dir +/wrap diff --git a/verilator_lib/Makefile b/verilator_lib/Makefile new file mode 100644 index 0000000..3ea76fe --- /dev/null +++ b/verilator_lib/Makefile @@ -0,0 +1,15 @@ +all: wrap + +check: all + ./wrap + +clean: + rm -fr obj_dir + +.PHONY: all check clean + +obj_dir/libsim.so: mul.v sim.cc + verilator --cc --lib-create sim --build -j 0 -Wall mul.v sim.cc + +wrap: obj_dir/libsim.so + g++ -Iobj_dir -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -o wrap wrap.cc obj_dir/libsim.so diff --git a/verilator_lib/mul.v b/verilator_lib/mul.v new file mode 100644 index 0000000..67fb36b --- /dev/null +++ b/verilator_lib/mul.v @@ -0,0 +1,10 @@ +module mul( + input clk, + input [31:0] x, + input [31:0] y, + output reg [31:0] p +); + always @(posedge clk) begin + p <= x * y; + end +endmodule diff --git a/verilator_lib/sim.cc b/verilator_lib/sim.cc new file mode 100644 index 0000000..3ca8f67 --- /dev/null +++ b/verilator_lib/sim.cc @@ -0,0 +1,36 @@ +#include <cstdint> +#include <cstdio> + +#include "Vmul.h" +#include "verilated.h" + +enum { MAX = 10000 }; + +int +sim(void) +{ + VerilatedContext *cp = new VerilatedContext; + + 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); + return 0; +} diff --git a/verilator_lib/wrap.cc b/verilator_lib/wrap.cc new file mode 100644 index 0000000..8d14fbd --- /dev/null +++ b/verilator_lib/wrap.cc @@ -0,0 +1,10 @@ +#include <cstdio> + +int sim(void); + +int +main() +{ + fprintf(stderr, "nĂ¥ kaller jeg sim...\n"); + sim(); +} |