1任意整数分频模块//*******************************************************//
 2任意整数分频模块//                  任意整数分频模块                     //
 3任意整数分频模块//*******************************************************//
 4任意整数分频模块//功能:对输入时钟clock进行F_DIV倍分频后输出clk_out。
 5任意整数分频模块//其中F_DIV为分频系数,分频系数范围为1~2^n (n=F_DIV_WIDTH)
 6任意整数分频模块//若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。
 7任意整数分频模块//若分频系数为偶数,则输出时钟占空比为50%;
 8任意整数分频模块//若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分
 9任意整数分频模块//频系数(当输入为50%时,输出也是50%)。
10任意整数分频模块//--------------------------------------------------------
11任意整数分频模块//奇数倍分频:三倍分频的时序图如下所示。
12任意整数分频模块//               1     2     3     4     5    6
13任意整数分频模块//clock      |--|__|--|__|--|__|--|__|--|__|--|__|
14任意整数分频模块//clk_p_r    |_____|-----------|_____|-----------|
15任意整数分频模块//clk_n_r    ---|_____|-----------|_____|---------
16任意整数分频模块//clk_out    |________|--------|________|--------|
17任意整数分频模块
18任意整数分频模块module  int_div(clock,clk_out);
19任意整数分频模块
20任意整数分频模块//I/O口声明
21任意整数分频模块input    clock;                    //输入时钟
22任意整数分频模块output    clk_out;                //输出时钟
23任意整数分频模块
24任意整数分频模块//内部寄存器
25任意整数分频模块reg    clk_p_r;                    //上升沿输出时钟
26任意整数分频模块reg clk_n_r;                    //下降沿输出时钟
27任意整数分频模块reg[F_DIV_WIDTH - 1:0] count_p;    //上升沿脉冲计数器
28任意整数分频模块reg[F_DIV_WIDTH - 1:0] count_n;    //下降沿脉冲计数器
29任意整数分频模块
30任意整数分频模块//参数--分频系数
31任意整数分频模块parameter F_DIV = 48000000;        //分频系数<<<<-----修改这里
32任意整数分频模块parameter F_DIV_WIDTH = 32;     //分频计数器宽度
33任意整数分频模块
34任意整数分频模块wire full_div_p;                //上升沿计数满标志
35任意整数分频模块wire half_div_p;                //上升沿计数半满标志
36任意整数分频模块wire full_div_n;                //下降沿计数满标志
37任意整数分频模块wire half_div_n;                //下降沿计数半满标志
38任意整数分频模块
39任意整数分频模块//判断计数标志位置位与否
40任意整数分频模块assign full_div_p = (count_p < F_DIV - 1);
41任意整数分频模块assign half_div_p = (count_p < (F_DIV>>1- 1);
42任意整数分频模块assign full_div_n = (count_n < F_DIV - 1);
43任意整数分频模块assign half_div_n = (count_n < (F_DIV>>1- 1);
44任意整数分频模块
45任意整数分频模块//时钟输出
46任意整数分频模块assign    clk_out = (F_DIV == 1? 
47任意整数分频模块                clock : (F_DIV[0? (clk_p_r & clk_n_r) : clk_p_r); //F_DIV[0]用于判断奇偶数
48任意整数分频模块
49任意整数分频模块//上升沿脉冲计数
50任意整数分频模块always @(posedge clock)
51任意整数分频模块begin
52任意整数分频模块    if(full_div_p)
53任意整数分频模块    begin
54任意整数分频模块        count_p <= count_p + 1'b1;
55任意整数分频模块        if(half_div_p)
56任意整数分频模块            clk_p_r <= 1'b0;
57任意整数分频模块        else
58任意整数分频模块            clk_p_r <= 1'b1;
59任意整数分频模块    end
60任意整数分频模块    else
61任意整数分频模块    begin
62任意整数分频模块        count_p <= 0;
63任意整数分频模块        clk_p_r <= 1'b0;
64任意整数分频模块    end
65任意整数分频模块end
66任意整数分频模块
67任意整数分频模块//下降沿脉冲计数
68任意整数分频模块always @(negedge clock)
69任意整数分频模块begin
70任意整数分频模块    if(full_div_n)
71任意整数分频模块    begin
72任意整数分频模块        count_n <= count_n + 1'b1;
73任意整数分频模块        if(half_div_n)
74任意整数分频模块            clk_n_r <= 1'b0;
75任意整数分频模块        else
76任意整数分频模块            clk_n_r <= 1'b1;
77任意整数分频模块    end
78任意整数分频模块    else
79任意整数分频模块    begin
80任意整数分频模块        count_n <= 0;
81任意整数分频模块        clk_n_r <= 1'b0;
82任意整数分频模块    end
83任意整数分频模块end
84任意整数分频模块
85任意整数分频模块endmodule
86任意整数分频模块

相关文章: