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

Subversion Repositories eco32

[/] [eco32/] [trunk/] [fpga/] [experiments/] [memspeed-2/] [src/] [clk_rst.v] - Blame information for rev 325

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 325 hellwig
//
2
// clk_rst.v -- clock and reset generator
3
//
4
 
5
 
6
`timescale 1ns/10ps
7
`default_nettype none
8
 
9
 
10
module clk_rst(clk_in, rst_inout_n,
11
               sdram_clk, sdram_fb,
12
               clk_ok, clk, rst);
13
    input clk_in;
14
    inout rst_inout_n;
15
    output sdram_clk;
16
    input sdram_fb;
17
    output clk_ok;
18
    output clk;
19
    output rst;
20
 
21
  wire clk_in_buf;
22
  wire int_clk;
23
  wire int_locked;
24
  wire ext_rst_n;
25
  wire ext_fb;
26
  wire ext_clk;
27
  wire ext_locked;
28
 
29
  wire rst_counting;
30
  reg [23:0] rst_counter;
31
  reg rst_p_n;
32
  reg rst_s_n;
33
 
34
  //
35
  // internal DCM, 100 MHz
36
  //
37
 
38
  IBUF clk_in_buffer(
39
    .I(clk_in),
40
    .O(clk_in_buf)
41
  );
42
 
43
  DCM int_dcm(
44
    .CLKIN(clk_in_buf),
45
    .CLKFB(clk),
46
    .RST(1'b0),
47
    .CLK0(int_clk),
48
    .LOCKED(int_locked)
49
  );
50
 
51
  BUFG int_clk_buffer(
52
    .I(int_clk),
53
    .O(clk)
54
  );
55
 
56
  //
57
  // reset circuit for external DCM
58
  //
59
 
60
  SRL16 ext_dll_rst_gen(
61
    .CLK(clk_in_buf),
62
    .D(int_locked),
63
    .Q(ext_rst_n),
64
    .A0(1'b1),
65
    .A1(1'b1),
66
    .A2(1'b1),
67
    .A3(1'b1)
68
  );
69
 
70
  defparam ext_dll_rst_gen.INIT = 16'h0000;
71
 
72
  //
73
  // external DCM, 100 MHz
74
  //
75
 
76
  IBUF ext_fb_buffer(
77
    .I(sdram_fb),
78
    .O(ext_fb)
79
  );
80
 
81
  DCM ext_dcm(
82
    .CLKIN(clk_in_buf),
83
    .CLKFB(ext_fb),
84
    .RST(~ext_rst_n),
85
    .CLK0(ext_clk),
86
    .LOCKED(ext_locked),
87
    .PSEN(1'b0),
88
    .PSCLK(1'b0),
89
    .PSINCDEC(1'b0)
90
  );
91
 
92
  defparam ext_dcm.CLKOUT_PHASE_SHIFT = "FIXED";
93
  defparam ext_dcm.PHASE_SHIFT = 0;
94
 
95
  OBUF ext_clk_buffer(
96
    .I(ext_clk),
97
    .O(sdram_clk)
98
  );
99
 
100
  assign clk_ok = int_locked & ext_locked;
101
 
102
  //
103
  // reset generator
104
  //
105
 
106
  assign rst_counting = (rst_counter == 24'hFFFFFF) ? 0 : 1;
107
  assign rst_inout_n = (rst_counter[23] == 0) ? 1'b0 : 1'bz;
108
 
109
  always @(posedge clk) begin
110
    rst_p_n <= rst_inout_n;
111
    rst_s_n <= rst_p_n;
112
    if (rst_counting) begin
113
      rst_counter <= rst_counter + 1;
114
    end else begin
115
      if (~rst_s_n | ~clk_ok) begin
116
        rst_counter <= 24'h000000;
117
      end
118
    end
119
  end
120
 
121
  assign rst = rst_counting;
122
 
123
endmodule

powered by: WebSVN 2.1.0

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