設(shè)計(jì)原理:
在以后的設(shè)計(jì)中,用的開發(fā)板都將是我們至芯科技自主設(shè)計(jì)的開發(fā)板,我們的芯片用的是Cyclone4系列的EP4CE10F17C8,在以后的設(shè)計(jì)中我們將不再討論我們的開發(fā)板
今天的設(shè)計(jì)是流水燈,在單片機(jī)中我們也了解到流水燈的點(diǎn)亮,不就是高電平或者低電平亮或者滅,然后通過(guò)依次的點(diǎn)亮LED燈,就形成了流水
我們用的開發(fā)板的電路圖如下
在點(diǎn)圖中我們可以了解到我們的點(diǎn)亮電路,幾個(gè)燈都是公用的是高電平也就是3.3V,所以只要給一個(gè)低電平就可以點(diǎn)亮我們的流水燈
我們的開發(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)注
1620文章
21510瀏覽量
598937 -
流水燈
+關(guān)注
關(guān)注
21文章
432瀏覽量
59470
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論