FPGA学习笔记——分频电路设计
FPGA學(xué)習(xí)筆記——分頻電路設(shè)計(jì)
發(fā)布時(shí)間:2015-10-3023:29:52
??? 分頻就是用一個(gè)時(shí)鐘信號通過一定的電路結(jié)構(gòu)變成不同頻率的時(shí)鐘信號,這里介紹一下整數(shù)分頻電路的設(shè)計(jì)方法。整數(shù)分頻電路有偶數(shù)分頻和奇數(shù)分頻兩種,我們以實(shí)現(xiàn)占空比為50%的分頻電路為例子來解釋一下分頻電路設(shè)計(jì)的基本原理。假設(shè)時(shí)鐘周期為T,則二分頻后輸出的時(shí)鐘周期為2T,三分頻后輸出的時(shí)鐘周期為3T,N分頻后輸出的時(shí)鐘周期為NT,這是設(shè)計(jì)分析的基本思路。
1.偶數(shù)分頻實(shí)現(xiàn)
二分頻電路設(shè)計(jì)
二分頻電路的實(shí)現(xiàn)是最為簡單的,只需要用一個(gè)D觸發(fā)器便能實(shí)現(xiàn),因?yàn)镈觸發(fā)的輸出值每隔一個(gè)輸入時(shí)鐘周期T才更新一次值,所以我們只要每次D觸發(fā)器寄存值的時(shí)候把它的輸出值取反就可以了,這樣它的高電平持續(xù)時(shí)間為T,低電平持續(xù)時(shí)間也為T,則為二分頻。具體的代碼如下所示。
module clkdiv(clk,rst_n,clk_2);
input clk,rst_n;
output clk_2;
reg q;
?
always @(posedge clk or negedge rst_n)
if(!rst_n)
q<=1'b0;
else
q<=~q;
?
assign clk_2=q;
endmodule
這個(gè)設(shè)計(jì)非常簡單,不作過多解釋。
?
?
?
六分頻電路設(shè)計(jì)
按照設(shè)計(jì)的思路,六分頻總的時(shí)鐘周期應(yīng)該為6T,高電平持續(xù)時(shí)間為3T,低電平持續(xù)時(shí)間為3T,我們只需要用一個(gè)0-5的計(jì)數(shù)器,計(jì)數(shù)從0到5一直循環(huán),當(dāng)計(jì)數(shù)器為0,1,2時(shí),輸出高電平,計(jì)數(shù)器為3,4,5時(shí),輸出低電平。
?
具體代碼實(shí)現(xiàn)如下
module clkdiv6(clk,rst_n,clk_2);
input clk,rst_n;
output clk_2;
reg [2:0] q; //因?yàn)橛玫?-5的計(jì)數(shù)器,一共要3位D觸發(fā)器
reg clk_2;
always @(posedge clk or negedge rst_n)
? if(!rst_n)
q<=3'd0;
else if(q==3'd5)
q<=3'd0;
else
q<=q+1'b1;
?
always @(posedge clk or negedge rst_n)
if(!rst_n)
clk_2<=1'b0;
else if(q<3'd3)
clk_2<=1'b1;
else
clk_2<=1'b0;
endmodule
?
?
經(jīng)過仿真,符合六分頻的設(shè)計(jì)思路,占空比也為50%,3T的時(shí)間為高電平,3T的時(shí)間為低電平。
?
?
?
2N分頻電路設(shè)計(jì)思路
偶數(shù)分頻電路的基本實(shí)現(xiàn)思路就是利用計(jì)數(shù)器,利用0-(2N-1)的計(jì)數(shù)器,當(dāng)計(jì)數(shù)器計(jì)數(shù)在0-(N-1)的時(shí)候輸出高電平,其余時(shí)間輸出低電平就可以完成占空比50%的2N分頻電路了
?
?
?
?
?
2.奇數(shù)分頻實(shí)現(xiàn)
三分頻電路實(shí)現(xiàn)
三分頻的電路如果按照偶數(shù)分頻的思想來設(shè)計(jì)就會遇到一個(gè)難題,因?yàn)槭瞧鏀?shù),不能做到計(jì)數(shù)器計(jì)數(shù)到一半的時(shí)候輸出取反,也就是說按照偶數(shù)分頻的思路做不到占空比50%,在這里要換一個(gè)思路來設(shè)計(jì)。我們?nèi)匀环治鲆幌氯诸l電路的特點(diǎn),三分頻電路的周期為3T,高電平持續(xù)時(shí)間為1.5T,低電平持續(xù)時(shí)間也為1.5T。假設(shè)用上面的思路,用1個(gè)計(jì)數(shù)器來分頻,則也可以得到三分頻,但是占空比為66.7%,即高電平持續(xù)時(shí)間為2T,低電平持續(xù)時(shí)間為1T。以下為占空比50%的三分頻電路實(shí)現(xiàn),用2個(gè)三進(jìn)制計(jì)數(shù)器,第1個(gè)為時(shí)鐘上升沿觸發(fā),第2個(gè)為時(shí)鐘下降沿觸發(fā)。對第1個(gè)計(jì)數(shù)器而言,小于2取高電平則,0-2T為高電平,2T-3T為低電平,對第2個(gè)計(jì)數(shù)器而言,小于2取高電平,則0.5T-2.5T為高電平,2.5T-3.5T為低電平,實(shí)質(zhì)上第2個(gè)的波形延時(shí)了0.5T,他們公共的取高電平的時(shí)間為0.5T-2T,剛好是1.5T,正式三分頻占空比為50%高電平所持續(xù)的時(shí)間。下面為具體代碼實(shí)現(xiàn)。
?
module clkdiv3(clk,rst_n,clk_2);
input clk,rst_n;
output clk_2;
reg [1:0]count1;//上升沿觸發(fā)的3進(jìn)制計(jì)數(shù)器1
reg [1:0]count2;//下降沿觸發(fā)的3進(jìn)制計(jì)數(shù)器2
reg clk_p,clk_n;
always @(posedge clk or negedge rst_n)//上升沿觸發(fā)的3進(jìn)制計(jì)數(shù)器1
if(!rst_n)
count1<=2'd0;
else if(count1==2'd2)
count1<=1'b0;
else
count1<=count1+1'b1;
always?@(posedge clk or negedge rst_n)
if(!rst_n)
clk_p<=1'b0;
else if(count1<2'd2)
clk_p<=1'b1;
else
clk_p<=1'b0;
always @(negedge clk or negedge rst_n)//下降沿觸發(fā)的3進(jìn)制計(jì)數(shù)器2
if(!rst_n)
count2<=2'd0;
else if(count2==2'd2)
count2<=2'd0;
else
count2<=count2+1'b1;
always @(negedge clk or negedge rst_n)
if(!rst_n)
clk_n<=1'b0;
else if (count2<2'd2)
clk_n<=1'b1;
else
clk_n<=1'b0;
assign clk_2=clk_p&clk_n;
endmodule
?
仿真的波形圖如下
?
?
可見,實(shí)現(xiàn)了三分頻占空比為50%的功能,但是仍然有不足的地方就是相位不是和原始時(shí)鐘同相,延遲了0.5T。
?
?
?
?
五分頻電路設(shè)計(jì)
按照三分頻的分頻思路,五分頻的代碼如下
module clkdiv5(clk,rst_n,clk_2);
input clk,rst_n;
output clk_2;
reg [2:0]count1;//上升沿觸發(fā)的5進(jìn)制計(jì)數(shù)器1
reg [2:0]count2;//下降沿觸發(fā)的5進(jìn)制計(jì)數(shù)器2
reg clk_p,clk_n;
always @(posedge clk or negedge rst_n)//上升沿觸發(fā)的5進(jìn)制計(jì)數(shù)器1
if(!rst_n)
count1<=3'd0;
else if(count1==3'd4)
count1<=1'b0;
else
count1<=count1+1'b1;
always?@(posedge clk or negedge rst_n)
if(!rst_n)
clk_p<=1'b0;
else if(count1<5'd4)
clk_p<=1'b1;
else
clk_p<=1'b0;
always @(negedge clk or negedge rst_n)//下降沿觸發(fā)的5進(jìn)制計(jì)數(shù)器2
if(!rst_n)
count2<=3'd0;
else if(count2==3'd4)
count2<=3'd0;
else
count2<=count2+1'b1;
always @(negedge clk or negedge rst_n)
if(!rst_n)
clk_n<=1'b0;
else if (count2<3'd4)
clk_n<=1'b1;
else
clk_n<=1'b0;
assign clk_2=clk_p&clk_n;
endmodule
?
?
?
設(shè)計(jì)的思路和三分頻一樣,只是把計(jì)數(shù)器的進(jìn)制改動(dòng)了,并且把翻轉(zhuǎn)時(shí)的判斷邏輯改動(dòng)了。
?
?
總結(jié)
按照以上偶數(shù)分頻和奇數(shù)分頻的方法,可以設(shè)計(jì)任意的N分頻電路,以獲得占空比為50%的時(shí)鐘,不足之處是奇數(shù)分頻不能獲得與時(shí)鐘同相的波形。
總結(jié)
以上是生活随笔為你收集整理的FPGA学习笔记——分频电路设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仅展示成果:基于ROS的自动驾驶系统搭建
- 下一篇: 我对APPCAN的初步理解