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

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

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

基于FPGA的流水燈設(shè)計(jì)

CHANBAEK ? 來源:小小研究生 ? 作者:xxyjs2020 ? 2023-06-23 16:54 ? 次閱讀

設(shè)計(jì)規(guī)劃

依次點(diǎn)亮4個(gè)LED燈,實(shí)現(xiàn)流水燈的效果,兩燈之間點(diǎn)亮間隔為0.5s,LED燈一次點(diǎn)亮持續(xù)時(shí)間0.5s。

LED燈低電平點(diǎn)亮,因此流水燈應(yīng)該是1110-1101-1011-0111-1110-1101-...

圖片

首先是時(shí)鐘信號(hào)、復(fù)位信號(hào),由于需要計(jì)時(shí),我們還要產(chǎn)生一個(gè)計(jì)數(shù)器cnt。然后還需要產(chǎn)生一個(gè)cnt_flag脈沖標(biāo)志信號(hào)作為流水切換的標(biāo)志,每當(dāng)計(jì)數(shù)器計(jì)數(shù)到24_999_998時(shí)拉高并只產(chǎn)生一個(gè)時(shí)鐘的高電平(高電平出現(xiàn)LED狀態(tài)就開始切換)。最重要的是,流水燈的實(shí)現(xiàn)是通過左移操作,無法直接通過led_out的左移實(shí)現(xiàn),因此需要定義一個(gè)led_out_reg(led_out從1110左移一次是1100,會(huì)有兩個(gè)燈點(diǎn)亮,而led_out_reg是LED的位反0001,左移一次是0010,取反后led_out是1101,就能實(shí)現(xiàn)流水的需求)。

編寫代碼

module water_led
#(
parameter CNT_MAX = 25'd24_999_999
)
(
input wire sys_clk , 
input wire sys_rst_n , 
output wire [3:0] led_out 
 );


 //reg define
 reg [24:0] cnt ;
 reg cnt_flag ;
 reg [3:0] led_out_reg ;


 //cnt:計(jì)數(shù)器計(jì)數(shù)500ms
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt <= 25'b0;
 else if(cnt == CNT_MAX)
 cnt <= 25'b0;
 else
 cnt <= cnt + 1'b1;


 //cnt_flag:計(jì)數(shù)器計(jì)數(shù)滿500ms標(biāo)志信號(hào)
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_flag <= 1'b0;
 else if(cnt == CNT_MAX - 1)
 cnt_flag <= 1'b1;
 else
 cnt_flag <= 1'b0;


 //led_out_reg:led循環(huán)流水
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 led_out_reg <= 4'b0001;
 else if(led_out_reg == 4'b1000 && cnt_flag == 1'b1)
 led_out_reg <= 4'b0001;
 else if(cnt_flag == 1'b1)
 led_out_reg <= led_out_reg < < 1'b1; //左移
 assign led_out = ~led_out_reg;
 endmodule

三個(gè)中間信號(hào)的定義:cnt,cnt_flag,led_out_reg。

1、cnt:計(jì)數(shù)器變化的條件是時(shí)鐘上升和復(fù)位有效(復(fù)位下降),復(fù)位信號(hào)有效時(shí)cnt變?yōu)榈碗娖?;?jì)滿時(shí)清零;其他時(shí)刻+1。

2、cnt_flag:計(jì)數(shù)器計(jì)滿的脈沖標(biāo)志信號(hào),變化條件和cnt一樣,復(fù)位有效時(shí)變?yōu)榈碗娖?;?jì)滿前一個(gè)時(shí)鐘拉高;其他時(shí)刻都為0,這樣就能成為一個(gè)脈沖信號(hào),并在計(jì)滿前拉高,標(biāo)志led要左移。

3、led_out_reg:暫存led燈狀態(tài),可以直接對(duì)這個(gè)信號(hào)進(jìn)行操作來控制LED燈。復(fù)位和初始時(shí)是最右邊的燈亮,反推出led_out_reg=0001;當(dāng)最左邊的燈亮且計(jì)滿標(biāo)志信號(hào)拉高時(shí),令最右邊的燈亮led_out_reg=0001;當(dāng)計(jì)滿標(biāo)志信號(hào)拉高時(shí),led_out_reg左移。而控制LED電平的輸出信號(hào)led_out是led_out_reg的按位取反。

image.png

編寫testbench

