[筆記].等占空比分頻器的幾種寫法.[Verilog]

來源:互聯網
上載者:User
文章目錄
  • 1 偶數分頻
  • 參考資料
1 偶數分頻(1)2的冪分頻

案例I 二分頻

i: div_2.v

module div_2(  input  i_clk,  input  i_rst_n,    output o_clk);reg [0:0] cnt;always @ (posedge i_clk, negedge i_rst_n)  if (!i_rst_n)    cnt <= 0;  else    cnt <= cnt + 1'b1;assign o_clk = cnt[0];endmodule

ii:RTL視圖(QII綜合結果)

圖1 二分頻的RTL視圖

iii:模擬波形(QII模擬結果)

圖2 二分頻的模擬波形

案例II 四分頻

i:div_4.v

module div_4(  input  i_clk,  input  i_rst_n,    output o_clk);reg [1:0] cnt;always @ (posedge i_clk, negedge i_rst_n)  if (!i_rst_n)    cnt <= 0;  else    cnt <= cnt + 1'b1;assign o_clk = cnt[1];endmodule

 ii:RTL視圖(QII綜合結果)

圖3 四分頻的RTL視圖

iii:模擬波形(QII模擬結果)

圖4 四分頻的模擬波形

(2)不是2的冪分頻

案例I 六分頻

i:div_6.v

module div_6(  input      i_clk,  input      i_rst_n,    output reg o_clk);// log2(6) = 2.5850 <= 3reg [2:0] cnt; // 6 bit counter: 0 ~ 5// 5 = 6 - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    cnt <= 0;  else  begin    if (cnt == 5)      cnt <= 0;    else       cnt <= cnt + 1'b1;    endend // 0 ~ 2  -> 1      // 2 ~ 5  -> 0// 2 = 6>>1 - 1// 5 = 6    - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    o_clk <= 0;  else  begin    if (cnt <= 2)      o_clk <= 1;    else      o_clk <= 0;  endend endmodule

ii:RTL視圖(QII綜合結果)

圖5 六分頻的RTL視圖


gt;iii:模擬波形(QII模擬結果)

圖6 六分頻的模擬波形

案例II 十分頻

i:div_10.v

module div_10(  input      i_clk,  input      i_rst_n,    output reg o_clk);// log2(10) = 3.3219 <= 4reg [3:0] cnt; // 10 bit counter: 0 ~ 9// 9 = 10 - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    cnt <= 0;  else  begin    if (cnt == 9)      cnt <= 0;    else       cnt <= cnt + 1'b1;    endend // 0 ~ 4  -> 1      // 4 ~ 9  -> 0// 4 = 10>>1 - 1// 9 = 10    - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    o_clk <= 0;  else  begin    if (cnt <= 4)      o_clk <= 1;    else      o_clk <= 0;  endend endmodule

ii:RTL視圖(QII綜合結果)

圖7 十分頻的RTL視圖

iii:模擬波形(QII模擬結果)

圖8 十分頻的模擬波形

2 奇數分頻

案例I 三分頻

i. div_3.v

module div_3(  input  i_clk,  input  i_rst_n,    output o_clk); // log2(3) = 1.5850 <= 2  reg [1:0] cnt_p;                        // 上升沿計數子 // 3位上升沿計數器: 0 ~ 2// 2 = 3 - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    cnt_p <= 0;  else    begin    if (cnt_p == 2)      cnt_p <= 0;    else      cnt_p <= cnt_p + 1'b1;    endend// log2(3) = 1.5850 <= 2  reg [1:0] cnt_n;                        // 下降沿計數子// 3位下降沿計數器: 0 ~ 2// 2 = 3 - 1always @ (negedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    cnt_n <= 0;  else  begin    if (cnt_n == 2)      cnt_n <= 0;    else      cnt_n <= cnt_n + 1'b1;  endend reg o_clk_p;                            // 上升沿時鐘輸出寄存器// 輸出上升沿時鐘// 0     ~ 1 ↑-> 1// (1+1) ~ 2 ↑-> 0// 1 = 3>>1// 2 = 3 - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    o_clk_p <= 0;  else  begin    if (cnt_p <= 1)                     // 1 = 3>>1      o_clk_p <= 1;    else       o_clk_p <= 0;  endend reg o_clk_n;                            // 下降沿時鐘輸出寄存器// 輸出下降沿時鐘// 0     ~  1 ↓-> 1// (1+1) ~  2 ↓-> 0// 1 = 3>>1// 2 = 3 - 1always @ (negedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    o_clk_n <= 0;  else  begin    if (cnt_n <= 1)                     // 1 = 3>>1      o_clk_n <= 1;    else       o_clk_n <= 0;  endendassign o_clk = o_clk_n & o_clk_p;       // 按位與(作用:掩碼) endmodule

ii:RTL視圖(QII綜合結果)

圖9 三分頻的RTL視圖

iii:模擬波形(QII模擬結果)

圖10 三分頻的模擬波形

案例II 五分頻

i. div_5.v

module div_5(  input  i_clk,  input  i_rst_n,    output o_clk); // log2(5) = 2.3219 <= 3  reg [2:0] cnt_p;                        // 上升沿計數子 // 5位上升沿計數器: 0 ~ 4// 4 = 5 - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    cnt_p <= 0;  else    begin    if (cnt_p == 4)      cnt_p <= 0;    else      cnt_p <= cnt_p + 1'b1;    endend// log2(5) = 2.3219 <= 3  reg [2:0] cnt_n;                        // 下降沿計數子// 5位下降沿計數器: 0 ~ 4// 4 = 5 - 1always @ (negedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    cnt_n <= 0;  else  begin    if (cnt_n == 4)      cnt_n <= 0;    else      cnt_n <= cnt_n + 1'b1;  endend reg o_clk_p;                            // 上升沿時鐘輸出寄存器// 輸出上升沿時鐘// 0     ~ 2 ↑-> 1// (2+1) ~ 4 ↑-> 0// 2 = 5>>1// 4 = 5 - 1always @ (posedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    o_clk_p <= 0;  else  begin    if (cnt_p <= 2)                     // 2 = 5>>1      o_clk_p <= 1;    else       o_clk_p <= 0;  endend reg o_clk_n;                            // 下降沿時鐘輸出寄存器// 輸出下降沿時鐘// 0     ~ 2 ↓-> 1// (2+1) ~ 4 ↓-> 0// 2 = 5>>1// 4 = 5 - 1always @ (negedge i_clk, negedge i_rst_n)begin  if (!i_rst_n)    o_clk_n <= 0;  else  begin    if (cnt_n <= 2)                     // 2 = 5>>1      o_clk_n <= 1;    else       o_clk_n <= 0;  endendassign o_clk = o_clk_n & o_clk_p;       // 按位與(作用:掩碼) endmodule

ii:RTL視圖(QII綜合結果)

圖11 五分頻的RTL視圖

iii:模擬波形(QII模擬結果)

圖12 五分頻的模擬波形

參考資料

1. 真 OO無雙,(原創) 如何設計除頻器? (SOC) (Verilog) (MegaCore)

http://www.cnblogs.com/oomusou/archive/2008/07/31/verilog_clock_divider.html

2. 小時不識月,N倍奇數分頻器.(Verilog)

http://blog.ednchina.com/2006tx_yafeng/146438/message.aspx

3. 小時不識月,N倍偶數分頻器.(Verilog)

http://blog.ednchina.com/2006tx_yafeng/146525/message.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.