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

Subversion Repositories socgen

[/] [socgen/] [trunk/] [common/] [opencores.org/] [cde/] [ip/] [clock/] [rtl/] [verilog/] [sim/] [dll] - Blame information for rev 134

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 134 jt_eaton
localparam   MIN_CLK_DELAY = 0.01;
2
 
3
 
4
//****************************************************************************
5
// Measure the clock in period.  Use the and the multiplication
6
//   factor to determine the period for the output clock
7
//****************************************************************************
8
real  last_edge_time;
9
real  this_edge_time;   // $realtime when the input clock edges occur
10
real  ref_clk_period;   // input clock period
11
real  dll_clk_out_period;   // output clock period
12
real  clk_delay;
13
 
14
 
15
initial last_edge_time = 0;
16
initial dll_clk_out_period = 1;
17
 
18
always @(posedge ref_clk)
19
  begin
20
    this_edge_time   = $realtime;
21
    ref_clk_period   =  this_edge_time - last_edge_time;
22
    dll_clk_out_period   = (ref_clk_period) / MULT;
23
    last_edge_time   =  this_edge_time;
24
  end
25
 
26
 
27
 
28
 
29
 
30
//*****************************************************************************
31
//  Create a new clock
32
//*****************************************************************************
33
 
34
 
35
reg [SIZE-1:0]  divider;
36
 
37
 
38
initial
39
  begin
40
    dll_clk_out = 1'b0;
41
    forever
42
      begin
43
        clk_delay = (dll_clk_out_period/2);
44
        if (clk_delay < MIN_CLK_DELAY)
45
        clk_delay = MIN_CLK_DELAY;
46
        #(clk_delay) dll_clk_out = ~dll_clk_out;
47
      end
48
  end
49
 
50
 
51
always@(posedge dll_clk_out or posedge reset  )
52
  if ( reset)                 divider   <= DIV/2;
53
  else if ( divider ==  'b1)  divider   <= DIV/2;
54
  else                        divider   <= divider - 'b1;
55
 
56
always@(posedge dll_clk_out  or posedge reset )
57
  if(reset)  div_clk_out                       <= 1'b0;
58
  else if   (divider ==  'b1)   div_clk_out    <= !div_clk_out;
59
  else       div_clk_out                       <= div_clk_out;
60
 
61
 
62
 
63
 
64
 
65
 

powered by: WebSVN 2.1.0

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