国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

手把手教你學FPGA設計-秒表功能

發(fā)布時間:2018-9-30 11:08    發(fā)布者:luckyb1
秒表功能
一、項目背景
同上一個項目。
二、設計目標
開發(fā)板或者模塊是有 8 位數(shù)碼管,本次設計需要使用1個數(shù)碼管,即數(shù)碼管0,實現(xiàn)類似于秒表的功能,具體要求如下:
復位后,數(shù)碼管0顯示數(shù)字0并持續(xù)1秒;然后顯示數(shù)字1并持續(xù)2秒;然后顯示數(shù)字2并持續(xù)3秒;以此類推,最后是顯示數(shù)字9并持續(xù)10秒。然后再次循環(huán)
上板效果圖如下圖所示。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
上板的演示效果,請登陸網(wǎng)址查看:www.mdy-edu.com/xxxx
三、模塊設計
我們要實現(xiàn)的功能,概括起來就是控制8個數(shù)碼管,其中數(shù)碼管0亮,其他數(shù)碼管不亮。并讓數(shù)碼管0顯示不同的數(shù)字。
要控制8個數(shù)碼管,就需要控制位選信號,即FPGA要輸出一個8位的位選信號,設為seg_sel,其中seg_sel[0]對應數(shù)碼管0seg_sel[1]對應數(shù)碼管1,以此類推,seg_sel[7]對應數(shù)碼管7
要顯示不同的數(shù)字,就需要控制段選信號,不需要用到DP,一共有7根線,即FPGA要輸出一個7位的段選信號,設為seg_mentseg_ment[6]~segm_ment[0]分別對應數(shù)碼管的abcdefg(注意對應順序)。
我們還需要時鐘信號和復位信號來進行工程控制。
綜上所述,我們這個工程需要4個信號,時鐘clk,復位rst_n,輸出的位選信號seg_sel和輸出的段選信號seg_ment
  
信號線
  
信號線
FPGA管腳
內(nèi)部信號
SEG_E
SEG0
Y6
seg_ment[2]
SEG_DP
SEG1
W6
未用到
SEG_G
SEG2
Y7
seg_ment[0]
SEG_F
SEG3
W7
seg_ment[1]
SEG_D
SEG4
P3
seg_ment[3]
SEG_C
SEG5
P4
seg_ment[4]
SEG_B
SEG6
R5
seg_ment[5]
SEG_A
SEG7
T3
seg_ment[6]
DIG1
DIG_EN1
T4
seg_sel[0]
DIG2
DIG_EN2
V4
seg_sel[1]
DIG3
DIG_EN3
V3
seg_sel[2]
DIG4
DIG_EN4
Y3
seg_sel[3]
DIG5
DIG_EN5
Y8
seg_sel[4]
DIG6
DIG_EN6
W8
seg_sel[5]
DIG7
DIG_EN7
W10
seg_sel[6]
DIG8
DIG_EN8
Y10
seg_sel[7]
我們先分析要實現(xiàn)的功能,數(shù)碼管0顯示數(shù)字0,翻譯成信號就是seg_sel的值為8’b1111_1110seg_ment的值為7’b000_0001。然后數(shù)碼管0顯示數(shù)字1,也就是說seg_sel的值為8’b1111_1110seg_ment的值為7’b100_1111。以此類推,數(shù)碼管0顯示數(shù)字9,就是seg_sel的值為8’b1111_1110seg_ment的值為7’b000_0100
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image009.png
seg_sel一直為8’hfe,不變化。seg_ment隔一段時間后會變化,而這個時間在不同時期還不相同。把時間信息補充上,得到下面的波形示意圖。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png         上圖就是seg_selseg_seg信號的變化波形圖。在顯示第1個時,seg_sel=8’hfeseg_ment=7’h01并持續(xù)1秒;在第2個時,seg_sel=8’hfeseg_ment=7’h4f并持續(xù)2秒;以此類推,第8個時,seg_sel=8’hfeseg_ment=7’h04并持續(xù)10秒。然后又再次重復。
由波形圖可知,我們需要1個計數(shù)器用來計算時間,如2秒、3秒等。另外,我們還需要一個計數(shù)器,用來計算在第幾個階段中。所以總共需要2個計數(shù)器。
本工程的工作時鐘是50MHz,即周期為20ns,計數(shù)器計數(shù)到2_000_000_000/20=100_000_000個,我們就能知道2秒時間到了。以類類推,在第2次時,數(shù)到150_000_000個,就知道了3秒時間到。第9次時,數(shù)到500_000_000個,就表示10秒時間到。另外,由于該計數(shù)器是不停地計數(shù),永遠不停止的,可以認為加1條件一直有效,可寫成:assignadd_cnt0==1。綜上所述,結合變量法,該計數(shù)器的代碼如下
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always @(posedge clk or negedge  rst_n)begin
  
     if(!rst_n)begin
  
         cnt0 <= 0;
  
     end
  
     else if(add_cnt0)begin
  
         if(end_cnt0)
  
            cnt0 <= 0;
  
         else
  
            cnt0 <= cnt0 + 1;
  
     end
  
end
  
  
assign add_cnt0 = 1 ;
  
assign end_cnt0 = add_cnt0 &&  cnt0== x-1 ;
第二個計數(shù)器用于表示第幾個,很自然可以看到,每個階段完成后,該計數(shù)器加1,因此加1條件可為end_cnt0。該計數(shù)器一共要數(shù)10次。所以代碼為:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always @(posedge clk or negedge  rst_n)begin
  
     if(!rst_n)begin
  
         cnt1 <= 0;
  
     end
  
     else if(add_cnt1)begin
  
         if(end_cnt1)
  
             cnt1 <= 0;
  
         else
  
            cnt1 <= cnt1 + 1;
  
     end
  
