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

Subversion Repositories pwm

[/] [pwm/] [trunk/] [RTL/] [down_clocking_odd.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 m99
/*Author: Zhuxu
2
        m99a1@yahoo.cn
3
Down clocking module
4
Output clock frequency is the original frequency divided by an odd number
5
*/
6
module down_clocking_odd(
7
input   i_clk,
8
input   i_rst,
9
input   [15:0]i_divisor,
10
output  o_clk
11
);
12
 
13
reg     a,b;
14
wire    c;
15
 
16
assign  c=(~a)&(~b);
17
wire    [15:0]divisor;
18
wire    borrow;
19
minus_one       minus_one_0(
20
i_divisor,
21
divisor,
22
borrow
23
);
24
 
25
wire    go;
26
assign  go=((i_divisor!=0)&&i_rst);
27
reg     [15:0]ct_0;
28
always@(posedge i_clk or negedge i_rst)
29
        if(!i_rst)begin
30
                a<=0;
31
                ct_0<=0;
32
        end
33
        else if(go)begin
34
                if(a)begin
35
                        if(ct_0>=divisor)begin
36
                                ct_0<=0;
37
                                a<=0;
38
                        end
39
                        else ct_0<=ct_0+1;
40
                end
41
                else if(c)a<=c;
42
        end
43
 
44
 
45
reg     [15:0]ct_1;
46
always@(negedge i_clk or negedge i_rst)
47
        if(!i_rst)begin
48
                b<=0;
49
                ct_1<=0;
50
        end
51
        else if(go)begin
52
                if(b)begin
53
                        if(ct_1>=divisor)begin
54
                                ct_1<=0;
55
                                b<=0;
56
                        end
57
                        else ct_1<=ct_1+1;
58
                end
59
                else if(c)b<=c;
60
        end
61
 
62
reg     clk;
63
always@(posedge c or negedge i_rst)
64
        if(!i_rst)clk<=0;
65
        else    clk<=~clk;
66
 
67
assign  o_clk=go?clk:i_clk;
68
 
69
endmodule

powered by: WebSVN 2.1.0

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