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

Subversion Repositories eco32

[/] [eco32/] [trunk/] [fpga/] [mc/] [boards/] [s3e-500/] [src/] [clk_rst/] [clk_rst.v] - Blame information for rev 290

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 224 hellwig
//
2
// clk_rst.v -- clock and reset generator
3
//
4
 
5
 
6 290 hellwig
`timescale 1ns/10ps
7
`default_nettype none
8
 
9
 
10
module clk_rst(clk_in, rst_in,
11 224 hellwig
               ddr_clk_0, ddr_clk_90, ddr_clk_180,
12 290 hellwig
               ddr_clk_270, ddr_clk_ok, clk, rst);
13 224 hellwig
    input clk_in;
14 290 hellwig
    input rst_in;
15 224 hellwig
    output ddr_clk_0;
16
    output ddr_clk_90;
17
    output ddr_clk_180;
18
    output ddr_clk_270;
19
    output ddr_clk_ok;
20
    output clk;
21 290 hellwig
    output rst;
22 224 hellwig
 
23
  wire clk50_in;
24
  wire clk50_out;
25
  wire clk50_ok;
26
  wire clk100_out;
27
  wire clk100_in;
28
  wire clk100_0;
29
  wire clk100_90;
30
  wire clk100_180;
31
  wire clk100_270;
32
  wire clk100_ok;
33
 
34 290 hellwig
  reg rst_p;
35
  reg rst_s;
36
  reg [23:0] rst_counter;
37
  wire rst_counting;
38 224 hellwig
 
39
  //------------------------------------------------------------
40
 
41
  IBUFG clk_in_buffer(
42
    .I(clk_in),
43
    .O(clk50_in)
44
  );
45
 
46
  DCM_SP dcm50(
47
    .RST(1'b0),
48
    .CLKIN(clk50_in),
49
    .CLKFB(clk),
50
    .CLK0(clk50_out),
51
    .CLK2X(clk100_out),
52
    .LOCKED(clk50_ok),
53
    .PSCLK(1'b0),
54
    .PSEN(1'b0),
55
    .PSINCDEC(1'b0)
56
  );
57
 
58
  defparam dcm50.CLKDV_DIVIDE = 2.0;
59
  defparam dcm50.CLKFX_DIVIDE = 1;
60
  defparam dcm50.CLKFX_MULTIPLY = 4;
61
  defparam dcm50.CLKIN_DIVIDE_BY_2 = "FALSE";
62
  defparam dcm50.CLKIN_PERIOD = 20.0;
63
  defparam dcm50.CLKOUT_PHASE_SHIFT = "NONE";
64
  defparam dcm50.CLK_FEEDBACK = "1X";
65
  defparam dcm50.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
66
  defparam dcm50.DLL_FREQUENCY_MODE = "LOW";
67
  defparam dcm50.DUTY_CYCLE_CORRECTION = "TRUE";
68
  defparam dcm50.PHASE_SHIFT = 0;
69
  defparam dcm50.STARTUP_WAIT = "FALSE";
70
 
71
  BUFG clk50_buffer(
72
    .I(clk50_out),
73
    .O(clk)
74
  );
75
 
76
  BUFG clk100_buffer(
77
    .I(clk100_out),
78
    .O(clk100_in)
79
  );
80
 
81
  //------------------------------------------------------------
82
 
83
  DCM_SP dcm100(
84
    .RST(~clk50_ok),
85
    .CLKIN(clk100_in),
86
    .CLKFB(ddr_clk_0),
87
    .CLK0(clk100_0),
88
    .CLK90(clk100_90),
89
    .CLK180(clk100_180),
90
    .CLK270(clk100_270),
91
    .LOCKED(clk100_ok),
92
    .PSCLK(1'b0),
93
    .PSEN(1'b0),
94
    .PSINCDEC(1'b0)
95
  );
96
 
97
  defparam dcm100.CLKDV_DIVIDE = 2.0;
98
  defparam dcm100.CLKFX_DIVIDE = 1;
99
  defparam dcm100.CLKFX_MULTIPLY = 4;
100
  defparam dcm100.CLKIN_DIVIDE_BY_2 = "FALSE";
101
  defparam dcm100.CLKIN_PERIOD = 10.0;
102
  defparam dcm100.CLKOUT_PHASE_SHIFT = "NONE";
103
  defparam dcm100.CLK_FEEDBACK = "1X";
104
  defparam dcm100.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
105
  defparam dcm100.DLL_FREQUENCY_MODE = "LOW";
106
  defparam dcm100.DUTY_CYCLE_CORRECTION = "TRUE";
107
  defparam dcm100.PHASE_SHIFT = 0;
108
  defparam dcm100.STARTUP_WAIT = "FALSE";
109
 
110
  BUFG clk100_0_buffer(
111
    .I(clk100_0),
112
    .O(ddr_clk_0)
113
  );
114
 
115
  BUFG clk100_90_buffer(
116
    .I(clk100_90),
117
    .O(ddr_clk_90)
118
  );
119
 
120
  BUFG clk100_180_buffer(
121
    .I(clk100_180),
122
    .O(ddr_clk_180)
123
  );
124
 
125
  BUFG clk100_270_buffer(
126
    .I(clk100_270),
127
    .O(ddr_clk_270)
128
  );
129
 
130
  assign ddr_clk_ok = clk100_ok;
131
 
132
  //------------------------------------------------------------
133
 
134 290 hellwig
  assign rst_counting = (rst_counter == 24'hFFFFFF) ? 0 : 1;
135 224 hellwig
 
136
  always @(posedge clk) begin
137 290 hellwig
    rst_p <= rst_in;
138
    rst_s <= rst_p;
139
    if (rst_s | ~clk50_ok | ~clk100_ok) begin
140
      rst_counter <= 24'h000000;
141 224 hellwig
    end else begin
142 290 hellwig
      if (rst_counting == 1) begin
143
        rst_counter <= rst_counter + 1;
144 224 hellwig
      end
145
    end
146
  end
147
 
148 290 hellwig
  assign rst = rst_counting;
149 224 hellwig
 
150
endmodule

powered by: WebSVN 2.1.0

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