和單片機一樣,FPGA開發(fā)板上也都會配有晶振用來生成板載時鐘。前一篇我們提到了小腳丫的固定板載時鐘頻率為12MHz,這個頻率實際上就是作為我們的時間參考基準。正如歌里唱的那樣:
嘀嗒嘀嗒嘀嗒嘀嗒
時針它不停在轉(zhuǎn)動
因此,小腳丫只要在通電之后,它的內(nèi)部時鐘就會每隔83.8ns滴答一次。這個時間真的很快,連光速還沒來得及跑出小區(qū)大門就被掐斷了。那么問題來了:如果在某些應(yīng)用場合中,我們不需要這么快的嘀嗒該怎么辦?比如,我們想讓小腳丫上的LED燈以可觀察的頻率閃爍,如1Hz,也就是1秒閃一下。
相信大家和我的想法一樣,就一個字:等。既然一秒鐘可以嘀嗒一千兩百萬次,那我們每次點亮LED之前就先等你跳一千兩百萬次好了,畢竟也不耗油。換句話說,就是把內(nèi)部時鐘頻率放慢12,000,000倍。這個操作就叫做時鐘分頻,也就是我們今天要掌握的內(nèi)容。
先說偶數(shù)分頻,也就是說將內(nèi)部時鐘放慢的除數(shù)為偶數(shù)。在這里,我們只考慮占空比為50%的波形(高電平和低電平對半分)。圖1中,我們設(shè)定內(nèi)部時鐘為我們的輸入頻率,也就是12MHz,那么如果想獲得一個6MHz的輸出頻率,只需要等第二次上沿信號即可,因此分頻除數(shù)為2。
圖1
如果想得到更低的輸出頻率,比如1MHz,則除數(shù)調(diào)整12;如果1KHz,除數(shù)調(diào)成12000,依次類推。注意,這種方法只對除數(shù)為偶數(shù)的情況下才管用!以下是生成1Hz輸出的代碼,于是我們將除數(shù)調(diào)成了12,000,000。
moduleclkdivider(clock_in,clock_out);
inputclock_in;
outputregclock_out;
reg[23:0]counter=24'd0;
parameter DIVISOR = 24'd12000000;
always@(posedgeclock_in)
begin
counter<=?counter?+?24'd1;
if(counter>=(DIVISOR-1))
counter<=?24'
clock_out<=?(counter
2 )?1'b1:1'b0;//條件賦值end
endmodule
在代碼中我們注意到了這一行代碼:
reg[23:0] counter=24’0
這個實際上就是用于存儲小腳丫固定時鐘頻率的一個數(shù)據(jù)格式,至于為什么是24位寬直接參考圖2就可以。打開你們電腦里的計算器,調(diào)成碼農(nóng)模式即可。
圖2
再說奇數(shù)分頻。比如說我們想獲得一個4MHz的頻率,按道理說我們把分頻除數(shù)調(diào)成3即可。而實際上奇數(shù)分頻的故事還是稍微多一點。我們看一下圖3就明白了。
圖3
不難發(fā)現(xiàn),當除數(shù)為奇數(shù)時,此刻對應(yīng)的時間為內(nèi)部時鐘的下沿,如果僅靠上沿觸發(fā)的話,此時輸出是不會改變的。所以奇數(shù)分頻需要經(jīng)歷上沿觸發(fā)和下沿觸發(fā)才能完成。還好,在Verilog里,我們先不用研究邊沿觸發(fā)的構(gòu)造原理,只需要通過行為級描述即可直接完成指令:
always@(posedgeclk)//上沿觸發(fā)
always @(negedge clk) //下沿觸發(fā)
現(xiàn)在我們來看一個分頻倍數(shù)為3的例子。圖3中,不論輸出信號是高電平還是低電平,都只涵蓋了兩個邊沿信號,也就是說,不論是上沿還是下沿時鐘,我們只需要分別等待2次觸發(fā)后進行賦值即可。
moduleclk_div3(clk,clk_out);
inputclk;
outputclk_out;
0]pos_count,neg_count; :
wire [1:0] r_nxt;
always@(posedgeclk)//處理上沿時鐘觸發(fā)部分
=2)//等待輸入時鐘上沿觸發(fā)2次 =
0; =
else
pos_count <= pos_count +1;
always@(negedgeclk)//處理下沿時鐘觸發(fā)部分
=2) //等待輸入時鐘下沿觸發(fā)2次 =
0; =
else
neg_count+1; =
((pos_count==2)|(neg_count==2));//每等待2次觸發(fā)后進行賦值 =
endmodule
了解了3倍分頻之后,如何實現(xiàn)通用的奇數(shù)分頻自然也就不在話下了,這一部分就交給愿意動手嘗試的朋友們?nèi)プ孕芯毩暳恕?/span>
最后,我們的任務(wù)是,讓小腳丫上的L1-L4這四個燈以2Hz的頻率閃爍,另外四個燈L5-L8分別以1Hz的頻率閃爍,看看能否實現(xiàn)呢?
責任編輯:xj
原文標題:基于FPGA的數(shù)字電路實驗6:時序邏輯電路之時鐘分頻
文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605531 -
電路
+關(guān)注
關(guān)注
172文章
5962瀏覽量
172812 -
數(shù)字
+關(guān)注
關(guān)注
1文章
1693瀏覽量
51381
原文標題:基于FPGA的數(shù)字電路實驗6:時序邏輯電路之時鐘分頻
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論