猜數(shù)字vhdl設(shè)計(jì)數(shù)字電路實(shí)驗(yàn)報(bào)告_第1頁(yè)
猜數(shù)字vhdl設(shè)計(jì)數(shù)字電路實(shí)驗(yàn)報(bào)告_第2頁(yè)
猜數(shù)字vhdl設(shè)計(jì)數(shù)字電路實(shí)驗(yàn)報(bào)告_第3頁(yè)
猜數(shù)字vhdl設(shè)計(jì)數(shù)字電路實(shí)驗(yàn)報(bào)告_第4頁(yè)
猜數(shù)字vhdl設(shè)計(jì)數(shù)字電路實(shí)驗(yàn)報(bào)告_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余75頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)字電路實(shí)驗(yàn)報(bào)告猜數(shù)字學(xué)院:班級(jí):姓名: 學(xué)號(hào):實(shí)驗(yàn)組號(hào):一.實(shí)驗(yàn)要求【基本要求】1、 游戲規(guī)則:通常由兩個(gè)人玩,一方出數(shù)字,另一方猜。出數(shù)字的人要想好一個(gè)沒(méi)有重復(fù)數(shù)字的4位數(shù),不能讓猜的人知道。2、 數(shù)字設(shè)置:通過(guò)4*4鍵盤進(jìn)行4位數(shù)字輸入,在數(shù)碼管(DISP0DISP3)上顯示當(dāng)前所輸入的數(shù)字。通過(guò)設(shè)置確定鍵(BTN1鍵)進(jìn)行鎖定,此時(shí)數(shù)碼管上的數(shù)值消失,同時(shí)用點(diǎn)陣開(kāi)始倒計(jì)時(shí),即:初始狀態(tài)點(diǎn)陣全亮,然后從右下角開(kāi)始,由右到左、由下到上逐點(diǎn)逐排依次熄滅,間隔時(shí)間為1s,共計(jì)64s。3、 猜數(shù)字:可以通過(guò)4*4鍵盤進(jìn)行4位數(shù)字輸入進(jìn)行猜數(shù)字,且每輸入一位數(shù)字在數(shù)碼管(DISP0DISP3)上顯

2、示當(dāng)前所輸入的數(shù)字,按確定鍵(BTN2鍵)進(jìn)行確認(rèn),此時(shí)要根據(jù)輸入的這組數(shù)字給出幾A幾B,其中:l A前面的數(shù)字表示位置正確的數(shù)的個(gè)數(shù),用DISP5顯示l B前的數(shù)字表示數(shù)字正確而位置不對(duì)的數(shù)的個(gè)數(shù),用DISP4顯示l 如正確答案為 2134,而猜的人猜 5314,則是 1A2B,其中有一個(gè)4的位置對(duì)了,記為1A,而1和3這三個(gè)數(shù)字對(duì)了,而位置沒(méi)對(duì),因此記為 2B,合起來(lái)就是 1A2Bl 接著猜的人再根據(jù)出題者的幾A幾B繼續(xù)猜,直到猜中(即 4A0B)為止。4、 若數(shù)字正確則顯示猜數(shù)字成功,點(diǎn)陣顯示“”笑臉;若輸入數(shù)字錯(cuò)誤系統(tǒng)仍然處于猜數(shù)字狀態(tài),點(diǎn)陣顯示“X”,并用蜂鳴器或led閃爍報(bào)警。5、

3、 若到點(diǎn)陣全滅時(shí)(64s結(jié)束)仍未猜出正確數(shù)字,游戲失敗,點(diǎn)陣顯示“囧”。6、 設(shè)置游戲機(jī)開(kāi)關(guān)?!緦?shí)驗(yàn)所用儀器及元器件】 1.計(jì)算機(jī) 2.數(shù)字系統(tǒng)與邏輯設(shè)計(jì)實(shí)驗(yàn)開(kāi)發(fā)板【實(shí)驗(yàn)軟件】Quartus 【資源利用】二、 程序設(shè)計(jì)1、 程序流程圖開(kāi)始初始化開(kāi)始游戲?設(shè)置數(shù)字猜測(cè)猜數(shù)字,點(diǎn)陣倒計(jì)時(shí)確認(rèn)數(shù)字?A?B計(jì)時(shí)結(jié)束?正確?重新開(kāi)始?結(jié)束是否是否否顯示笑臉是是顯示囧否否是2、 邏輯框圖蜂鳴器模塊點(diǎn)陣模塊數(shù)碼管模塊分頻模塊狀態(tài)機(jī)CLK鍵盤模塊3、 MDS圖Idle初始化S1設(shè)置數(shù)字S3?A?BS2猜數(shù)字Over結(jié)束st=1rs=1rs=1reset=1ms1=1ms2=1done=1tm=1tf=0tm

