設(shè)計(jì)原理:
在以后的設(shè)計(jì)中,用的開(kāi)發(fā)板都將是我們至芯科技自主設(shè)計(jì)的開(kāi)發(fā)板,我們的芯片用的是Cyclone4系列的EP4CE10F17C8,在以后的設(shè)計(jì)中我們將不再討論我們的開(kāi)發(fā)板
今天的設(shè)計(jì)是流水燈,在單片機(jī)中我們也了解到流水燈的點(diǎn)亮,不就是高電平或者低電平亮或者滅,然后通過(guò)依次的點(diǎn)亮LED燈,就形成了流水
我們用的開(kāi)發(fā)板的電路圖如下

在點(diǎn)圖中我們可以了解到我們的點(diǎn)亮電路,幾個(gè)燈都是公用的是高電平也就是3.3V,所以只要給一個(gè)低電平就可以點(diǎn)亮我們的流水燈
我們的開(kāi)發(fā)板提供的晶振是50M的,50M一個(gè)周期是20ns,我們?nèi)搜勰軌蚍直娴牡乃俣仁?5ms左右,也就是物體如果45ms移動(dòng)一次我們看清它是停一下走一下的,如果快于這個(gè)時(shí)間的話,那么我們看到的物體的移動(dòng)就是連貫的。我們要設(shè)計(jì)出人眼可以分辨的流水就需要我們?cè)O(shè)計(jì)出大于這個(gè)時(shí)間燈亮滅,然后形成人眼可以分辨的流水。
本次我們的設(shè)計(jì)流水燈的流水時(shí)間是1s,那么我們就需要一個(gè)時(shí)間寄存器,當(dāng)計(jì)數(shù)到1s的時(shí)候我們點(diǎn)亮一個(gè)燈,等下一個(gè)1s來(lái)的時(shí)候,我們點(diǎn)亮下一個(gè)等,然后形成流水,50M是20ns,1s是1hz,那么我們需要計(jì)數(shù)50 000 000
值得提的是我們算計(jì)數(shù)的時(shí)間是一面的等式 :計(jì)數(shù) = 晶振 / 需要的頻率 ,計(jì)數(shù)的時(shí)間就是我們1hz的周期,那么計(jì)數(shù)到一半的時(shí)候就是半個(gè)周期,我們可以在計(jì)數(shù)一半的時(shí)候clk 翻轉(zhuǎn),那么當(dāng)技計(jì)數(shù)到的時(shí)候就是占空比50%的1hz的周期
設(shè)計(jì)架構(gòu)圖:

設(shè)計(jì)代碼:
設(shè)計(jì)模塊
0moduleled_run (clk,rst_n,led);
1
2 inputclk,rst_n;
3
4 outputreg[3:0]led;
5
6 reg[25:0]count;
7 regclk_1hz;
8
9 always@(posedgeclk)
10 if(!rst_n)
11 begin
12 clk_1hz <=1;
13 count <=0;
14 end
15 elseif(count <(50_000_000/1/2-1))//計(jì)數(shù)
16 count <=count +1'd1;
17 else
18 begin //當(dāng)計(jì)數(shù)到的時(shí)候,得到1hz的時(shí)鐘
19 count <=26'd0;
20 clk_1hz <=~clk_1hz;//~時(shí)鐘翻轉(zhuǎn)
21 end
22
23 always@(posedgeclk_1hz)
24 if(!rst_n)
25 led <=4'b0111; //復(fù)位點(diǎn)亮第四個(gè)燈,熄滅1 2 3 燈
26 else
27 led <={led[0],led[3:1]};//當(dāng)時(shí)鐘上升沿來(lái)的時(shí)候把led的第一位 放在
28 //第四位,2 -- 4位放在 3 -- 1位,依次的移位,也就是把復(fù)位中的低電平 不停的
29 //移動(dòng)在4 --1 位之中的某一位,從而實(shí)現(xiàn)流水
30endmodule
測(cè)試模塊
0`timescale1ns/1ps
1
2moduletb();
3
4 regclk,rst_n;//定義模塊的端口
5 wire[3:0]led;
6
7 initialbegin
8
9 clk =1;
10 rst_n =0;
11
12 #200.1rst_n =1;
13
14 #20000$stop;//延遲20000 Ns后 停止計(jì)數(shù)
15
16 end
17
18 always#10clk =~clk;//產(chǎn)生一個(gè)50M的時(shí)鐘
19
20 led_run dut( //例化設(shè)計(jì)模塊
21 .clk(clk),
22 .rst_n(rst_n),
23 .led(led)
24 );
25
26endmodule
仿真圖:
在仿真中我們可以調(diào)下我們?cè)O(shè)計(jì)模塊的中的計(jì)數(shù)值,這樣在仿真中我們可以我們可以快速的等到仿真結(jié)果,要不然你仿真幾個(gè)小時(shí)可能才會(huì)出結(jié)果

在仿真中我們可以可以看到在我們的1hz時(shí)鐘的上升沿,我們led的4位中的一位將有一位變化為0,從而實(shí)現(xiàn)流水
大家可以下板測(cè)試
-
FPGA
+關(guān)注
關(guān)注
1650文章
22217瀏覽量
627906 -
流水燈
+關(guān)注
關(guān)注
21文章
433瀏覽量
61101
發(fā)布評(píng)論請(qǐng)先 登錄
基于FPGA的音樂(lè)流水燈控制系統(tǒng)設(shè)計(jì)
基于Verilog FPGA 流水燈設(shè)計(jì)_流水燈源碼_明德?lián)P資料
如何上手FPGA實(shí)現(xiàn)簡(jiǎn)單的流水燈效果
FPGA零基礎(chǔ)學(xué)習(xí):LED流水燈設(shè)計(jì)
流水燈2
數(shù)字設(shè)計(jì)FPGA應(yīng)用:流水燈的設(shè)計(jì)
使用FPGA實(shí)現(xiàn)流水燈的詳細(xì)資料說(shuō)明
使用FPGA實(shí)現(xiàn)流水燈設(shè)計(jì)的資料合集
詳解基于FPGA的數(shù)字電路對(duì)流水燈的實(shí)驗(yàn)
如何通過(guò)FPGA實(shí)現(xiàn)一個(gè)流水燈?
51單片機(jī)學(xué)習(xí)筆記———8.點(diǎn)亮流水燈的一種奇葩算法
【STM32學(xué)習(xí)】(3)流水燈的實(shí)現(xiàn)
FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-LED流水燈實(shí)驗(yàn)
基于FPGA開(kāi)發(fā)板流水燈的設(shè)計(jì)實(shí)現(xiàn)

FPGA學(xué)習(xí)系列:8. 流水燈的設(shè)計(jì)
評(píng)論