summaryrefslogtreecommitdiff
path: root/nandgame
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame')
-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