4、=0st=1rs=1三、程序分析1、 引腳注釋clk時(shí)鐘st游戲開(kāi)始scan_out3.0鍵盤的行掃描輸出信號(hào)key_row3.0鍵盤的列輸入信號(hào)ms1輸入確認(rèn)鍵ms2猜數(shù)字rs 復(fù)位bee_out蜂鳴器輸出ld_out狀態(tài)指示燈seg_out 數(shù)碼管顯示cat_out數(shù)碼管排列顯示led_row_out點(diǎn)陣行顯示led_col_out點(diǎn)陣列顯示2、 鍵盤數(shù)字data0=1111110;-0data1=0110000;-1data2=1101101;-2data3=1111001;-3data4=0110011;-4data5=1011011;-5data6=1011111;-6data7=1

5、110000;-7data8=1111111;-8data9=1111011;-93、 狀態(tài)設(shè)置程序設(shè)置程序狀態(tài)當(dāng)st=1時(shí),游戲開(kāi)始當(dāng)ms=1時(shí),確認(rèn)輸入數(shù)字,可以猜數(shù)字當(dāng)ms=1時(shí),將輸入猜測(cè)的數(shù)字與原始數(shù)字做對(duì)比,計(jì)算A,B當(dāng)rs=1時(shí),程序復(fù)位清零P1:PROCESS(st,ms1,ms2,rs,tm,done,state,clk_tm) VARIABLE count_anyway:INTEGER RANGE 0 TO 2:=0; BEGINnext_state=state;IF rs=1 THEN next_state IF st=1 THEN next_state=s1;-游戲開(kāi)始

6、 ELSE next_state IF ms1=1 THEN確認(rèn)輸入數(shù)字next_state=s2; ELSE next_state IF ms2=1 THEN -開(kāi)始猜數(shù)字next_state=s3; ELSIF tm=1 THENnext_state=over;ELSE next_stateIF done=1 THEN 判斷完成,數(shù)字對(duì)比結(jié)束next_state=over; ELSE next_stateIF st=1 THEN next_state=idle;-游戲開(kāi)始,初始化ELSIF tf=0 THEN IF tm=0 THENnext_state=s2;ELSE next_stat

7、e=over;END IF;ELSE next_statenext_state=idle;-其他,程序置0END CASE;END IF;END PROCESS p1;4、 分頻器將50MHz的時(shí)鐘頻率分成1KHzP2:PROCESS(clk) -fenpingVARIABLE count3:INTEGER:=0;VARIABLE count4:INTEGER:=0;BEGINIF clkevent AND clk=1 THENIF count4=24999 THENclk_scan=NOT clk_scan; count4:=0;IF count3=24999999 THEN clk_tm=

8、NOT clk_tm; count3:=0;ELSE count3:=count3+1;END IF;ELSE count3:=count3+1; count4:=count4+1;END IF;END IF;END PROCESS p2;5、 點(diǎn)陣計(jì)數(shù)64s倒計(jì)時(shí),在點(diǎn)陣顯示,判斷當(dāng)tf=1時(shí),led賦值為2,顯示2號(hào)點(diǎn)陣,即為笑臉,游戲通過(guò),當(dāng)計(jì)時(shí)結(jié)束,count_clear=1,led賦值4,tm,賦值0,顯示為空,當(dāng)bee=1時(shí),蜂鳴器響,提示猜測(cè)錯(cuò)誤P3:PROCESS(clk_tm,count_clear,tf,bee) -count downBEGINIF tf=1 THENle

