diff options
author | Wojciech Kosior <kwojtus@protonmail.com> | 2020-09-01 10:54:59 +0200 |
---|---|---|
committer | Wojciech Kosior <kwojtus@protonmail.com> | 2020-09-01 11:04:22 +0200 |
commit | ee1f6c47e1eff920068f4bceaf604f9535a2e8a9 (patch) | |
tree | 580eb001a72601d254bb29cc348a529490f84808 /tests/div | |
parent | cd02ddff8886aa1db29f80d3cc5cf99a349d8258 (diff) | |
download | AGH-engineering-thesis-ee1f6c47e1eff920068f4bceaf604f9535a2e8a9.tar.gz AGH-engineering-thesis-ee1f6c47e1eff920068f4bceaf604f9535a2e8a9.zip |
start anew
Diffstat (limited to 'tests/div')
-rw-r--r-- | tests/div/test.v | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/div/test.v b/tests/div/test.v new file mode 100644 index 0000000..f360ebd --- /dev/null +++ b/tests/div/test.v @@ -0,0 +1,108 @@ +`default_nettype none + +`include "messages.vh" + +`ifndef SIMULATION + `error_SIMULATION_not_defined +; /* Cause syntax error */ +`endif + +module div_test(); + reg clock; + reg start; + reg [15:0] dividend; + reg [15:0] divisor; + + wire [15:0] quotient; + wire [15:0] remainder; + wire done; + + div + #( + .WIDTH(16) + ) div + ( + .clock(clock), + .start(start), + .dividend(dividend), + .divisor(divisor), + .quotient(quotient), + .remainder(remainder), + .done(done) + ); + + integer seed; + integer progress; + reg [15:0] new_divisor; + reg [16:0] max_divisor; + + initial begin + seed <= 0; + progress <= 0; + clock <= 0; + end + + // initial + // $monitor("[%t] clock is %b", $time, clock); + + always #1 + clock <= ~clock; + + always @ (posedge clock) begin + if (progress == 0) begin + start <= 1; + dividend <= 15; + divisor <= 3; + progress <= progress + 1; + end else begin + if (done) begin + if (dividend / divisor === quotient && dividend % divisor === remainder) begin + `DBG(("%0d/%0d computed as %0d r %0d", dividend, divisor, quotient, remainder)); + end else begin + `MSG(("error: %0d/%0d computed as %0d r %0d", + dividend, divisor, quotient, remainder)); + end + start <= 1; + case (progress) + 1 : begin + dividend <= 3; + divisor <= 4; + end + 2 : begin + dividend <= 65535; + divisor <= 65534; + end + 3 : begin + dividend <= 1024; + divisor <= 4; + end + 4 : begin + dividend <= 319; + divisor <= 17; + end + default : begin + if (progress == 500) + $finish; + else if (progress > 400) + max_divisor = 2**16; + else if (progress > 200) + max_divisor = 2**10; + else + max_divisor = 2**5; + + for (new_divisor = $urandom(seed) % max_divisor; + new_divisor == 0; + new_divisor = $urandom(seed) % max_divisor) + ; + + dividend <= $urandom(seed); + divisor <= new_divisor; + end + endcase // case (progress) + progress <= progress + 1; + end else begin // if (done) + start <= 0; + end // else: !if(done) + end // else: !if(progress == 0) + end // always @ (posedge clock) +endmodule // div_test |