天天進步一點點------任意整數分頻,佔空比50%

 1 /*********************************************************************************
 2 * Company                    : 
 3 * Engineer                    :     絀烘皵寰噳
 4 * 
 5 * Create Date                :     00:00:00 22/03/2013 
 6 * Design Name                : 
 7 * Module Name                :         
 8 * Project Name                :  
 9 * Target Devices            : 
10 * Tool versions            : 
11 * Description                :  
12 *                                   http://www.cnblogs.com/kongqiweiliang/             
13 * Dependencies                : 
14 *
15 * Revision                    : 
16 * Revision                    :     0.01 - File Created
17 * Additional Comments    : 
18 ********************************************************************************/
19 `timescale 1ns/100ps
20 `define    UD  #1
21 /****************************任意整數分頻模塊,佔空比50%****************************/
22 module Int_DIV  
23 (
24     input                             iCLK                ,//輸入時鐘
25     output                             oCLK_DIV             //輸出時鐘
26 );
27 //參數--分頻係數
28 parameter F_DIV = 6              ; //分頻係數<<<<-----修改這裏
29 parameter F_DIV_WIDTH = 32     ;//分頻計數器寬度
30 
31 reg    [F_DIV_WIDTH - 1:0]        timer_p,timer_n;/* 上升、降低沿脈衝計數器 */
32 reg    clock_p,clock_n;/* 上升、降低沿脈衝 */
33 
34 always @(posedge iCLK)begin/* 上升沿脈衝計數器 */
35     if(timer_p < F_DIV - 1'b1)
36         timer_p <= timer_p + 1'b1;
37     else
38         timer_p <= 0;
39 end
40 
41 always @(negedge iCLK)begin/* 降低沿脈衝計數器 */
42     if(timer_n < F_DIV - 1'b1)
43         timer_n <= timer_n + 1'b1;
44     else
45         timer_n <= 0;
46 end
47 
48 always @(posedge iCLK)begin/* 上升沿脈衝 */
49     if(timer_p == (F_DIV>>1) - 1'b1)
50         clock_p <= 1'b0;
51     else if(timer_p == F_DIV - 1'b1)
52         clock_p <= 1'b1;
53 end
54 
55 always @(negedge iCLK)begin/* 降低沿脈衝 */
56     if(timer_n == (F_DIV>>1) - 1'b1)
57         clock_n <= 1'b0;
58     else if(timer_n == F_DIV - 1'b1)
59         clock_n <= 1'b1;
60 end
61 
62 assign oCLK_DIV = (F_DIV[0] == 1) ? (clock_p | clock_n) : clock_p;
63 
64 endmodule 
相關文章
相關標籤/搜索