summaryrefslogtreecommitdiff
path: root/playground/debounce_tb.v
diff options
context:
space:
mode:
Diffstat (limited to 'playground/debounce_tb.v')
-rw-r--r--playground/debounce_tb.v76
1 files changed, 76 insertions, 0 deletions
diff --git a/playground/debounce_tb.v b/playground/debounce_tb.v
new file mode 100644
index 0000000..fb9430c
--- /dev/null
+++ b/playground/debounce_tb.v
@@ -0,0 +1,76 @@
+`timescale 1us/1us
+
+module debounce_tb;
+
+logic rst_i;
+logic clk_i;
+logic signal_i;
+logic signal_o;
+
+integer i = 0;
+
+debounce #(.STABLE_PERIOD(5)) uut (
+ .rst_i(rst_i),
+ .clk_i(clk_i),
+ .signal_i(signal_i),
+ .signal_o(signal_o)
+);
+
+string filename;
+initial begin
+`ifdef DUMP_FILE_NAME
+ filename=`DUMP_FILE_NAME;
+`else
+ filename="debounce.lxt2";
+`endif
+ $dumpfile(filename); $dumpvars();
+
+ clk_i = 0;
+ rst_i = 1'b1;
+ signal_i = 1'b1;
+ #1
+ rst_i = 1'b0;
+ #1
+ rst_i = 1'b1;
+end
+
+always #10 clk_i = ~clk_i;
+
+initial begin
+ // initial key press
+ @(negedge clk_i);
+ signal_i = ~signal_i;
+ assert (signal_o == 1'b1);
+
+ repeat(2) @(negedge clk_i);
+
+ signal_i = ~signal_i;
+ assert (signal_o == 1'b1);
+
+ // try bouncing
+
+ repeat(2) @(negedge clk_i);
+
+ for (i=0; i < 20; i = i + 1) begin
+ @(negedge clk_i);
+ signal_i = ~signal_i;
+ assert (signal_o == 1'b1);
+ end
+ @(negedge clk_i);
+ signal_i = ~signal_i;
+ assert (signal_o == 1'b1);
+
+ repeat(10) @(negedge clk_i);
+ assert (signal_o == 1'b0);
+
+ repeat(10) @(negedge clk_i);
+ signal_i = ~signal_i;
+
+ repeat(10) @(negedge clk_i);
+ assert (signal_o == 1'b1);
+
+ repeat(10) @(negedge clk_i);
+ $finish();
+end
+
+endmodule