分频电路的verilog实现
偶數(shù)2分頻
由偶數(shù)二分頻波形可知,每次在時鐘的上升沿,輸出寄存器的狀態(tài)進(jìn)行翻轉(zhuǎn),就能得到二分頻后的時鐘。
代碼如下:
二分頻電路如下:
偶數(shù)N分頻
方法:用模為N/2的計數(shù)器實現(xiàn)占空比為50%的偶數(shù)N分頻時鐘信號,計數(shù)器為N/2 - 1時,輸出時鐘寄存器狀態(tài)翻轉(zhuǎn)。
代碼如下(div_coe代表分頻數(shù)):
module even_div #(parameter div_coe = 2) ( input clk, input rst,output clk_div);localparam div_even = div_coe>>1; reg clk_div_r; reg [div_even-1:0] cnt; assign clk_div = clk_div_r;always@(posedge clk) beginif(rst)beginclk_div_r <= 1'b0;cnt <= 0;endelse if(cnt == div_even - 1)begin clk_div_r <= ~clk_div_r;cnt <= 0;endelsebegincnt <= cnt + 1;end endendmodule測試代碼如下:
module tset_clk_div#(parameter div_coe = 6)( );reg clk; reg rst; wire clk_div;initial beginclk = 0;rst = 0;#50rst = 1;#25rst = 0; end always #5 clk = ~clk;even_div#div_coeU0 ( .clk(clk), .rst(rst),.clk_div(clk_div)); endmodule6分頻仿真波形為:
N分頻電路如下:
奇數(shù)N分頻,要求分頻后時鐘占空比為50%
以3分頻為例,在時鐘clk的作用下,先產(chǎn)生占空比為1/3的時鐘clk_div_r;然后時鐘clk取反,得到時鐘clk_n,在clk_n的作用下,產(chǎn)生占空比為1/3的時鐘clk_div_r1;clk_div_r與clk_div_r1只差半個時鐘周期,二者相或運算得到占空比為50%的三分頻時鐘。
總結(jié)產(chǎn)生時鐘占空比為50%的奇數(shù)N分頻時鐘方法:
1、在時鐘clk的作用下,計數(shù)器cnt在(N-1)/2以及N-1狀態(tài)時,時鐘寄存器clk_div_r進(jìn)行狀態(tài)翻轉(zhuǎn),得到占空比為[(N-1)/2]/N的分頻時鐘;
2、在取反后的時鐘clk_n的作用下,計數(shù)器cnt1在(N-1)/2以及N-1狀態(tài)時,時鐘寄存器clk_div_r1進(jìn)行狀態(tài)翻轉(zhuǎn),得到占空比為[(N-1)/2]/N的分頻時鐘;
3、clk_div_r與clk_div_r1相或,得到占空比為50%的奇數(shù)N分頻時鐘
代碼如下(div_coe代表分頻數(shù)):
module odd_div #(parameter div_coe = 3) ( input clk, input rst,output clk_div);localparam div_odd = (div_coe - 1)>>1; reg clk_div_r; reg [div_coe-1:0] cnt; reg clk_div_r1; reg [div_coe-1:0] cnt1; wire clk_n; assign clk_n = ~clk; assign clk_div = clk_div_r || clk_div_r1;always@(posedge clk) beginif(rst)begincnt <= 0;endelse if(cnt == div_coe - 1)begincnt <= 0;endelsebegincnt <= cnt + 1;end endalways@(posedge clk_n) beginif(rst)begincnt1 <= 0;endelse if(cnt1 == div_coe - 1)begincnt1 <= 0;endelsebegincnt1 <= cnt1 + 1;end endalways@(posedge clk) beginif(rst)beginclk_div_r <= 1'b0;endelse if(cnt == div_odd)beginclk_div_r <= ~clk_div_r;endelse if(cnt == div_coe - 1)beginclk_div_r <= ~clk_div_r;end endalways@(posedge clk_n) beginif(rst)beginclk_div_r1 <= 1'b0;endelse if(cnt1 == div_odd)beginclk_div_r1 <= ~clk_div_r1;endelse if(cnt1 == div_coe - 1)beginclk_div_r1 <= ~clk_div_r1;end endendmodule需要注意的是:上述奇偶分頻實現(xiàn)的時鐘一般只用于應(yīng)付面試。
總結(jié)
以上是生活随笔為你收集整理的分频电路的verilog实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读懂SAP Leonardo物联网平台
- 下一篇: 最新kali之medusa