summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2026-01-01 16:57:20 +0100
committeruvok2026-01-01 16:57:20 +0100
commit7a6628f20419ca3bcade1865da66030569feae71 (patch)
treedc8b199929548ab7384e8a9d06da9d1d8863bdc4
parent65e923b2b4648456c9d83c81262642918b75daff (diff)
Add nandgame condition check
-rw-r--r--nandgame/cond_check.sv23
-rw-r--r--nandgame/cond_check_tb.sv119
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