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

Subversion Repositories iso7816_3_master

[/] [iso7816_3_master/] [trunk/] [sources/] [ClkDivider.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 acapola
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: Sebastien Riou
5
// 
6
// Create Date:    18:05:27 01/09/2011 
7
// Design Name: 
8
// Module Name:    clkDivider 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
 
22
/*
23
Basic clock divider
24
 
25
if divider=0
26
        dividedClk=clk
27
else
28
        F(dividedClk)=F(clk)/(divider*2)
29
        dividedClk has a duty cycle of 50%
30
 
31
WARNING:
32
        To change divider on the fly:
33
                1. set it to 0 at least for one cycle
34
                2. set it to the new value.
35
*/
36
module ClkDivider(
37
        input nReset,
38
        input clk,                                                                      // input clock
39
        input [DIVIDER_WIDTH-1:0] divider,       // divide factor
40
        output dividedClk,                                              // divided clock
41
        output divideBy1,
42
        output match,
43
        output risingMatch,
44
        output fallingMatch
45
        );
46
//parameters to override
47
parameter DIVIDER_WIDTH = 16;
48
 
49
        reg out;//internal divided clock
50
        reg [DIVIDER_WIDTH-1:0] cnt;
51
 
52
        // if divider=0, dividedClk = clk.
53
        assign divideBy1 = |divider ? 1'b0 : 1'b1;
54
        assign dividedClk = divideBy1 ? clk : out;
55
 
56
        assign match = (cnt==(divider-1));
57
        assign risingMatch = match & ~out;
58
        assign fallingMatch = match & out;
59
 
60
        always @(posedge clk, negedge nReset)
61
        begin
62
                if(~nReset | divideBy1) begin
63
                        cnt <= 0;
64
                        out <= 1'b0;
65
                end else if(~divideBy1) begin
66
                        if(match) begin
67
                                cnt <= 0;
68
                                out <= ~out;
69
                        end else begin
70
                                cnt <= cnt + 1'b1;
71
                        end
72
                end
73
        end
74
 
75
endmodule

powered by: WebSVN 2.1.0

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