From d578aab00d511d4254ec200558bf2f17db481b73 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sat, 30 Jun 2007 17:45:54 +0200 Subject: Added hdlcounter for CPLD. Verilog source files and test cases. --- digital/asserv/src/hdlcounter/noise_filter.v | 56 ++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 digital/asserv/src/hdlcounter/noise_filter.v (limited to 'digital/asserv/src/hdlcounter/noise_filter.v') diff --git a/digital/asserv/src/hdlcounter/noise_filter.v b/digital/asserv/src/hdlcounter/noise_filter.v new file mode 100644 index 00000000..7de58ab5 --- /dev/null +++ b/digital/asserv/src/hdlcounter/noise_filter.v @@ -0,0 +1,56 @@ +// noise_filter.v - Low pass noise filter. +// hdlcounter - Incremental encoder counter on programmable logic. {{{ +// +// Copyright (C) 2007 Nicolas Schodet +// +// Robot APB Team 2008. +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} +`timescale 1ns / 1ps + +// To switch output, input should be stable for a number of cycle. This will +// filter small spikes. As input is latched in only one flip-flop, this +// module can be used directly on an input pin. See input_latch.v for more +// details. + +module noise_filter(clk, rst, q, qf); + parameter size = 3; + input clk; + input rst; + input q; + output qf; + + reg qf; + reg [size-1:0] hist; + + always @(posedge clk or negedge rst) begin + if (!rst) begin + qf <= 0; + hist <= 0; + end + else begin + if (&hist) + qf <= 1; + else if (~|hist) + qf <= 0; + hist <= { hist[size-2:0], q }; + end + end + +endmodule -- cgit v1.2.3