[原創]時鍾分頻之奇分頻(5分頻)


0. 簡介

  有時在基本模塊的設計中常常會使用到時鍾分頻,時鍾的偶分頻相對與奇分頻比較簡單,但是奇分頻的理念想透徹后也是十分簡單的,這里就把奇分頻做一個記錄。

1. 奇分頻

  其實現很簡單,主要為使用兩個計數模塊分別計數,得到兩個波形進行基本與或操作完成。直接貼出代碼部分如下。

 1 module  div_freq(
 2         iCLK,
 3         iRST_n,
 4         oCLK
 5 );
 6  
 7 input   wire    iCLK;
 8 input   wire    iRST_n;
 9 output          oCLK;
10  
11 parameter   N = 4'd5;
12  
13 reg         clk_p;
14 reg [3:0]   cnt_p;
15 always @ (posedge iCLK or negedge iRST_n) begin
16     if (!iRST_n)
17         cnt_p <= 4'd0;
18     else if (cnt_p == N - 1)
19         cnt_p <= 4'd0;
20     else
21         cnt_p <= cnt_p + 1'b1;
22 end
23 always @ (posedge iCLK or negedge iRST_n) begin
24     if (!iRST_n)
25         clk_p <= 1'b0;
26     else if (cnt_p == (N - 1) / 2)
27         clk_p <= ~clk_p;
28     else if (cnt_p == N - 1)
29         clk_p <= ~clk_p;
30     else
31         clk_p <= clk_p;
32 end
33  
34  
35 reg         clk_n;
36 reg [3:0]   cnt_n;
37 always @ (negedge iCLK or negedge iRST_n) begin
38     if (!iRST_n)
39         cnt_n <= 4'd0;
40     else if (cnt_n == N - 1)
41         cnt_n <= 4'd0;
42     else
43         cnt_n <= cnt_n + 1'b1;
44 end
45 always @ (negedge iCLK or negedge iRST_n) begin
46     if (!iRST_n)
47         clk_n <= 1'b0;
48     else if (cnt_n == (N - 1) / 2)
49         clk_n <= ~clk_n;
50     else if (cnt_n == N - 1)
51         clk_n <= ~clk_n;
52     else
53         clk_n <= clk_n;
54 end
55  
56 assign  oCLK = clk_p | clk_n;
57  
58 endmodule
59         

modelsim仿真結果如下圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM