因為偶數(shù)分頻器過于簡單,所以我們從奇數(shù)分頻器開始說起8
01 奇數(shù)分頻器
假設(shè)我們要實現(xiàn)一個2N+1分頻的分頻器,就需要高電平占N+0.5個周期,低電平占N+0.5個周期,這樣進行處理的最小時間段就變成了0.5個周期,就不能通過clk的計數(shù)直接實現(xiàn)了。
然而,時鐘信號的上升沿和下降沿之間正好相差0.5個周期,利用這個就可以實現(xiàn)奇數(shù)分頻啦
第一步:分別使用原時鐘上升沿和下降沿產(chǎn)生兩個計數(shù)器(基于上升沿計數(shù)的cnt1和基于下降沿計數(shù)的cnt2),計數(shù)器在計數(shù)到2N時,計數(shù)器歸零重新從零開始計數(shù),依次循環(huán)
第二步:cnt1計數(shù)到0和N時,clk1翻轉(zhuǎn),從而得到占空比為N:2N+1的clk1;
第三步:cnt2計數(shù)到0和N時,clk2翻轉(zhuǎn),從而得到占空比為N:2N+1的clk2;
第四步:clk1和clk2時鐘進行或操作后,即可得到輸出時鐘clk_out;
下面為3分頻的實現(xiàn)
module DIVCLK(
input wire clk,
input wire rst_n,
output wire clk_out
);
reg clk1;
reg clk2;
reg [1:0] cnt1;
reg [1:0] cnt2;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt1 <= 2'd0;
clk1 <= 1'b0;
end
else if (cnt1==2'd2) begin
cnt1 <= 2'd0;
end
else if ((cnt1==2'd0)||(cnt1==2'd1))begin
clk1 <= ~clk1;
cnt1=cnt1+2'd1;
end
else
cnt1=cnt1+2'd1;
end
always @(negedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt2 <= 2'd0;
clk2 <= 1'b0;
end
else if (cnt2==2'd2) begin
cnt2 <= 2'd0;
end
else if ((cnt2==2'd0)||(cnt2==2'd1))begin
clk2 <= ~clk2;
cnt2=cnt2+2'd1;
end
else
cnt2=cnt2+2'd1;
end
assign clk_out=clk1|clk2;
endmodule
02 任意小數(shù)分頻
在實際設(shè)計中,可能會需要小數(shù)分頻的辦法的到時鐘,如在38.88M的SDH同步系統(tǒng)中,對應STM-1的開銷的提取,需要2.048M的時鐘,無法通過整數(shù)分頻得到,只能用小數(shù)分頻。
小數(shù)分頻原理如下:設(shè)輸入時鐘頻率f0,輸出頻率為fx,則
即m為整數(shù)部分,n為小數(shù)部分。為了實現(xiàn)K分頻,可以對f0進行a次m分頻和b次m+1分頻,則有
整理后得
由38.88M得到2.048M的時鐘,帶入上式可得到m=18,a=1,b=63,即對38.88M進行1次18分頻和63次19分頻后間插就得到2.048MHz啦
原文標題:關(guān)于分頻器~
文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
分頻器
+關(guān)注
關(guān)注
43文章
447瀏覽量
49876
原文標題:關(guān)于分頻器~
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論