From 7a6628f20419ca3bcade1865da66030569feae71 Mon Sep 17 00:00:00 2001 From: uvok Date: Thu, 1 Jan 2026 16:57:20 +0100 Subject: Add nandgame condition check --- nandgame/cond_check.sv | 23 +++++++++ nandgame/cond_check_tb.sv | 119 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 nandgame/cond_check.sv create mode 100644 nandgame/cond_check_tb.sv 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 -- cgit v1.2.3