/* * Design: ECE 274 - Button Debouncer Testbench * Author: Roman Lysecky * Copyright 2008, All Rights Reserved * * Date: March 25, 2008 * * Notes: Incporates Debouncer and DebounceTester_Sim modules * */ `timescale 1us / 1us module Debouncer_TB(); parameter ClkPeriod1kHz = 1000; // 1/1000 us = 1 kHz reg Clk1kHz_t, Rst_t, ButtonIn_t; wire Debounced_t, Fail_t; DebounceTester_Sim DebounceTester_0(Clk1kHz_t, Rst_t, Debounced_t, Fail_t); Debouncer Debouncer_0(Clk1kHz_t, Rst_t, ButtonIn_t, Debounced_t); // Clock Procedure for 1 kHz clock // Note: Timescale is in us, not ns always begin Clk1kHz_t <= 0; #(ClkPeriod1kHz/2); Clk1kHz_t <= 1; #(ClkPeriod1kHz/2); end // Button Input Stimulus Procedure initial begin ButtonIn_t <= 0; // Wait for reset to synchronize @(posedge Clk1kHz_t); #(10*ClkPeriod1kHz); $display("Button Debouncer Test Starting..."); // Simulate debounce event 1 ButtonIn_t <= 0; #(1*ClkPeriod1kHz) ButtonIn_t <= 1; #(2*ClkPeriod1kHz) ButtonIn_t <= 0; #(4*ClkPeriod1kHz) ButtonIn_t <= 1; #(2*ClkPeriod1kHz) ButtonIn_t <= 0; #(2*ClkPeriod1kHz) ButtonIn_t <= 1; #(20*ClkPeriod1kHz); // Button Stable // Simulate debounce event 2 ButtonIn_t <= 0; #(2*ClkPeriod1kHz) ButtonIn_t <= 1; #(1*ClkPeriod1kHz) ButtonIn_t <= 0; #(3*ClkPeriod1kHz) ButtonIn_t <= 1; #(1*ClkPeriod1kHz) ButtonIn_t <= 0; #(1*ClkPeriod1kHz) ButtonIn_t <= 1; #(1*ClkPeriod1kHz) ButtonIn_t <= 0; #(20*ClkPeriod1kHz); // Button Stable // Simulate debounce event 3 ButtonIn_t <= 1; #(2*ClkPeriod1kHz) ButtonIn_t <= 0; #(1*ClkPeriod1kHz) ButtonIn_t <= 1; #(1*ClkPeriod1kHz) ButtonIn_t <= 0; #(1*ClkPeriod1kHz) ButtonIn_t <= 1; #(3*ClkPeriod1kHz) ButtonIn_t <= 0; #(2*ClkPeriod1kHz) ButtonIn_t <= 1; #(2*ClkPeriod1kHz) ButtonIn_t <= 0; #(1*ClkPeriod1kHz) ButtonIn_t <= 1; #(3*ClkPeriod1kHz) ButtonIn_t <= 0; #(1*ClkPeriod1kHz) ButtonIn_t <= 1; #(20*ClkPeriod1kHz); // Button Stable // Simulate debounce event slow ButtonIn_t <= 0; #(3*ClkPeriod1kHz) ButtonIn_t <= 1; #(5*ClkPeriod1kHz) ButtonIn_t <= 0; #(5*ClkPeriod1kHz) ButtonIn_t <= 1; #(7*ClkPeriod1kHz) ButtonIn_t <= 0; #(6*ClkPeriod1kHz) ButtonIn_t <= 1; #(6*ClkPeriod1kHz) ButtonIn_t <= 0; #(3*ClkPeriod1kHz) ButtonIn_t <= 1; #(2*ClkPeriod1kHz) ButtonIn_t <= 0; #(20*ClkPeriod1kHz); // Button Stable $display("Button Debouncer Test Compelte."); end // Output Verication Procedure initial begin // Generate Reset Rst_t <= 1; @(posedge Clk1kHz_t); Rst_t <= 0; @(posedge Clk1kHz_t); while (1==1) begin if( Fail_t == 1 ) begin $display("Failed Button Debouncer Test at %t.", $time); #(ClkPeriod1kHz) $finish; end #1; end end endmodule