所謂“分頻”,就是把輸入信號的頻率變成成倍數地低于輸入頻率的輸出信號。數字電路中的分頻器主要是分為兩種:整數分頻和小數分頻。其中整數分頻又分為偶分頻和奇分頻,首先從偶分頻開始吧,入門先從簡單的開始!
一、2^n的偶分頻器設計
先來看最簡單的最常見的一個例子——2分頻。
假設輸入時鐘clk是100MHz(T=10ns),要求得到一個50MHz的輸出時鐘clk_out,二分頻波形應該如下圖所示:
該波形的實際電路只需要一個D觸發器便可以完成,將Q非的輸出接到D端輸入,便可以實現二分頻電路,如下圖所示。
由此可以得出,所有2^n次方的偶分頻(即二分頻、四分頻、八分頻等等)都可以用觸發器級聯的方式得到,例如兩個觸發器級聯就是四分頻,三個觸發器級聯就是八分頻,如此類推。
這種級聯觸發器的方式優缺點分析:
優點 :
1、能得到占空比為50%的波形;
2、所使用的的資源也比較少。
缺點 : 唯一比較大的缺點就是觸發器之間有一定的延時。 因為驅動clk_out的觸發器是由clk作為時鐘的,那么這個觸發器的Q端變化相比于clk有一個必不可少的clk-to-q延時,例如下圖的q3與q1之間的差距就是clk-to-q延時造成的。
這個clk-to-q延時根據不同的工藝,數值會不同。這個clk-to-q的延時在做時鐘樹綜合的時候是要考慮進去的。特別是如果你還期望clk和clk_out是同步的時鐘,時鐘邊沿要對齊的話,在做clock tree的時候要給clk的tree加一些buffer來彌補這個clk-to-q。 而如果你是用了好幾個分頻器級聯產生更低頻率,那么每一級的分頻器都會貢獻一個clk-to-q延時,那么你需要平衡時鐘的時候就需要插入更多的buffer,這部分buffer又占面積,又耗功耗,甚至可能導致時鐘無法平衡。 所以這是需要大家在設計的時候考慮進去的。
二、任意偶數的分頻器設計
除了上面那種做法之外,對于任意偶數分頻的設計還有一種傳統的做法就是通過計數器的形式完成設計。例如要設計一個四分頻,波形如圖所示。cnt計數了DIV_NUM/2-1次之后取反,便可以得到任意偶數分頻的波形, 任意偶數分頻通用代碼如下所示 。
`timescale 1ns/1ps
module CLK_DIV #(parameter DIV_NUM=4)(
input clk,
input rst_n,
output reg clk_out
);
reg[3:0] cnt;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
cnt <= 4'b0;
else begin
if(cnt == (DIV_NUM/2)-1)
cnt <= 4'b0;
else
cnt <= cnt + 1'b1;
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
clk_out <= 1'b0;
else begin
if(cnt == (DIV_NUM/2)-1)
clk_out <= ~clk_out;
end
end
-
驅動器
+關注
關注
52文章
8227瀏覽量
146259 -
分頻器
+關注
關注
43文章
447瀏覽量
49879 -
計數器
+關注
關注
32文章
2256瀏覽量
94479 -
D觸發器
+關注
關注
3文章
164瀏覽量
47904 -
CLK
+關注
關注
0文章
127瀏覽量
17158
發布評論請先 登錄
相關推薦
評論