OpenCores
URL https://opencores.org/ocsvn/boundaries/boundaries/trunk

Subversion Repositories boundaries

[/] [boundaries/] [trunk/] [rtl/] [verilog/] [clock_switch2_basic.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 esquehill
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
//// clock_switch2_basic.v                                        ////
4
////                                                              ////
5
//// This file is part of the boundaries opencores effort.        ////
6
//// <http://www.opencores.org/cores/boundaries/>                 ////
7
////                                                              ////
8
//// Module Description:                                          ////
9
////                                                              ////
10
//// 1-of-2 glitchless clock switcher                             ////
11
////                                                              ////
12
//// The 2 clocks, enable, and select are assumed to be           ////
13
//// asynchronous.                                                ////
14
////                                                              ////
15
//// Selecting/deselecting a stopped clock is not handled.        ////
16
////                                                              ////
17
//// To Do:                                                       ////
18
//// Verify in silicon.                                           ////
19
////                                                              ////
20
//// Author(s):                                                   ////
21
//// - Shannon Hill                                               ////
22
//// (based on "Techniques to make clock switching glitch free"   ////
23
//// By Rafey Mahmud; EEdesign.com June 26, 2003)                 ////
24
////                                                              ////
25
//// http://www.eedesign.com/showArticle.jhtml?articleID=16501239 ////
26
////                                                              ////
27
//// (modified to use positive edge flops; to stall the output    ////
28
////  clock high).                                                ////
29
////                                                              ////
30
//////////////////////////////////////////////////////////////////////
31
////                                                              ////
32
//// Copyright (C) 2004 Shannon Hill and OPENCORES.ORG            ////
33
////                                                              ////
34
//// This source file may be used and distributed without         ////
35
//// restriction provided that this copyright statement is not    ////
36
//// removed from the file and that any derivative work contains  ////
37
//// the original copyright notice and the associated disclaimer. ////
38
////                                                              ////
39
//// This source file is free software; you can redistribute it   ////
40
//// and/or modify it under the terms of the GNU Lesser General   ////
41
//// Public License as published by the Free Software Foundation; ////
42
//// either version 2.1 of the License, or (at your option) any   ////
43
//// later version.                                               ////
44
////                                                              ////
45
//// This source is distributed in the hope that it will be       ////
46
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
47
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
48
//// PURPOSE. See the GNU Lesser General Public License for more  ////
49
//// details.                                                     ////
50
////                                                              ////
51
//// You should have received a copy of the GNU Lesser General    ////
52
//// Public License along with this source; if not, download it   ////
53
//// from <http://www.opencores.org/lgpl.shtml>                   ////
54
////                                                              ////
55
//////////////////////////////////////////////////////////////////////
56
//
57
// $Id: clock_switch2_basic.v,v 1.1 2004-07-07 12:41:17 esquehill Exp $
58
//
59
// CVS Revision History
60
//
61
// $Log: not supported by cvs2svn $
62
//
63
//
64
module clock_switch2_basic( /*AUTOARG*/
65
// Outputs
66
clk_o,
67
// Inputs
68
rst0_i, clk0_i, rst1_i, clk1_i, enable, select
69
);
70
 
71
input     rst0_i;
72
input     clk0_i;
73
 
74
input     rst1_i;
75
input     clk1_i;
76
 
77
input     enable;  // start&stop the clock
78
input     select;  // select which source clock
79
output    clk_o;
80
 
81
wire      sel0 = ~select & enable;
82
wire      sel1 =  select & enable;
83
 
84
reg [1:0] ssync0; // selection synchronizers
85
reg [1:0] ssync1;
86
 
87
always @( posedge clk0_i or posedge rst0_i)
88
if( rst0_i )
89
     ssync0 <=   2'b0;
90
else ssync0 <= { ssync0[0] , (sel0 & ~ssync1[1] ) }; // async input
91
 
92
always @( posedge clk1_i or posedge rst1_i)
93
if( rst1_i )
94
     ssync1 <=   2'b0;
95
else ssync1 <= { ssync1[0] , (sel1 & ~ssync0[1] ) }; // async input
96
 
97
wire gclk0  = ~ssync0[1] | clk0_i; // forced 1 when not selected
98
wire gclk1  = ~ssync1[1] | clk1_i; // forced 1 when not selected
99
 
100
wire clk_o =   gclk0 & gclk1;      // clock stalls high
101
 
102
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.