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

Subversion Repositories qaz_libs

[/] [qaz_libs/] [trunk/] [BFM/] [src/] [clock/] [clock_mult.v] - Rev 48

Go to most recent revision | Compare with Previous | Blame | View Log

//
//
//
 
`timescale 1ps/1ps
 
 
module clock_mult
#(
  parameter MULT = 7
)
(
  input       clock_in,
  output reg  clock_out,
  output reg  clock_good,
 
  input  reset
);
 
  // --------------------------------------------------------------------
  //
  time  clock_in_time_buffer;
  time  clock_out_period;
 
  wire enable = (reset === 1'b0) & ((clock_in === 1'b0) | (clock_in === 1'b1));
 
  reg [(MULT - 1):0] delayed_clock_in = 0;
 
  initial
    begin
      clock_out             <= 0;
      clock_out_period      <= 0;
      clock_good            <= 0;
 
      wait( ~enable );
 
      @(posedge clock_in);
      clock_in_time_buffer  = $time;
 
      @(posedge clock_in);
      clock_out_period      = ($time - clock_in_time_buffer) / MULT;
 
      @(posedge clock_in);
      clock_good            = 1;
 
    end
 
 
  // --------------------------------------------------------------------
  //
  integer i;
 
  always @( * )
    for( i = 0; i < MULT; i = i + 1 )
      delayed_clock_in[i] <= #(i * clock_out_period) clock_in;
 
 
  // --------------------------------------------------------------------
  //
  integer j;
 
  always @(posedge clock_in)
    begin
      if(clock_good)
        begin
          clock_out = 1'b1;
          #(clock_out_period/2);
          clock_out = 1'b0;
          for( j = 1; j < MULT; j = j + 1 )
            begin
              @(posedge delayed_clock_in[j]);
              clock_out = 1'b1;
              #(clock_out_period/2);
              clock_out = 1'b0;
            end
        end
    end
 
 
endmodule
 
 
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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