www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > > FPGA開源工作室

通常我們說對原時鐘進行N分頻,即分頻后的時鐘的一個周期是原時鐘周期的N倍。N可以為偶數(shù)、奇數(shù)、半整數(shù)、分數(shù)(小數(shù))。

1.偶數(shù)分頻

Verilog:N為偶數(shù),使用一個計數(shù)器循環(huán)0-(N-1)進行計數(shù),在N/2-1與N-1分別將輸出取反,即完成了N分頻。

若果采用D觸發(fā)器畫出分頻器,單個D觸發(fā)器的反向輸出到輸入就構(gòu)成了一個簡單的2分頻器,以此為基礎(chǔ),其分頻輸出作為下一級D觸發(fā)器的時鐘,如此串聯(lián)起來,x個串聯(lián)就是2^x分頻,屬于偶數(shù)分頻,如圖1[1].

圖1 用D觸發(fā)器分頻

2.奇數(shù)分頻

Verilog:N為奇數(shù),使用一個計數(shù)器循環(huán)0-(N-1)進行計數(shù),控制(N-1)/2個高電平,(N+1)/2個低電平,稱為A;然后將此A電平信號延遲半個時鐘周期稱為B,最后輸出C = A|B,即為占空比為50%的奇數(shù)分頻器。另一種方案是(N+1)/2個高電平,(N-1)/2個低電平,那么最后輸出C=A&B。

以C = A|B為例,將A延時半個時鐘周期的方法有2種,方法1是直接使用下降沿的鎖存器對A鎖存得到B,方法2得到B的原理與A相同,不過是在下降沿檢測(假設(shè)A是上升沿檢測)。

圖2 奇數(shù)分頻波形

采用D觸發(fā)器的話,采用方法1,用一個下降沿的D觸發(fā)器鎖存A=clkp1得到信號B=clkn1,把信號A和信號B做邏輯“與”就得到了占空比50%的分頻時鐘信號clkout[1]。

圖3奇數(shù)分頻

下面給出N為正整數(shù)的分頻器設(shè)計,主要原理是N[0]=1為奇數(shù)分頻,0為偶數(shù)分頻。

module practice_demo( input clk, input arst,  output clk_div ); parameter N = 5;reg [2:0] cnt;reg clk_a;reg clk_b;wire clk_c; always@(posedge clk or posedge arst)begin if(arst) cnt <= 0; else if(cnt == N-1) cnt <= 0; else cnt <= cnt + 1; end always@(posedge clk or posedge arst)begin if(arst) clk_a<= 0; else if(cnt == (N-1)/2 || cnt == N-1) clk_a<= ~clk_a; else clk_a<= clk_a; end /*****************方法1**********************/always@(negedge clk or posedge arst)begin if(arst) clk_b <= 0; else  clk_b <= clk_a;end/******************方法2********************///always@(negedge clk or posedge arst)//begin//    if(arst)//        clk_b<= 0;//    else if(cnt == (N-1)/2 || cnt == N-1)//        clk_b<= ~clk_b;//    else//        clk_b<= clk_b; //end/*********************************************/ assign clk_c = clk_a | clk_b;//N[0]=1奇數(shù),否則偶數(shù)assign clk_div = N[0] ? clk_c : clk_a; endmodule

3 半整數(shù)分頻

說明:占空比非50%

網(wǎng)上廣為流傳的一種分頻結(jié)果是,半分頻多出來那半個周期為高電平,其余為低電平。例如N=5.5,以原時鐘的一半為單位,可以分頻輸出1高10低。原理是用計數(shù)器循環(huán)計數(shù)0-10即11個周期,控制輸出X前6周期高電平,后5周期低電平,然后再使用計數(shù)器得到一個下降沿觸發(fā)的5低6高的輸出Y,最后輸出Z = X&Y。

圖4半整數(shù)分頻的波形

給出Verilog設(shè)計:

module for_practice(input clk,input arst,output clk_div  );parameter N = 5;//5.5分頻reg[31:0]cnt1;reg clkx;reg clky;always@(posedge clk or posedge arst)begin if(arst) cnt1 <= 0; else if(cnt1 == 2*N) cnt1 <= 0; else cnt1 <= cnt1+ 1; end always@(posedge clk or posedge arst)begin if(arst) clkx <= 0; else if(cnt1 == 2*N)////// clkx <= 1; else if(cnt1 == N)/////// clkx <= 0; end always@(negedge clk or posedge arst)begin if(arst) clky <= 0; else if(cnt1 == 0)/////// clky <= 0; else if(cnt1 == N)////// clky <= 1; end assign clk_div =  clkx & clky; endmodule 

另外一種做法是想得到接近50%的占空比,例如5分頻得到3個高電平,2.5個低電平,其思路是控制clk,使得計數(shù)器值等于某一值只保持半個周期。參考[3]

4分數(shù)(小數(shù))分頻

此部分主要參考[1][2].

說明:占空比非50%

比如8.7分頻。因為沒辦法用計數(shù)器表示0.7這種數(shù)字,所以就用一個等效的概念來進行8.7分頻,原時鐘87個周期的總時間等于分頻后的時鐘10個周期的總時間;

先做3次8分頻得到時鐘周期數(shù)是24,再做7次9(8加1)分頻得到時鐘周期數(shù)63,總共就87個時鐘周期;在這87個時鐘周期里面分頻時鐘跳變20次總共10個周期。分數(shù)分頻器的原理可以用下圖來概括。

圖5分數(shù)分頻的原理

用整數(shù)部分zn(=8)作為一個分頻系數(shù),zn加1(=9)作為另外一個分頻系數(shù)組成一個小數(shù)分頻器。

根據(jù)上面的原理可以列出下面的二元一次方程組

zn*N+(zn+1)*M=87   ……(1)

N+M=10                    ……(2)

可以解出N和M的值分別是3和7。

ACC計數(shù)器設(shè)計,在這里ZN=8:

ACC計數(shù)器就是控制做N次ZN分頻和M次ZN+1次分頻,具體控制過程可以分為以下幾種情況:

第1種情況 :先做N次ZN分頻,再做M次ZN+1次分頻;

第2種情況:先做M次ZN+1次分頻,再做N次ZN分頻;

第3種情況 :把N次ZN分頻平均插入到M次ZN+1分頻中;

第4種情況 :把M次ZN+1次分頻平均插入到N次ZN分頻中。

組合N次ZN分頻和M次ZN+1次分頻的情況很多。第1、2種情況前后時鐘頻率不太均勻,因此相位抖動比較大;

第3、4種情況前后時鐘頻率均勻性稍好,因此相位抖動會減小,因此最終采用3或4。如圖6

圖6分數(shù)分頻的幾種控制過程



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