`timescale 1ns/1ns
module tb_water_led();
//wire define
wire [3:0] led_out ;
 //reg define
 reg sys_clk ;
 reg sys_rst_n ;
 //初始化系統(tǒng)時(shí)鐘、全局復(fù)位
 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #20
 sys_rst_n <= 1'b1;
 end


 //sys_clk:模擬系統(tǒng)時(shí)鐘,每10ns電平翻轉(zhuǎn)一次,周期為20ns,頻率為50MHz
 always #10 sys_clk = ~sys_clk;
 //-------------------- water_led_inst --------------------
 water_led
 #(
 .CNT_MAX (25'd24)
 )
 water_led_inst
 (
 .sys_clk (sys_clk ), //input sys_clk
 .sys_rst_n (sys_rst_n ), //input sys_rst_n
 .led_out (led_out ) //output [3:0] led_out
 );
 endmodule

testbench代碼是非常熟悉的,信號(hào)定義,初始化,實(shí)例化。

對(duì)比波形

圖片

圖片

1110-1101-1011-0111分別對(duì)應(yīng)了十六進(jìn)制的e,d,b,7

由于在testbench模塊,為了節(jié)省時(shí)間將CNT_MAX設(shè)置成24,因此24個(gè)時(shí)鐘脈沖LED的狀態(tài)就會(huì)發(fā)生變化,波形和我們預(yù)想的一致。

分配管腳

圖片

圖片

圖片

圖片

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

    關(guān)注

    1624

    文章

    21573

    瀏覽量

    600653
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

    107669
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94186
  • 流水燈
    +關(guān)注

    關(guān)注

    21

    文章

    432

    瀏覽量

    59560
  • 時(shí)鐘信號(hào)
    +關(guān)注

    關(guān)注

    4

    文章

    441

    瀏覽量

    28473
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Verilog FPGA 流水燈設(shè)計(jì)

    流水廣告燈主要應(yīng)用于LED燈光控制。通過程序控制LED的亮和滅, 多個(gè)LED燈組成一個(gè)陣列,依次逐個(gè)點(diǎn)亮的時(shí)候像流水一樣,所以叫流水燈。由于其形成美觀大方的視覺效果,因此廣泛應(yīng)用于店鋪招牌、廣告、大型建筑夜間裝飾、景觀裝飾等
    發(fā)表于 08-09 15:14 ?1.7w次閱讀
    基于Verilog <b class='flag-5'>FPGA</b> <b class='flag-5'>流水燈</b>設(shè)計(jì)

    FPGA流水燈的設(shè)計(jì)流程

    完成項(xiàng)目需求分析、電路圖分析以及方案設(shè)計(jì)后,接下來可以進(jìn)行FPGA設(shè)計(jì)了。如果用戶的計(jì)算機(jī)已安裝云源軟件GOWIN FPGA Designer,雙擊桌面上的程序圖標(biāo),即可打開GOWIN FPGA
    發(fā)表于 10-13 14:36 ?1349次閱讀

    基于FPGA的音樂流水燈控制系統(tǒng)設(shè)計(jì)

    介紹一種基于 FPGA的音樂流水燈控制器, 采用硬件描述語言對(duì)其進(jìn)行描述, 分別實(shí)現(xiàn)樂曲的播放和同步流水燈的閃爍。并構(gòu)建一個(gè) SOPC系統(tǒng), 集成 LCD模塊來顯示實(shí)時(shí)音樂的音階值和頻率強(qiáng)度
    發(fā)表于 10-20 17:21 ?4446次閱讀

    #硬聲創(chuàng)作季 實(shí)驗(yàn)2 流水燈實(shí)驗(yàn)

    fpga流水燈
    Mr_haohao
    發(fā)布于 :2022年08月29日 20:05:15

    #硬聲創(chuàng)作季 FPGA技術(shù)應(yīng)用:流水燈設(shè)計(jì)

    fpga流水燈
    Mr_haohao
    發(fā)布于 :2022年10月19日 17:23:48

    #硬聲創(chuàng)作季 數(shù)字設(shè)計(jì)FPGA應(yīng)用:51.1流水燈的關(guān)鍵設(shè)計(jì)

    fpga流水燈數(shù)字設(shè)計(jì)
    Mr_haohao
    發(fā)布于 :2022年10月24日 03:10:25

    #硬聲創(chuàng)作季 數(shù)字設(shè)計(jì)FPGA應(yīng)用:51.2流水燈工程實(shí)現(xiàn)與測(cè)試

    fpga流水燈數(shù)字設(shè)計(jì)
    Mr_haohao
    發(fā)布于 :2022年10月24日 03:11:14

    FPGA流水燈實(shí)驗(yàn)

    FPGA初級(jí)實(shí)驗(yàn) verilog let's start (流水燈實(shí)驗(yàn))module countpro(sys_clk,rst_n,led); //接口定義input sys_clk,rst_n
    發(fā)表于 02-08 16:28

    求分享一個(gè)用simulink編的altera FPGA流水燈的simulink程序

    有大神能給我分享一個(gè)用simulink編的altera FPGA流水燈的simulink程序嗎?我想學(xué)通過simulink來給FPGA編程,但是苦于沒有教程或案例,求好心人給我分享一個(gè)程序吧,供我研究研究,感激不盡[qq]91
    發(fā)表于 08-05 11:06

    基于Verilog FPGA 流水燈設(shè)計(jì)_流水燈源碼_明德?lián)P資料

    LED流水廣告燈工程說明在本案例中,使用常用的verilog語言完成該程序,設(shè)計(jì)并控制8個(gè)燈的花式或循環(huán)點(diǎn)亮;即上電后,實(shí)現(xiàn)左移和右移交替的流水燈。案例補(bǔ)充說明在FPGA電路設(shè)計(jì)中,盡管流水燈
    發(fā)表于 08-02 17:56

    數(shù)字設(shè)計(jì)FPGA應(yīng)用:流水燈的設(shè)計(jì)

    LED流水燈這篇采用最簡(jiǎn)單的就是點(diǎn)亮一個(gè)燈延時(shí)一定時(shí)間,然后關(guān)閉,接下去點(diǎn)亮下一個(gè)燈,依次類推形成流水燈的效果
    的頭像 發(fā)表于 12-04 07:09 ?3550次閱讀
    數(shù)字設(shè)計(jì)<b class='flag-5'>FPGA</b>應(yīng)用:<b class='flag-5'>流水燈</b>的設(shè)計(jì)

    使用FPGA實(shí)現(xiàn)流水燈的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用FPGA實(shí)現(xiàn)流水燈的詳細(xì)資料說明。流水燈模塊對(duì)于發(fā)展商而言,動(dòng)土儀式無疑是最重要的任務(wù)。為此,流水燈實(shí)驗(yàn)作為低級(jí)建模II的動(dòng)土儀式再適合不過了。廢話少說
    發(fā)表于 07-11 16:45 ?27次下載
    使用<b class='flag-5'>FPGA</b>實(shí)現(xiàn)<b class='flag-5'>流水燈</b>的詳細(xì)資料說明

    使用FPGA實(shí)現(xiàn)流水燈設(shè)計(jì)的資料合集

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用FPGA實(shí)現(xiàn)流水燈設(shè)計(jì)的資料合集免費(fèi)下載。
    發(fā)表于 01-18 08:00 ?30次下載

    如何通過FPGA實(shí)現(xiàn)一個(gè)流水燈

    流水燈,有時(shí)候也叫跑馬燈,是一個(gè)簡(jiǎn)單、有趣又經(jīng)典的實(shí)驗(yàn),基本所有單片機(jī)的玩家們?cè)诔跗趯W(xué)習(xí)的階段都做過。本次我們也來介紹一下如何通過小腳丫FPGA實(shí)現(xiàn)一個(gè)流水燈。
    的頭像 發(fā)表于 06-06 10:42 ?8044次閱讀
    如何通過<b class='flag-5'>FPGA</b>實(shí)現(xiàn)一個(gè)<b class='flag-5'>流水燈</b>?

    基于FPGA開發(fā)板流水燈的設(shè)計(jì)實(shí)現(xiàn)

    流水燈,有時(shí)候也叫跑馬燈,是一個(gè)簡(jiǎn)單、有趣又經(jīng)典的實(shí)驗(yàn),基本所有單片機(jī)的玩家們?cè)诔跗趯W(xué)習(xí)的階段都做過。本次我們也來介紹一下如何通過小腳丫FPGA實(shí)現(xiàn)一個(gè)流水燈。
    發(fā)表于 06-20 17:10 ?1219次閱讀
    基于<b class='flag-5'>FPGA</b>開發(fā)板<b class='flag-5'>流水燈</b>的設(shè)計(jì)實(shí)現(xiàn)