繼年前介紹的時序邏輯電路之時鐘分頻后,今天我們來介紹第7講:流水燈。
流水燈,有時候也叫跑馬燈,是一個簡單、有趣又經(jīng)典的實驗,基本所有單片機(jī)的玩家們在初期學(xué)習(xí)的階段都做過。本次我們也來介紹一下如何通過小腳丫FPGA實現(xiàn)一個流水燈。
流水燈就是讓一連串的燈在一定時間內(nèi)先后點亮并循環(huán)往復(fù),所以其中的關(guān)鍵要領(lǐng)就在于控制每兩個相鄰LED亮滅的時間差,以及所有LED燈完成一組亮滅動作后的循環(huán)。很久都沒有用過小腳丫的朋友可以再回顧一下,這上面有8個LED燈,且低電平點亮。
實現(xiàn)流水燈的方法絕不止一種,在這里我們采用模塊化的設(shè)計思路,因為模塊化設(shè)計對于之后構(gòu)建大型電路系統(tǒng)非常有幫助,并且我們還可以借機(jī)溫習(xí)一下以前學(xué)過的內(nèi)容。
現(xiàn)在我們的目標(biāo)是每過1秒后點亮下一個LED燈并且熄滅當(dāng)前燈,且在第8個燈熄滅之后循環(huán)整個流程,該如何設(shè)計整個模塊?我們先上圖后解釋。
毫無疑問,第一步需要做的就是通過分頻來生成一個周期為1秒的時鐘信號,不了解時鐘分頻童鞋可以讀一下本系列的第6篇內(nèi)容。
有了一個1秒鐘嘀嗒一次的時鐘后,我們還要考慮到循環(huán)問題,因為在第8個LED燈熄滅之后還需要再返回到第1個。那么這個時候我們就需要一個計數(shù)器,它的作用就是數(shù)羊,一只,兩只…。..數(shù)到第八只后重頭再來。數(shù)8只羊需要一個3位寬的變量(23=8)。
最后,由于我們是要依次點亮,也就是說8位的輸出中每次只有1位是低電平,其余均為高電平(小腳丫LED燈為低電平點亮)。這個特性正好對應(yīng)了我們之前學(xué)過的3-8譯碼器。
現(xiàn)在我們再來捋一遍。首先,通過分頻在小腳丫上生成一個周期為1秒的慢速時鐘信號,這個時鐘信號傳送到計數(shù)器之中;這個計數(shù)器是3位寬的,因此最多可以計八次慢速時鐘的嘀嗒,并且計數(shù)每增加1時,都對應(yīng)著3-8譯碼器的下一種輸出,也就對應(yīng)著流水燈的下一個狀態(tài)。
現(xiàn)在我們上代碼:
module runningled (clk,led); input clk,rst; output[7:0] led; reg [2:0] cnt ; //定義了一個3位的計數(shù)器,輸出可以作為3-8譯碼器的輸入 wire clk1hz; //定義一個中間變量,表示分頻得到的時鐘,用作計數(shù)器的觸發(fā) //例化分頻模塊,產(chǎn)生一個1Hz時鐘信號 divide #(.WIDTH(24),.N(12000000)) u2 ( //除數(shù)為12,000,000,因此頻率為1Hz .clk(clk), .rst_n(rst), .clkout(clk1hz) ); //生成計數(shù)器,上沿觸發(fā)并循環(huán)計數(shù) always@(posedge clk1hz) cnt 《=《 span=“”》 cnt +1; // 達(dá)到位寬上限后可自動溢出清零 //例化3-8譯碼器模塊 decode38 u1 ( .X(cnt), //例化的輸入端口連接到cnt,輸出端口連接到led .D(led) );endmodule
在第四篇講譯碼器的文章里,我們介紹過,如果需要調(diào)用/例化子模塊時,需要將各子模塊與大模塊放入同一個工程文件下進(jìn)行編譯。最后我們再來對小腳丫進(jìn)行管腳配置并燒錄就可以了。
對應(yīng)變量小腳丫管腳FPGA管腳
clkClockJ5
led [0]LED1N15
led [1]LED2N14
led [2]LED3M14
led [3]LED4M12
led [4]LED5L12
led [5]LED6K12
led [6]LED7L11
led [7]LED8K11
如果大家成功地在小腳丫上實現(xiàn)了流水燈的程序,還可以自己玩一個有意思的實驗:比如,你可以通過修改程序來提高流水燈的刷新頻率,然后看看LED燈的刷新率為多少時你的肉眼無法分別。同時再打開手機(jī)的攝像頭,也以同樣的方法試驗一番。結(jié)合到你觀察的現(xiàn)象,可以自己琢磨并思考一下,說不定能挖掘出更多的知識。
備注一些大伙都知道的常識:我國交流電工頻為50Hz,電腦常用顯示器的刷新率有60,75和144赫茲。華為Mate30刷新頻率為90赫茲,蘋果6-12的刷新頻率為60赫茲。
編輯:lyn
-
FPGA
+關(guān)注
關(guān)注
1625文章
21627瀏覽量
601250 -
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44491瀏覽量
632012 -
代碼
+關(guān)注
關(guān)注
30文章
4723瀏覽量
68237
原文標(biāo)題:基于FPGA的數(shù)字電路實驗7:流水燈的實現(xiàn)
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論