end
  
  
assign add_cnt1 = end_cnt0;
  
assign end_cnt1 = add_cnt1 &&  cnt1== 10-1 ;
接下來設計seg_sel。該信號一直為8’hfe,所以代碼直接寫成如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png
1
assign seg_sel = 8'hfe ;
我們來思考輸出信號seg_ment的變化。概括起來,在第1次的時候輸出值為7’h01;在第2次的時候輸出值為7’h4f;以此類推,在第8次的時候輸出值為7’h0f。我們用信號cnt1來代替第幾次,也就是:當cnt1==0的時候,輸出值為7’h01;在cnt1==1的時候輸出值為7’h4f;以此類推,在cnt1==9的時候輸出值為7’h04。再進一步翻譯成代碼,就變成如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image017.png
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         seg_ment <= 7'h01;
  
     end
  
     else if(cnt1==0)begin
  
         seg_ment <= 7'h01;
  
     end
  
     else if(cnt1==1)begin
  
         seg_ment <= 7'h4f;
  
     end
  
     else if(cnt1==2)begin
  
         seg_ment <= 7'h12;
  
     end
  
     else if(cnt1==3)begin
  
         seg_ment <= 7'h06;
  
     end
  
     else if(cnt1==4)begin
  
         seg_ment <= 7'h4c;
  
     end
  
     else if(cnt1==5)begin
  
         seg_ment <= 7'h24;
  
     end
  
     else if(cnt1==6)begin
  
         seg_ment <= 7'h20;
  
    end
  
     else if(cnt1==7)begin
  
         seg_ment <= 7'h0f;
  
     end
  
     else if(cnt1==8)begin
  
         seg_ment <= 7'h00;
  
     end
  
     else if(cnt1==9)begin
  
         seg_ment <= 7'h04;
  
     end
  
end
然后,用組合邏輯把x的值確定下來。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image019.png
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
always   @(*)begin
  
     if(cnt1==0)begin
  
         x = 50_000_000;
  
     end
  
     else if(cnt1==1)begin
  
         x = 100_000_000;
  
     end
  
     else if(cnt1==2)begin
  
         x = 150_000_000;
  
     end
  
     else if(cnt1==3)begin
  
         x = 200_000_000;
  
     end
  
     else if(cnt1==4)begin
  
         x = 250_000_000;
  
     end
  
     else if(cnt1==5)begin
  
         x = 300_000_000;
  
     end
  
     else if(cnt1==6)begin
  
         x = 350_000_000;
  
     end
  
     else if(cnt1==7)begin
  
         x = 400_000_000;
  
     end
  
     else if(cnt1==8)begin
  
         x = 450_000_000;
  
     end
  
     else if(cnt1==9)begin
  
         x = 500_000_000;
  
     end
  
end
此次,主體程序已經(jīng)完成。接下來是將module補充完整。
module的名稱定義為my_time。并且我們已經(jīng)知道該模塊有4個信號:clkrst_nseg_selseg_ment,代碼如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png
1
  
2

手把手教你學FPGA設計-秒表功能.pdf

1.44 MB, 下載積分: 積分 -1

本文地址:http://www.qingdxww.cn/thread-547888-1-1.html     【打印本頁】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內(nèi)容、版權和其它問題,我們將根據(jù)著作權人的要求,第一時間更正或刪除。
哈哈哈yyy 發(fā)表于 2019-6-24 00:00:25
看看
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Chiptorials——如何使用ATECC608 TrustFLEX實現(xiàn)公鑰輪換
  • FPGA設計流程培訓教程
  • Chiptorials ——如何將CryptoAuthLib庫用于Microchip安全身份驗證IC
  • 無線充電基礎知識及應用培訓教程
  • 貿(mào)澤電子(Mouser)專區(qū)
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产福利在线观看永久视频 | 视频在线观看一区二区三区 | 日韩欧美在线观看视频一区二区 | 日本一区二区三区视频在线观看 | 亚洲网址在线 | 香蕉视频免费看 | 最新香蕉97超级碰碰碰碰碰久 | 暴雨夜被公侵犯078在线观看 | 欧美日韩国产一区二区三区伦 | 女性爽爽影院免费观看麻豆 | 成人免费动作大片黄在线 | 久久www免费人成看片入口 | 亚洲成人动漫在线 | 国产夫妻精品 | 男女激情视频国产免费观看 | 日本中文字幕不卡 | 久久99爱re热视| 在线精品国内外视频 | 亚洲区一区 | 日韩a在线观看 | 黄工厂精品视频在线观看 | 在线免费观看国产视频 | 久久99精品综合国产首页 | 激情久久久久久久久久久 | 国产成人精品男人的天堂538 | 国产精品久久久久久久久kt | 日韩无 | 向日葵.app在线观看 | 亚洲视频久久 | 欧洲国产伦久久久久久久 | 免费日韩一级片 | 天天在线精品视频在线观看 | 亚洲免费视频一区二区三区 | 四虎永久在线观看免费网站网址 | 伊人热热久久原色播放www | 欧美在线视频免费看 | 羞羞免费网站 | 日韩精品专区 | 精品视频免费看 | 欧美视频一区二区三区四区 | 日本高清在线播放一区二区三区 |