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

Subversion Repositories rtf68ksys

[/] [rtf68ksys/] [trunk/] [rtl/] [verilog/] [rtf68kSysClkgen.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 robfinch
//=============================================================================
2
//      2005-2010 Robert T Fingh
3
//      robfinch@FPGAfield.ca
4
//
5
//      rtf68kSysClkgen.v
6
//
7
//
8
//      This source code is available only for viewing, testing and evaluation
9
//      purposes. Any commercial use requires a license. This copyright
10
//      statement and disclaimer must remain present in the file.
11
//
12
//
13
//      NO WARRANTY.
14
//  THIS Work, IS PROVIDEDED "AS IS" WITH NO WARRANTIES OF ANY KIND, WHETHER
15
//      EXPRESS OR IMPLIED. The user must assume the entire risk of using the
16
//      Work.
17
//
18
//      IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
19
//  INCIDENTAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES WHATSOEVER RELATING TO
20
//  THE USE OF THIS WORK, OR YOUR RELATIONSHIP WITH THE AUTHOR.
21
//
22
//      IN ADDITION, IN NO EVENT DOES THE AUTHOR AUTHORIZE YOU TO USE THE WORK
23
//      IN APPLICATIONS OR SYSTEMS WHERE THE WORK'S FAILURE TO PERFORM CAN
24
//      REASONABLY BE EXPECTED TO RESULT IN A SIGNIFICANT PHYSICAL INJURY, OR IN
25
//      LOSS OF LIFE. ANY SUCH USE BY YOU IS ENTIRELY AT YOUR OWN RISK, AND YOU
26
//      AGREE TO HOLD THE AUTHOR AND CONTRIBUTORS HARMLESS FROM ANY CLAIMS OR
27
//      LOSSES RELATING TO SUCH UNAUTHORIZED USE.
28
//
29
//
30
//      System clock generator. Generates clock enables for various parts of the
31
//      system.
32
//
33
//=============================================================================
34
 
35
module rtf68kSysClkgen(xreset, xclk, rst, clk50, clk25, vclk, vclk5, pulse1000Hz);
36
input xreset;           // external reset
37
input xclk;                     // external clock source (50 MHz)
38
output rst;
39
output clk50;           // cpu (system clock - eg. 50.000 MHz)
40
output clk25;
41
output vclk;            // video clock 
42
output vclk5;           // 5x vidoe clock
43
output pulse1000Hz;     // 1000 Hz pulse
44
 
45
wire gnd;
46
wire clk39u;
47
wire clk39ub;
48
wire clk100u;
49
wire clkfb;
50
wire clk2x;
51
wire clk50u;            // unbuffered 60MHz
52
wire clk73u;            // unbuffered 73MHz
53
wire clkvu;
54
wire locked0;
55
wire clk25u;
56
wire clk147u;
57
wire clk367u;
58
 
59
assign gnd = 1'b0;
60
 
61
BUFG bg0 (.I(clk50u),   .O(clk50) );
62
BUFG bg1 (.I(clk73u),   .O(vclk) );
63
BUFG bg2 (.I(clk25u),   .O(clk25) );
64
BUFG bg3 (.I(clk367u),  .O(vclk5) );
65
 
66
// Reset:
67
//
68
// Hold the reset line active for a few thousand clock cycles
69
// to allow the clock generator and other devices to stabilize.
70
 
71
reg [14:0] rst_ctr;
72
assign rst = xreset | !locked0;// | !rst_ctr[14];
73
 
74
always @(posedge xclk)
75
        if (xreset)
76
                rst_ctr <= 0;
77
        else if (!rst_ctr[14])
78
                rst_ctr <= rst_ctr + 1;
79
 
80
 
81
// 1000Hz pulse generator
82
reg [15:0] cnt;
83
assign pulse1000Hz = cnt==16'd25000;
84
 
85
always @(posedge clk25)
86
        if (rst)
87
                cnt <= 16'd1;
88
        else begin
89
                if (pulse1000Hz)
90
                        cnt <= 16'd1;
91
                else
92
                        cnt <= cnt + 16'd1;
93
        end
94
 
95
 
96
// connect rst to global network
97
//STARTUP_SPARTAN3 su0(.GSR(rst));
98
 
99
// Generate 73.529 MHz source from 100 MHz
100
DCM dcm0(
101
        .RST(xreset),
102
        .PSCLK(gnd),
103
        .PSEN(gnd),
104
        .PSINCDEC(gnd),
105
        .DSSEN(gnd),
106
        .CLKIN(xclk),
107
        .CLKFB(clk100u),        // 100.000 MHz
108
        .CLKDV(clk25u),
109
        .CLKFX(clk73u),         // 73.728 MHz unbuffered
110
        .CLKFX180(),
111
        .CLK0(clk50u),
112
        .CLK2X(clk100u),        // 100.000 MHz
113
        .CLK2X180(),
114
        .CLK90(),
115
        .CLK180(),
116
        .CLK270(),
117
        .LOCKED(locked0),
118
        .PSDONE(),
119
        .STATUS()
120
);
121
defparam dcm0.CLK_FEEDBACK = "2x";
122
defparam dcm0.CLKDV_DIVIDE = 3.0;
123
defparam dcm0.CLKFX_DIVIDE = 17;        // (25/17)*50 = 73.529 MHz
124
defparam dcm0.CLKFX_MULTIPLY = 25;
125
defparam dcm0.CLKIN_DIVIDE_BY_2 = "FALSE";
126
defparam dcm0.CLKIN_PERIOD = 20.000;
127
defparam dcm0.CLKOUT_PHASE_SHIFT = "NONE";
128
defparam dcm0.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
129
defparam dcm0.DFS_FREQUENCY_MODE = "LOW";
130
defparam dcm0.DLL_FREQUENCY_MODE = "LOW";
131
defparam dcm0.DUTY_CYCLE_CORRECTION = "FALSE";
132
//      defparam dcm0.FACTORY_JF = 16'h8080;
133
defparam dcm0.PHASE_SHIFT = 0;
134
defparam dcm0.STARTUP_WAIT = "FALSE";
135
 
136
wire clkfb1;
137
 
138
DCM dcm1(
139
        .RST(xreset),
140
        .PSCLK(gnd),
141
        .PSEN(gnd),
142
        .PSINCDEC(gnd),
143
        .DSSEN(gnd),
144
        .CLKIN(vclk),
145
        .CLKFB(clkfb1),         // 73.529 MHz
146
        .CLKDV(),
147
        .CLKFX(clk367u),                // 367.645 MHz unbuffered
148
        .CLKFX180(),
149
        .CLK0(),
150
        .CLK2X(clkfb1), // 100.000 MHz
151
        .CLK2X180(),
152
        .CLK90(),
153
        .CLK180(),
154
        .CLK270(),
155
        .LOCKED(),
156
        .PSDONE(),
157
        .STATUS()
158
);
159
defparam dcm1.CLK_FEEDBACK = "2x";
160
defparam dcm1.CLKDV_DIVIDE = 2.0;
161
defparam dcm1.CLKFX_DIVIDE = 2; // (10/2)*73.529 = 367.645 MHz
162
defparam dcm1.CLKFX_MULTIPLY = 10;
163
defparam dcm1.CLKIN_DIVIDE_BY_2 = "FALSE";
164
defparam dcm1.CLKIN_PERIOD = 13.600;
165
defparam dcm1.CLKOUT_PHASE_SHIFT = "NONE";
166
defparam dcm1.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
167
defparam dcm1.DFS_FREQUENCY_MODE = "LOW";
168
defparam dcm1.DLL_FREQUENCY_MODE = "LOW";
169
defparam dcm1.DUTY_CYCLE_CORRECTION = "FALSE";
170
//      defparam dcm0.FACTORY_JF = 16'h8080;
171
defparam dcm1.PHASE_SHIFT = 0;
172
defparam dcm1.STARTUP_WAIT = "FALSE";
173
 
174
endmodule

powered by: WebSVN 2.1.0

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