URL
https://opencores.org/ocsvn/rtfsimpleuart/rtfsimpleuart/trunk
Subversion Repositories rtfsimpleuart
[/] [rtfsimpleuart/] [trunk/] [rtl/] [verilog/] [edge_det.v] - Rev 15
Compare with Previous | Blame | View Log
// ============================================================================ // (C) 2007,2013 Robert Finch // All rights reserved. // robfinch@<remove>finitron.ca // // edge_det.v // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the <organization> nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Notes: // // Edge detector // This little core detects an edge (positive, negative, and // either) in the input signal. // // Verilog 1995 // ============================================================================ module edge_det(rst, clk, ce, i, pe, ne, ee); input rst; // reset input clk; // clock input ce; // clock enable input i; // input signal output pe; // positive transition detected output ne; // negative transition detected output ee; // either edge (positive or negative) transition detected reg ed; always @(posedge clk) if (rst) ed <= 1'b0; else if (ce) ed <= i; assign pe = ~ed & i; // positive: was low and is now high assign ne = ed & ~i; // negative: was high and is now low assign ee = ed ^ i; // either: signal is now opposite to what it was endmodule