9、d=2;ELSIF count_clear=1 THENcount_down=0; led=4; tm=0;ELSIF bee=1 THENled=3;ELSIF state=s2 THENIF clk_tmevent AND clk_tm=1 THENIF count_down=64 THEN tm=1; count_down=0; led=1; ELSE count_down=count_down+1; ledCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=11

10、1101;seg cat=111110;seg cat=011111;segCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segCASE

11、 cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segNULL;END CASE;cat_out=cat; seg_out scan scan s

12、can scan scan=0111;END CASE;scan_out seg_a seg_a seg_a seg_a seg_a seg_a seg_b seg_b seg_b seg_b seg_b seg_bx1=0000000; x2=0000000; x3=0000000; x4=0000000;y1=0000000; y2=0000000; y3=0000000; y4=0000000; num_a=0; num_b=0; tf=0; key1=0000000; key2=0000000;count1:=0; count2:=0; count5:=0; count6:=0; do

13、ne=0;count_clear=1; beecount_clearCASE scan IS WHEN 0111 = key1 key1 key1 key1 NULL;END CASE;WHEN 1011 =CASE scan IS WHEN 0111 = key1 key1 key1 key1 NULL;END CASE;WHEN 1101 =CASE scan IS WHEN 1011 = key1 key1 NULL;END CASE;WHEN OTHERS = NULL;END CASE;CASE count1 ISWHEN 0 = IF key1 /= x4 THEN x1IF ke

14、y1 /= x1 THEN x2 IF key1 /= x2 THEN x3 IF key1 /= x3 THEN x4 NULL;END CASE;WHEN s2 =beeCASE scan IS WHEN 0111 = key2 key2 key2 key2 NULL;END CASE;WHEN 1011 =CASE scan IS WHEN 0111 = key2 key2 key2 key2 NULL;END CASE;WHEN 1101 =CASE scan IS WHEN 1011 = key2 key2 NULL;END CASE;WHEN OTHERS = NULL;END C

15、ASE;CASE count2 ISWHEN 0 = IF key2 /= y4 THEN y1IF key2 /= y1 THEN y2 IF key2 /= y2 THEN y3 IF key2 /= y3 THEN y4 NULL;END CASE;WHEN s3=count5:=0; count6:=0;IF x1=y1 THEN count5:=count5+1;ELSIF x1=y2 THEN count6:=count6+1;ELSIF x1=y3 THEN count6:=count6+1;ELSIF x1=y4 THEN count6:=count6+1;ELSE NULL;

16、END IF;IF x2=y2 THEN count5:=count5+1;ELSIF x2=y1 THEN count6:=count6+1;ELSIF x2=y3 THEN count6:=count6+1;ELSIF x2=y4 THEN count6:=count6+1;ELSE NULL;END IF;IF x3=y3 THEN count5:=count5+1;ELSIF x3=y1 THEN count6:=count6+1;ELSIF x3=y2 THEN count6:=count6+1;ELSIF x3=y4 THEN count6:=count6+1;ELSE NULL;

17、END IF;IF x4=y4 THEN count5:=count5+1;ELSIF x4=y1 THEN count6:=count6+1;ELSIF x4=y2 THEN count6:=count6+1;ELSIF x4=y3 THEN count6:=count6+1;ELSE NULL;END IF;IF count5=4 THEN tf=1; bee=0;ELSE tf=0; bee=1;END IF;num_a=count5; num_b=count6; If count11=1000 THENdonedone=0; count5:=0; count6:=0; count2:=

18、0;IF tf=0 THEN key2=0000000;y1=0000000; y2=0000000; y3=0000000; y4 NULL;END CASE;END IF;END PROCESS p7;10、 狀態(tài)指示燈P8:PROCESS(clk_scan)BEGINIF clk_scanevent AND clk_scan=1 THENCASE state ISWHEN idle = ld_outld_outld_outld_out ld_outld_out=0000;-系統(tǒng)故障END CASE;state led_row=01111111;led_col led_row=101111

19、11;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_col led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=111101

20、11;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_col led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=111111

21、10;led_col led_row=01111111;led_col led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=0

22、1111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=01111111;led_col led_row=10111111;led_col led_

23、row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col

24、 led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCA

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論