File: clock_div.v

package info (click to toggle)
uhd 4.9.0.0%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 184,180 kB
  • sloc: cpp: 262,887; python: 112,011; ansic: 102,670; vhdl: 57,031; tcl: 19,924; xml: 8,581; makefile: 3,028; sh: 2,812; pascal: 230; javascript: 120; csh: 94; asm: 20; perl: 11
file content (53 lines) | stat: -rw-r--r-- 1,035 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//
// Copyright 2022 Ettus Research, a National Instruments Brand
//
// SPDX-License-Identifier: LGPL-3.0-or-later
//
// Module: clock_div
//
// Description:
//  Clock divider. Generates an output clock that is 1/N times the frequency
//  of the input clock.
//
// Parameters:
//
//   N : Even number to divide clock by
//

module clock_div #(
  parameter N = 8'h1
) (
  // Input Clock and reset
  input  wire        clk_in,
  input  wire        clk_in_rst,

  // Request
  output reg        clk_out
);
  localparam NDIV2 = N/2;
  localparam WIDTH = $clog2(NDIV2);
  reg [WIDTH-1:0] div_ctr;
  wire [WIDTH-1:0] next_div_ctr;

  //errors if N is not even
  if (N % 2 != 0) begin : gen_assertion
    ERROR_N_must_be_even();
  end

  always @(posedge clk_in) begin

    if(clk_in_rst) begin
      div_ctr <= 0;
      clk_out <= 0;
    end else if (next_div_ctr == NDIV2) begin
      div_ctr <= 0;
      clk_out <= ~clk_out;
    end else begin
      div_ctr <= next_div_ctr;
    end

  end

  assign next_div_ctr = div_ctr + 1;

endmodule