0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解基于FPGA的數(shù)字電路對流水燈的實驗

電子森林 ? 來源:嗶哩嗶哩 ? 作者:硬禾學(xué)堂 ? 2021-03-19 16:36 ? 次閱讀

繼年前介紹的時序邏輯電路之時鐘分頻后,今天我們來介紹第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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    數(shù)字電路是對什么信號進(jìn)行傳輸?shù)?/a>

    數(shù)字電路是一種電子系統(tǒng),它使用數(shù)字信號進(jìn)行信息傳輸和處理。數(shù)字信號是由離散的電壓水平或電流水平表示的信號,通常用二進(jìn)制代碼表示。與模擬電路
    的頭像 發(fā)表于 08-11 11:00 ?613次閱讀

    FPGA 實驗一:流水燈模塊

    實驗一:流水燈模塊 對于發(fā)展商而言,動土儀式無疑是最重要的任務(wù)。為此,流水燈實驗作為低級建模II的動土儀式再適合不過了。廢話少說,我們還是開始實驗
    發(fā)表于 06-10 09:38

    【紫光同創(chuàng)盤古PGX-Nano教程】——(盤古PGX-Nano開發(fā)板/PG2L50H_MBG324第三章)鍵控流水燈實驗例程

    燈、按鍵、撥碼開關(guān)等。 二:實驗目的 由PB0(即開發(fā)板S0位置)按鍵輸入,切換LED0~LED7的輸出效果。 三:實驗原理 實現(xiàn)框架如下: (1)頂層實現(xiàn)按鍵切換LED的流水燈狀態(tài)
    發(fā)表于 04-29 16:06

    數(shù)字電路和模擬電路的區(qū)別與聯(lián)系

    數(shù)字電路和模擬電路是電子電路的兩個主要分支,它們在電子技術(shù)中具有不同的應(yīng)用和工作原理。本文將詳細(xì)討論數(shù)字電路和模擬電路的區(qū)別與聯(lián)系。 首先,
    的頭像 發(fā)表于 04-21 10:29 ?2631次閱讀

    數(shù)字電路仿真元件符號是什么

    數(shù)字電路仿真元件通常用符號來表示。這些符號是通過簡潔和易于理解的圖形來表示元件的特性和功能。符號是數(shù)字電路設(shè)計和仿真過程中非常重要的一部分,幫助工程師和設(shè)計者有效地溝通和理解電路的功能。在本文
    的頭像 發(fā)表于 04-21 09:20 ?1754次閱讀

    51單片機(jī)流水燈制作

    ?流水燈是學(xué)習(xí)51單片機(jī)的一個基本項目,是我們對單片機(jī)IO口輸出認(rèn)識的基本項目。當(dāng)然學(xué)會了花樣流水燈也很好玩。 下面就分享一種51單片機(jī)流水燈制作的方法。 一、流水燈原理圖 二、相關(guān)知
    的頭像 發(fā)表于 02-26 10:06 ?1451次閱讀
    51單片機(jī)<b class='flag-5'>流水燈</b>制作

    【紫光同創(chuàng)國產(chǎn)FPGA教程】——(PGL22G第二章)鍵控流水燈實驗例程

    ~ USER_LED8 的輸出效果。 三:實驗原理 實現(xiàn)框架如下: (1)頂層實現(xiàn)按鍵切換 LED 的流水燈狀態(tài); (2)需要設(shè)計一個輸入控制模塊及一個輸出控制模塊; 這個實驗帶大家將多個模塊整合
    發(fā)表于 01-05 11:22

    PLC控制8盞流水燈電路原理圖和實際接線圖詳解

    PLC控制8盞流水燈電路原理圖和實際接線圖
    的頭像 發(fā)表于 12-27 11:47 ?5909次閱讀
    PLC控制8盞<b class='flag-5'>流水燈</b><b class='flag-5'>電路</b>原理圖和實際接線圖<b class='flag-5'>詳解</b>

    【每周一練】盤古1K開發(fā)板 練習(xí)一:LED流水燈實驗

    查看附件中的快速使用手冊。 LED流水燈實驗 本次實驗實現(xiàn)LED流水燈,使用的到的硬件為LED燈,在【每周一練】小眼睛FPGA1K開發(fā)板硬件
    發(fā)表于 12-21 00:20

    【每周一練】盤古1K開發(fā)板 練習(xí)一:LED流水燈實驗學(xué)習(xí)

    實驗目的 熟悉PDS開發(fā)流程,掌握流水燈原理并實現(xiàn)流水燈 實驗要求 設(shè)計8個LED以0.5s間隔接替點亮 實現(xiàn)代碼 `define UD #1 module led_ligh
    發(fā)表于 12-09 14:20

    利用SCR步進(jìn)指令實現(xiàn)流水燈循環(huán)點亮

    在以往介紹西門子smart文章中,提到過流水燈的寫法,有用循環(huán)位移字[ROL(R)_B]節(jié)來實現(xiàn),有利用定時器(TON)來實現(xiàn)。今天我們利用SCR步進(jìn)指令來實現(xiàn)流水燈循環(huán)點亮,在作這個實驗前提必須滿足如下幾個軟硬件條件:
    的頭像 發(fā)表于 12-04 09:15 ?2026次閱讀
    利用SCR步進(jìn)指令實現(xiàn)<b class='flag-5'>流水燈</b>循環(huán)點亮

    使用74HC595驅(qū)動LED流水燈實驗

    本次實驗的simulink模型如圖5.2所示,實驗現(xiàn)象可以通過改變控制PC6引腳的“constant2”變量實現(xiàn)LED流水燈效果,如圖5.1所示,本次實驗
    的頭像 發(fā)表于 11-29 16:20 ?1774次閱讀
    使用74HC595驅(qū)動LED<b class='flag-5'>流水燈</b><b class='flag-5'>實驗</b>

    【每周一練】盤古1K開發(fā)板 練習(xí)一:LED流水燈實驗

    實驗目的: 熟悉PDS開發(fā)流程,掌握流水燈原理并實現(xiàn)流水燈 實驗要求: 設(shè)計8個LED以0.5s間隔接替點亮
    發(fā)表于 11-21 11:32

    FPGA/CPLD數(shù)字電路設(shè)計經(jīng)驗分享

    電子發(fā)燒友網(wǎng)站提供《FPGA/CPLD數(shù)字電路設(shè)計經(jīng)驗分享.pdf》資料免費下載
    發(fā)表于 11-21 11:03 ?3次下載
    <b class='flag-5'>FPGA</b>/CPLD<b class='flag-5'>數(shù)字電路</b>設(shè)計經(jīng)驗分享

    分享花樣流水燈源程序

    電子發(fā)燒友網(wǎng)站提供《分享花樣流水燈源程序.doc》資料免費下載
    發(fā)表于 11-18 09:59 ?3次下載
    分享花樣<b class='flag-5'>流水燈</b>源程序