Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | ////////////////////////////////////////////////////////////////////// |
2 | //// //// | |
3 | //// uart_sync_flops.v //// | |
4 | //// //// | |
5 | //// //// | |
6 | //// This file is part of the "UART 16550 compatible" project //// | |
7 | //// http://www.opencores.org/cores/uart16550/ //// | |
8 | //// //// | |
9 | //// Documentation related to this project: //// | |
10 | //// - http://www.opencores.org/cores/uart16550/ //// | |
11 | //// //// | |
12 | //// Projects compatibility: //// | |
13 | //// - WISHBONE //// | |
14 | //// RS232 Protocol //// | |
15 | //// 16550D uart (mostly supported) //// | |
16 | //// //// | |
17 | //// Overview (main Features): //// | |
18 | //// UART core receiver logic //// | |
19 | //// //// | |
20 | //// Known problems (limits): //// | |
21 | //// None known //// | |
22 | //// //// | |
23 | //// To Do: //// | |
24 | //// Thourough testing. //// | |
25 | //// //// | |
26 | //// Author(s): //// | |
27 | //// - Andrej Erzen (andreje@flextronics.si) //// | |
28 | //// - Tadej Markovic (tadejm@flextronics.si) //// | |
29 | //// //// | |
30 | //// Created: 2004/05/20 //// | |
31 | //// Last Updated: 2004/05/20 //// | |
32 | //// (See log for the revision history) //// | |
33 | //// //// | |
34 | //// //// | |
35 | ////////////////////////////////////////////////////////////////////// | |
36 | //// //// | |
37 | //// Copyright (C) 2000, 2001 Authors //// | |
38 | //// //// | |
39 | //// This source file may be used and distributed without //// | |
40 | //// restriction provided that this copyright statement is not //// | |
41 | //// removed from the file and that any derivative work contains //// | |
42 | //// the original copyright notice and the associated disclaimer. //// | |
43 | //// //// | |
44 | //// This source file is free software; you can redistribute it //// | |
45 | //// and/or modify it under the terms of the GNU Lesser General //// | |
46 | //// Public License as published by the Free Software Foundation; //// | |
47 | //// either version 2.1 of the License, or (at your option) any //// | |
48 | //// later version. //// | |
49 | //// //// | |
50 | //// This source is distributed in the hope that it will be //// | |
51 | //// useful, but WITHOUT ANY WARRANTY; without even the implied //// | |
52 | //// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// | |
53 | //// PURPOSE. See the GNU Lesser General Public License for more //// | |
54 | //// details. //// | |
55 | //// //// | |
56 | //// You should have received a copy of the GNU Lesser General //// | |
57 | //// Public License along with this source; if not, download it //// | |
58 | //// from http://www.opencores.org/lgpl.shtml //// | |
59 | //// //// | |
60 | ////////////////////////////////////////////////////////////////////// | |
61 | // | |
62 | // CVS Revision History | |
63 | // | |
64 | // $Log: uart_sync_flops.v,v $ | |
65 | // Revision 1.1 2004/05/21 11:43:25 tadejm | |
66 | // Added to synchronize RX input to Wishbone clock. | |
67 | // | |
68 | // | |
69 | ||
70 | `timescale 1 ns / 10 ps | |
71 | module uart_sync_flops(rst_i, clk_i, stage1_rst_i, stage1_clk_en_i, async_dat_i, | |
72 | sync_dat_o); | |
73 | ||
74 | parameter Tp = 1; | |
75 | parameter width = 1; | |
76 | parameter init_value = 1'b0; | |
77 | ||
78 | input rst_i; | |
79 | input clk_i; | |
80 | input stage1_rst_i; | |
81 | input stage1_clk_en_i; | |
82 | input [(width - 1):0] async_dat_i; | |
83 | output [(width - 1):0] sync_dat_o; | |
84 | ||
85 | reg [(width - 1):0] sync_dat_o; | |
86 | reg [(width - 1):0] flop_0; | |
87 | ||
88 | always @(posedge clk_i or posedge rst_i) begin | |
89 | if (rst_i) begin | |
90 | flop_0 <= #(Tp) {width {init_value}}; | |
91 | end | |
92 | else begin | |
93 | flop_0 <= #(Tp) async_dat_i; | |
94 | end | |
95 | end | |
96 | always @(posedge clk_i or posedge rst_i) begin | |
97 | if (rst_i) begin | |
98 | sync_dat_o <= #(Tp) {width {init_value}}; | |
99 | end | |
100 | else if (stage1_rst_i) begin | |
101 | sync_dat_o <= #(Tp) {width {init_value}}; | |
102 | end | |
103 | else if (stage1_clk_en_i) begin | |
104 | sync_dat_o <= #(Tp) flop_0; | |
105 | end | |
106 | end | |
107 | endmodule |