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

手把手教你學(xué)FPGA設(shè)計(jì)-秒表功能

發(fā)布時(shí)間:2018-9-30 11:08    發(fā)布者:luckyb1
秒表功能
一、項(xiàng)目背景
同上一個(gè)項(xiàng)目。
二、設(shè)計(jì)目標(biāo)
開發(fā)板或者模塊是有 8 位數(shù)碼管,本次設(shè)計(jì)需要使用1個(gè)數(shù)碼管,即數(shù)碼管0,實(shí)現(xiàn)類似于秒表的功能,具體要求如下:
復(fù)位后,數(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
上板的演示效果,請(qǐng)登陸網(wǎng)址查看:www.mdy-edu.com/xxxx
三、模塊設(shè)計(jì)
我們要實(shí)現(xiàn)的功能,概括起來就是控制8個(gè)數(shù)碼管,其中數(shù)碼管0亮,其他數(shù)碼管不亮。并讓數(shù)碼管0顯示不同的數(shù)字。
要控制8個(gè)數(shù)碼管,就需要控制位選信號(hào),即FPGA要輸出一個(gè)8位的位選信號(hào),設(shè)為seg_sel,其中seg_sel[0]對(duì)應(yīng)數(shù)碼管0seg_sel[1]對(duì)應(yīng)數(shù)碼管1,以此類推,seg_sel[7]對(duì)應(yīng)數(shù)碼管7
要顯示不同的數(shù)字,就需要控制段選信號(hào),不需要用到DP,一共有7根線,即FPGA要輸出一個(gè)7位的段選信號(hào),設(shè)為seg_mentseg_ment[6]~segm_ment[0]分別對(duì)應(yīng)數(shù)碼管的abcdefg(注意對(duì)應(yīng)順序)。
我們還需要時(shí)鐘信號(hào)和復(fù)位信號(hào)來進(jìn)行工程控制。
綜上所述,我們這個(gè)工程需要4個(gè)信號(hào),時(shí)鐘clk,復(fù)位rst_n,輸出的位選信號(hào)seg_sel和輸出的段選信號(hào)seg_ment
  
信號(hào)線
  
信號(hào)線
FPGA管腳
內(nèi)部信號(hào)
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]
我們先分析要實(shí)現(xiàn)的功能,數(shù)碼管0顯示數(shù)字0,翻譯成信號(hào)就是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隔一段時(shí)間后會(huì)變化,而這個(gè)時(shí)間在不同時(shí)期還不相同。把時(shí)間信息補(bǔ)充上,得到下面的波形示意圖。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png         上圖就是seg_selseg_seg信號(hào)的變化波形圖。在顯示第1個(gè)時(shí),seg_sel=8’hfeseg_ment=7’h01并持續(xù)1秒;在第2個(gè)時(shí),seg_sel=8’hfeseg_ment=7’h4f并持續(xù)2秒;以此類推,第8個(gè)時(shí),seg_sel=8’hfeseg_ment=7’h04并持續(xù)10秒。然后又再次重復(fù)。
由波形圖可知,我們需要1個(gè)計(jì)數(shù)器用來計(jì)算時(shí)間,如2秒、3秒等。另外,我們還需要一個(gè)計(jì)數(shù)器,用來計(jì)算在第幾個(gè)階段中。所以總共需要2個(gè)計(jì)數(shù)器。
本工程的工作時(shí)鐘是50MHz,即周期為20ns,計(jì)數(shù)器計(jì)數(shù)到2_000_000_000/20=100_000_000個(gè),我們就能知道2秒時(shí)間到了。以類類推,在第2次時(shí),數(shù)到150_000_000個(gè),就知道了3秒時(shí)間到。第9次時(shí),數(shù)到500_000_000個(gè),就表示10秒時(shí)間到。另外,由于該計(jì)數(shù)器是不停地計(jì)數(shù),永遠(yuǎn)不停止的,可以認(rèn)為加1條件一直有效,可寫成:assignadd_cnt0==1。綜上所述,結(jié)合變量法,該計(jì)數(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 ;
第二個(gè)計(jì)數(shù)器用于表示第幾個(gè),很自然可以看到,每個(gè)階段完成后,該計(jì)數(shù)器加1,因此加1條件可為end_cnt0。該計(jì)數(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 ;
接下來設(shè)計(jì)seg_sel。該信號(hào)一直為8’hfe,所以代碼直接寫成如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png
1
assign seg_sel = 8'hfe ;
我們來思考輸出信號(hào)seg_ment的變化。概括起來,在第1次的時(shí)候輸出值為7’h01;在第2次的時(shí)候輸出值為7’h4f;以此類推,在第8次的時(shí)候輸出值為7’h0f。我們用信號(hào)cnt1來代替第幾次,也就是:當(dāng)cnt1==0的時(shí)候,輸出值為7’h01;在cnt1==1的時(shí)候輸出值為7’h4f;以此類推,在cnt1==9的時(shí)候輸出值為7’h04。再進(jìn)一步翻譯成代碼,就變成如下:
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補(bǔ)充完整。
module的名稱定義為my_time。并且我們已經(jīng)知道該模塊有4個(gè)信號(hào):clkrst_nseg_selseg_ment,代碼如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png
1
  
2

手把手教你學(xué)FPGA設(shè)計(jì)-秒表功能.pdf

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

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

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

廠商推薦

  • Microchip視頻專區(qū)
  • dsPIC® DSC:攻克各種觸摸傳感挑戰(zhàn)的電容式觸摸解決方案
  • dsPIC® DSC集成電機(jī)驅(qū)動(dòng)器:非常適合在緊湊空間內(nèi)進(jìn)行實(shí)時(shí)控制
  • 實(shí)時(shí)控制解決方案的正確選擇——數(shù)字信號(hào)控制器(DSC)或通用MCU
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人久久久| 日韩亚洲欧洲在线com91tv| 视频福利在线| 日韩中文字幕在线播放| 日本a在线播放| 天天综合网天天综合色| 一级毛片无遮挡免费全部| 日韩在线一区二区三区| 亚洲六区| 亚洲毛片在线免费观看| 亚洲日本久久久午夜精品| 日韩一区二区超清视频| 亚洲精品综合一二三区在线| 一级片免费网站| 天天色踪合合| 欧美亚洲国产成人综合在线| 欧美视频自拍偷拍| 四虎www成人影院免费观看| 日本久久精品免视看国产成人| 亚洲欧洲免费| 日日操狠狠干| 四虎最新永久在线精品免费| 四虎tv| 亚洲欧美综合日韩字幕v在线| 三级成人网| 欧美高清免费一级在线 | 日本jzz| 热99视频| 日本亚洲欧美| 手机看片1024精品日韩| 三级黄色小视频| 五月激情久久| 日本a在线| 欧美日韩在线精品一区二区三区 | 日本美女视频韩国视频网站免费| 全网免费在线播放视频入口| 四虎影院www| 欧美成人a级在线视频| 亚洲视频一区二区三区四区| 亚洲原创区| 天天干视频网站|