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