diff options
| author | uvok | 2026-01-01 16:57:20 +0100 |
|---|---|---|
| committer | uvok | 2026-01-01 16:57:20 +0100 |
| commit | 7a6628f20419ca3bcade1865da66030569feae71 (patch) | |
| tree | dc8b199929548ab7384e8a9d06da9d1d8863bdc4 | |
| parent | 65e923b2b4648456c9d83c81262642918b75daff (diff) | |
Add nandgame condition check
| -rw-r--r-- | nandgame/cond_check.sv | 23 | ||||
| -rw-r--r-- | nandgame/cond_check_tb.sv | 119 |
2 files changed, 142 insertions, 0 deletions
diff --git a/nandgame/cond_check.sv b/nandgame/cond_check.sv new file mode 100644 index 0000000..dc9d334 --- /dev/null +++ b/nandgame/cond_check.sv @@ -0,0 +1,23 @@ +// nandgame condition checker + +`timescale 1us/1us + +module cond_check #( + parameter DATA_WIDTH = 16 +) ( + input [(DATA_WIDTH-1):0] X, + input wire ltz, + input wire eqz, + input wire gtz, + output wire res +); + +wire ltr, eqr, gtr, greater_zero; +assign greater_zero = X[(DATA_WIDTH - 1)] == 0; +assign ltr = ltz && !greater_zero; +assign gtr = gtz && greater_zero && !(X == 0); +assign eqr = eqz && (X == 0); + +assign res = ltr || gtr || eqr; + +endmodule diff --git a/nandgame/cond_check_tb.sv b/nandgame/cond_check_tb.sv new file mode 100644 index 0000000..a7a22dc --- /dev/null +++ b/nandgame/cond_check_tb.sv @@ -0,0 +1,119 @@ +`timescale 1us/1us + +`include "nandgame_types.v" + +module cond_check_tb; + +logic [15:0] in1; +logic ltz, gtz, eqz; +logic res; + +cond_check uut ( + .X(in1), + .ltz(ltz), + .gtz(gtz), + .eqz(eqz), + .res(res) +); + +string filename; +initial begin +`ifdef DUMP_FILE_NAME + filename=`DUMP_FILE_NAME; +`else + filename="cond_check.lin1t2"; +`endif + $dumpfile(filename); $dumpvars(); + +end + +bit exp_res; +initial begin + eqz = 0; gtz = 0; ltz = 0; in1 = 0; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 0; ltz = 1; in1 = 0; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 1; ltz = 0; in1 = 0; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 1; gtz = 0; ltz = 0; in1 = 0; + #1 + exp_res = 1; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 0; ltz = 0; in1 = 1; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 0; ltz = 1; in1 = 1; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 1; ltz = 0; in1 = 1; + #1 + exp_res = 1; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 1; gtz = 0; ltz = 0; in1 = 1; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 0; ltz = 0; in1 = -1; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 0; ltz = 1; in1 = -1; + #1 + exp_res = 1; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 0; gtz = 1; ltz = 0; in1 = -1; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + eqz = 1; gtz = 0; ltz = 0; in1 = -1; + #1 + exp_res = 0; + assert(res == exp_res) + else $error("Expected %d, but got %d", exp_res, res); + #1 + + $finish(); +end + +endmodule |
