資源描述:
《基于Verilog的分頻器設(shè)計.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、分頻器是指使輸出信號頻率為輸入信號頻率整數(shù)分之一的電子電路。在許多電子設(shè)備中如電子鐘、頻率合成器等,需要各種不同頻率的信號協(xié)同工作,常用的方法是以穩(wěn)定度高的晶體振蕩器為主振源,通過變換得到所需要的各種頻率成分,分頻器是一種主要變換手段。早期的分頻器多為正弦分頻器,隨著數(shù)字集成電路的發(fā)展,脈沖分頻器(又稱數(shù)字分頻器)逐漸取代了正弦分頻器。下面以VerilogHDL?語言為基礎(chǔ)介紹占空比為50%的分頻器。1?偶分頻偶分頻比較簡單,假設(shè)為N分頻,只需計數(shù)到N/2-1,然后時鐘翻轉(zhuǎn)、計數(shù)清零,如此循環(huán)就可以得到N(偶)分頻。代碼如下。modulefp_even(
2、clk_out,clk_in,rst);outputclk_out;inputclk_in;inputrst;reg[1:0]cnt;regclk_out;parameterN=6;?always@(posedgeclk_inornegedgerst)beginif(!rst)???????begin??????????????cnt<=0;??????????????clk_out<=0;???????endelsebegin????????if(cnt==N/2-1)??????????????beginclk_out<=!clk_out;cnt<=
3、0;end????????else??????????????cnt<=cnt+1;????????endendendmodule可以通過改變參量N的值和計數(shù)變量cnt的位寬實現(xiàn)任意偶分頻。偶分頻(N=6)的RTL原理圖:偶分頻(N=6)的行為仿真結(jié)果:?2?奇分頻?實現(xiàn)奇數(shù)(N)分頻,分別用上升沿計數(shù)到(N-1)/2,再計數(shù)到N-1;用下降沿計數(shù)到(N-1)/2,再計數(shù)到N-1,得到兩個波形,然后把它們相或即可得到N分頻。代碼如下:modulefp_odd(clk_out,clk_p,clk_n,clk_in,rst);outputclk_out;ou
4、tputclk_p,clk_n;inputclk_in,rst;?reg[2:0]cnt_p,cnt_n;regclk_p,clk_n;parameterN=5;?always@(posedgeclk_inornegedgerst)begin???????if(!rst)?????cnt_p<=0;???????else??if(cnt_p==N-1)????cnt_p<=0;????????????????elsecnt_p<=cnt_p+1;end?always@(posedgeclk_inornegedgerst)begin????if(!rst)
5、clk_p<=0;????elseif(cnt_p==(N-1)/2)???????????????clk_p<=!clk_p;???????elseif(cnt_p==N-1)???????????????clk_p<=!clk_p;end?always@(negedgeclk_inornegedgerst)begin???????if(!rst)?????cnt_n<=0;???????else??if(cnt_n==N-1)????cnt_n<=0;????????????????elsecnt_n<=cnt_n+1;end?always@(neg
6、edgeclk_inornegedgerst)begin????if(!rst)clk_n<=0;????elseif(cnt_n==(N-1)/2)???????????????clk_n<=!clk_n;???????elseif(cnt_n==N-1)???????????????clk_n<=!clk_n;end?assignclk_out=clk_p
7、clk_n;endmodule?RTLSchematic:??SimulateBehavioralModel:同理,可以通過改變參量N的值和計數(shù)變量cnt_p和cnt_n的位寬實現(xiàn)任意奇分頻。?3
8、?任意占空比的任意分頻在verilog程序設(shè)計中,我們往往要對一個頻率進行任意分頻,而且占空比也有一定的要求這樣的話,對于程序有一定的要求,現(xiàn)在在前面兩個實驗的基礎(chǔ)上做一個簡單的總結(jié),實現(xiàn)對一個頻率的任意占空比的任意分頻。比如:?FPGA系統(tǒng)時鐘是50MHz,而我們要產(chǎn)生的頻率是880Hz,那么,我們需要對系統(tǒng)時鐘進行分頻。很容易想到用計數(shù)的方式來分頻:50000000/880=56818。顯然這個數(shù)字不是2的整冪次方,那么我們可以設(shè)定一個參數(shù),讓它到56818的時候重新計數(shù)就可以實現(xiàn)了。程序如下:modulediv(clk,clk_div);input
9、clk;outputclk_div;reg[15:0]counter;alway