

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 電子線路 CAD 課程設(shè)計論文</p><p> 搶答器(verilog+Ise)</p><p><b> 概述</b></p><p> 在競賽、文體娛樂活動(搶答活動)中,能準(zhǔn)確、公正、直觀地判斷出搶答者的機器。</p><p> 通過搶答者的指示燈顯示、數(shù)碼顯示和警示顯示等手段指示出
2、第一搶答者。 </p><p> 一般搶答器由單片機以及外圍電路組成,分為八路十路等不同,八路和十路的差別是,搶答器背面的 接口有幾組,和外形沒有關(guān)系。</p><p><b> 課題要求</b></p><p> 設(shè)計一個可容納6組參賽的數(shù)字式搶答器,每組設(shè)一個按鈕,供搶答使用。</p><p> 搶答器具有第
3、一信號鑒別與鎖存功能,除第一個搶答者外,其余不起作用。</p><p> 設(shè)置一個主持人“復(fù)位”按鈕。</p><p> 主持人復(fù)位后,開始搶答,第一信號鑒別與鎖存電路得到信號后,有指示器顯示搶答組別,揚聲器發(fā)出2~3秒的音響。</p><p> 設(shè)置一個記分電路,每組開始預(yù)置100 分,由主持人記分,答對一次加10分,答錯一次減10分。</p>
4、<p><b> 其它創(chuàng)新功能。</b></p><p><b> 測試工具平臺</b></p><p> 編寫語言:Verilog</p><p> 編譯調(diào)試工具:Xilinx ISE 9.2i</p><p> 運行板子:Xilinx Basys_1.1</p>
5、<p><b> 實現(xiàn)功能</b></p><p><b> 基本功能</b></p><p> 搶答器可以容納6組參賽的數(shù)字式搶答器,每組都設(shè)置由一個搶答按鈕,供參賽者搶答。</p><p> 搶答器具有第一信號鑒別與鎖存功能,除第一個搶答者外,其余不起作用。</p><p>
6、; 設(shè)置一個主持人“復(fù)位”按鈕,每次搶答之后按此按鈕之后才能進(jìn)行下一輪搶答。</p><p> 主持人復(fù)位后,開始搶答,第一信號鑒別與鎖存電路得到信號后,有指示器顯示搶答組別,揚聲器發(fā)出2~3秒的音響。</p><p> 設(shè)置一個記分電路,由主持人記分,答對一次加1分,答錯一次減1分。</p><p><b> 創(chuàng)新功能</b><
7、/p><p> 初始分?jǐn)?shù)可以在每次搶答比賽開始前進(jìn)行設(shè)置,由于考慮到現(xiàn)實的方便性,設(shè)置范圍為1至9分</p><p> 當(dāng)某位參賽人員的積分減少至為0分時,則該人員被徹底淘汰,在下一輪搶答中搶答按鈕無效。</p><p> 在每次才賽人員搶答完之后,由主持人或相關(guān)人員通過兩個按鈕來判斷答題是否正確,以確定其加分還是減分,程序會檢測該按鈕并且不允許進(jìn)行第二次被按下,
8、以免造成分?jǐn)?shù)的計數(shù)錯誤。</p><p> 當(dāng)時間到最后3秒是會發(fā)出滴滴滴的提示音,在參賽人員按下?lián)尨鸢粹o也會發(fā)出長1s的提示音。</p><p> 程序設(shè)置了一個搶答器的倒計時,每輪搶答為10s倒計時,并且時間倒計為0之后發(fā)出提示音,強大之后,時間重新復(fù)位,便于下一輪計時。</p><p> 在支持人判斷搶答者答題正誤之前或之后,可以通過兩個按鈕切換當(dāng)前狀態(tài)
9、,從而可以查看所有選手的積分。</p><p> 使用的狀態(tài)機思想,設(shè)置了8種狀態(tài):</p><p><b> 設(shè)計思路</b></p><p><b> 總體電路</b></p><p> Display原理圖</p><p><b> 總原理圖<
10、/b></p><p> 該電路是在Ise中將所寫的各個模塊用導(dǎo)線連接之后的效果,從這個圖可以很清晰的看到程序的結(jié)構(gòu)和思路。</p><p><b> 詳細(xì)設(shè)計</b></p><p> 在對問題進(jìn)行分析之后將該程序分成一下模塊,如表所示:</p><p><b> 模塊仿真</b>&
11、lt;/p><p> restart模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:可以看到,cp1024hz的時鐘每個上升沿檢測start_clk信號下降沿,并且在其每個下降沿對start信號翻轉(zhuǎn),而搶答器在start=0是表示設(shè)置初始分?jǐn)?shù),start=1是表示搶答正常進(jìn)行,所以利用start_clk可以控制
12、搶答器重新開始。</p><p> Mode_latch_change模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:可以看出,該模塊在start=1是開始工作,當(dāng)flag_pressed(表示選手搶答)信號置為1時,模塊鎖存當(dāng)前的狀態(tài)mode_in,即相應(yīng)的強大選手的編號,在flag_pressed=1的
13、過程中,可以通過按up_clk和down_clk兩個按鈕設(shè)置mode_out,由此輸入到display,從而顯示各個選手的分?jǐn)?shù)信息。模塊中提供1024hz的時鐘對up_clk和down_clk掃描,一旦有脈沖,則在下降沿做相應(yīng)動作,可以消除按鍵的抖動影響。</p><p> Set_score模塊仿真</p><p><b> 波形如下:</b></p>
14、;<p> 分析:可以看出該模塊在start=0是工作,通過1024hz時鐘對兩個按鍵掃描,對初始分?jǐn)?shù)進(jìn)行加計數(shù)和減計數(shù),即一個0~9的計數(shù)器,同時消除按鍵抖動的影響。</p><p> Time_count模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:可以看出該模塊在start=1是正常
15、工作,當(dāng)flag_pressed信號為0時,時間從9s開始倒計時,當(dāng)有選手搶答,flag_pressed有0變?yōu)?時,時間停止計數(shù),在支持人按下reset按鍵之后,計數(shù)值恢復(fù)為9s,并開始倒計數(shù),當(dāng)時間倒計至3時,time_less_alarm信號由0變成1,當(dāng)時間倒計至0時,time_out信號由0變成1,這兩個信號都送至sound_alarm并經(jīng)過變換之后驅(qū)動喇叭得到提示音。</p><p> Score_
16、count模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:有圖可以看出,該模塊在start=1時正常工作,利用1024hz的時鐘對right_key和wrong_key掃描,消除抖動之后,做相應(yīng)的分?jǐn)?shù)設(shè)置操作,給誰加減分通過當(dāng)前的mode判斷,并且當(dāng)某選手分?jǐn)?shù)減至0分時,該選手的一個標(biāo)志位zero被置為1,表示該選手已被淘汰,下一輪
17、搶答將沒有資格搶答,相應(yīng)的按鍵也將無效。</p><p> Display模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:該模塊在start=1時工作,用1024hz信號掃描mode變化,并以此作為依據(jù)輸出相應(yīng)的信號到數(shù)碼管中顯示,這種對應(yīng)關(guān)系在前面的表格中已經(jīng)詳細(xì)說明,不再贅述。</p>&
18、lt;p> Sound_alarm模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:該模塊在start=1時正常工作,輸入有sound_en信號time_less_alarm,sound_en=1表示有選手搶答或者時間倒計至0,此時alarm輸出1s鐘的1024hz信號,驅(qū)動喇叭得到提示音;time_less_alarm=1信
19、號表示時間只剩下3s,此時alarm輸出0.5s鐘的1024hz信號,驅(qū)動喇叭得到提示音。</p><p> Control模塊仿真</p><p><b> 波形如下:</b></p><p> 分析:該模塊在start=1時正常工作,當(dāng)相應(yīng)的key按鍵按下時,mode變成相應(yīng)選手的編號狀態(tài),并且flag_pressed變成1,此時so
20、und_en被置為1,驅(qū)動喇叭得到1s的1khz的提示音。并且只有當(dāng)支持人按下reset鍵之后才恢復(fù)至0,;當(dāng)time_out信號為1時,表示時間倒計至0,此時sound_en被置為1,驅(qū)動喇叭得到提示音。</p><p><b> 實驗感想</b></p><p> 通過這次課程設(shè)計,加強了我們動手、思考和解決問題的能力。在設(shè)計過程中,經(jīng)常會遇到這樣那樣的情況,
21、就是心里想老著這樣的接法可以行得通,但實際接上電路,總是實現(xiàn)不了,因此耗費在這上面的時間用去很多。</p><p> 做課程設(shè)計同時也是對課本知識的鞏固和加強,由于課本上的知識太多,平時課間的學(xué)習(xí)并不能很好的理解和運用各個元件的功能,而且考試內(nèi)容有限,所以在這次課程設(shè)計過程中,我們了解了很多元件的功能,并且對于其在電路中的使用有了更多的認(rèn)識。</p><p> 平時看課本時,有時問題老
22、是弄不懂,做完課程設(shè)計,那些問題就迎刃而解了。而且還可以記住很多東西。比如一些芯片的功能,平時看課本,這次看了,下次就忘了,通過動手實踐讓我們對各個元件映象深刻。認(rèn)識來源于實踐,實踐是認(rèn)識的動力和最終目的,實踐是檢驗真理的唯一標(biāo)準(zhǔn)。所以這個課程設(shè)計對我的作用是非常大的。</p><p> 通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論
23、中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。</p><p> 此次課程設(shè)計,學(xué)到了很多課內(nèi)學(xué)不到的東西,比如獨立思考解決問題,出現(xiàn)差錯的隨機應(yīng)變,和與人合作共同提高,都受益非淺,今后的制作應(yīng)該更輕松,自己也都能扛的起并高質(zhì)量的完成項目。</p><p> 最后衷心感謝老師的悉心授課和同學(xué)門的熱心幫助!</p><p><b
24、> 源代碼</b></p><p><b> restart.v</b></p><p> module restart(cp1024hz,start_clk,started);//started==0設(shè)置初始分?jǐn)?shù),started==1開始工作</p><p> input cp1024hz,start_clk;
25、</p><p> output started;</p><p> reg started;</p><p> reg[1:0] init_temp=0;</p><p> reg start_clk1;</p><p> always @(posedge cp1024hz)</p><
26、p><b> begin</b></p><p> start_clk1<=start_clk;</p><p><b> end</b></p><p> wire start_clk2;</p><p> assign start_clk2=start_clk1&(
27、~start_clk);//變換start_clk信號,防止抖動以及便于cp1024hz掃描</p><p> always @(posedge cp1024hz)//start正常工作搶??_clk started翻轉(zhuǎn),為0時設(shè)置分?jǐn)?shù),為1時</p><p><b> begin</b></p><p> if(init_temp==2
28、)</p><p><b> begin</b></p><p> started<=0;</p><p> init_temp<=init_temp+1;</p><p><b> end</b></p><p> else if(init_temp=
29、=3)</p><p><b> begin</b></p><p> init_temp<=init_temp;</p><p> if(start_clk2)</p><p><b> begin</b></p><p> started<=~sta
30、rted;</p><p><b> end</b></p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> init_temp
31、<=init_temp+1;</p><p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> mode_latch_change.v</p><p>
32、; module mode_latch_change(cp1024hz,started,flag_pressed,latch_clk,up_clk,down_clk,mode_in,mode_out);</p><p> input cp1024hz,started,flag_pressed;//時鐘信號,搶答開始信號,搶答中已經(jīng)有按下鍵信號</p><p> input latch
33、_clk;//鎖存mode的脈沖信號</p><p> input up_clk,down_clk;//設(shè)置mode的兩個按鍵,上調(diào)鍵和下調(diào)鍵</p><p> input[3:0]mode_in;//從control的mode輸出引進(jìn)</p><p> output mode_out;//搶答按鍵之后由modein變modeout<
34、/p><p> reg[3:0] mode_out;</p><p> reg up_clk1,down_clk1,latch_clk1;</p><p> always @(posedge cp1024hz)</p><p><b> begin</b></p><p> up_clk1&
35、lt;=up_clk;</p><p> down_clk1<=down_clk;</p><p> latch_clk1<=latch_clk;</p><p><b> end</b></p><p> wire up_clk2,down_clk2,latch_clk2;//對輸入的信號??變化?
36、??閿赾p1024hz的脈沖捕獲,并且可以防止設(shè)置mode的兩個按鍵的抖動</p><p> assign up_clk2=up_clk1&(~up_clk);</p><p> assign down_clk2=down_clk1&(~down_clk);</p><p> assign latch_clk2=latch_clk1&(
37、~latch_clk);</p><p> always @(posedge cp1024hz)</p><p><b> begin</b></p><p> if(!started)//started=0,設(shè)置分?jǐn)?shù)模式,mode_out=mode_in=0;</p><p><b> begin&l
38、t;/b></p><p> mode_out<=0;</p><p><b> end</b></p><p> else//正常搶答過程</p><p><b> begin</b></p><p> if(!flag_pressed)//搶答模
39、式</p><p><b> begin</b></p><p> mode_out<=mode_in;</p><p><b> end</b></p><p> else if(latch_clk2)//鎖存模式</p><p><b> be
40、gin</b></p><p> mode_out<=mode_in;</p><p><b> end</b></p><p> else if(flag_pressed && up_clk2)//查看各個分?jǐn)?shù),mode加計數(shù)</p><p><b> begin&l
41、t;/b></p><p> if(mode_out>=6)</p><p><b> begin</b></p><p> mode_out<=0;</p><p><b> end</b></p><p><b> else</
42、b></p><p><b> begin</b></p><p> mode_out<=mode_out+1;</p><p><b> end</b></p><p><b> end</b></p><p> else if
43、(flag_pressed && down_clk2)//查看各個分?jǐn)?shù),mode減計數(shù)</p><p><b> begin</b></p><p> if(mode_out<=0)</p><p><b> begin</b></p><p> mode_out<
44、;=6;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> mode_out<=mode_out-1;</p><p><b>
45、 end</b></p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> //mode_out<=mode_in;</p><p>
46、;<b> end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> set_score.v</p><p>
47、; module set_score(cp1024hz,started,set_up,set_down,setted_score);//搶答前設(shè)置玩家分?jǐn)?shù)yes</p><p> input cp1024hz,started,set_up,set_down;</p><p> output setted_score;</p><p> reg [3:0]se
48、tted_score;</p><p> reg cp_up,cp_down;</p><p> always @(posedge cp1024hz)</p><p><b> begin</b></p><p> cp_up <=set_up;</p><p> cp_down
49、<=set_down;</p><p><b> end</b></p><p> wire cp_up_pos,cp_down_pos;</p><p> assign cp_up_pos=cp_up&(~set_up);</p><p> assign cp_down_pos=cp_down
50、&(~set_down) ;//設(shè)置分?jǐn)?shù)的計數(shù)cp,并防止抖動</p><p> always @(posedge cp1024hz) //設(shè)置初始分?jǐn)?shù)</p><p><b> begin</b></p><p> if(started==1)</p><p><b> begi
51、n</b></p><p> setted_score[3:0]<=0;</p><p><b> end</b></p><p> else //當(dāng)stared=0,為設(shè)置初始分?jǐn)?shù)的模式,開?忌柚梅質(zhì)?begin</p><p> if(cp_up_pos&&a
52、mp;(!cp_down_pos)) //設(shè)置??數(shù)加計數(shù)設(shè)置</p><p><b> begin</b></p><p> if(setted_score[3:0]==9)</p><p><b> begin</b></p><p> setted_score[3:0
53、]<=0;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> setted_score[3:0]<=setted_score[3:0]+1;</p>
54、;<p><b> end</b></p><p><b> end</b></p><p> else if((!cp_up_pos)&&cp_down_pos) //設(shè)置分?jǐn)?shù)減計數(shù)設(shè)置</p><p><b> begin</b></p>
55、<p> if(setted_score[3:0]==0)</p><p><b> begin</b></p><p> setted_score[3:0]<=9;</p><p><b> end</b></p><p><b> else</b&g
56、t;</p><p><b> begin</b></p><p> setted_score[3:0]<=setted_score[3:0]-1;</p><p><b> end</b></p><p><b> end</b></p><
57、p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> time_count.v</p><p> module time_count(cp1024hz,started,r
58、eset,flag_pressed,time_left,time_less_alarm,time_out);//yesd</p><p> input cp1024hz,started,reset,flag_pressed;</p><p> output time_left;</p><p> output time_less_alarm;//倒計時到3s之
59、后發(fā)出提醒信號</p><p> output time_out;//倒計時完了之后發(fā)出信號</p><p> reg [3:0] time_left;</p><p> reg time_less_alarm;</p><p> reg time_out;</p><p> reg[9:0] temp_co
60、unt;</p><p> always @(posedge cp1024hz)</p><p><b> begin</b></p><p> if(!started)</p><p><b> begin</b></p><p> time_left<=0
61、;</p><p><b> end</b></p><p><b> else </b></p><p><b> begin</b></p><p><b> if(reset)</b></p><p><b>
62、; begin</b></p><p> time_left<=9;</p><p> time_less_alarm<=0;</p><p> time_out<=0;</p><p> temp_count<=0;</p><p><b> end</
63、b></p><p><b> else</b></p><p><b> begin</b></p><p> if(time_left==3)//當(dāng)?shù)褂嫊r剩3s時?崾臼???剩余不多</p><p><b> begin</b></p><
64、p> time_less_alarm<=1;</p><p><b> end</b></p><p> if(time_left==0)//當(dāng)?shù)褂嫊r完了后,發(fā)出信號</p><p><b> begin</b></p><p> time_out<=1;</p&g
65、t;<p><b> end</b></p><p> if(flag_pressed)//已搶答,則終止倒計時,并置為初值</p><p><b> begin</b></p><p> time_left<=9;</p><p><b> end</
66、b></p><p> else//還未搶答,進(jìn)行倒計時</p><p><b> begin</b></p><p> if(temp_count==1023)</p><p><b> begin</b></p><p> temp_count<=0
67、;</p><p> if(time_left>1)</p><p><b> begin</b></p><p> time_left<=time_left-1;</p><p> if(time_left==4)</p><p><b> begin</b
68、></p><p> time_less_alarm<=1;</p><p><b> end</b></p><p><b> end</b></p><p><b> else</b></p><p><b> beg
69、in</b></p><p> time_out<=1;</p><p> time_left<=0;</p><p><b> end</b></p><p><b> end</b></p><p><b> else</
70、b></p><p><b> begin</b></p><p> temp_count<=temp_count+1;</p><p><b> end</b></p><p><b> end</b></p><p><b&
71、gt; end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> sound_alarm.v</p><p> m
72、odule sound_alarm(reset,sound_en,cp1024hz,time_less_alarm,alarm);//提示聲,包括時間少于3秒后的讀秒提示聲,搶答按鍵按下提示聲以及時間完了的提示聲</p><p> input reset,sound_en,cp1024hz;//重新開始新的搶答信號,發(fā)聲信號,時鐘</p><p> input time_less_al
73、arm;//時間少于3s時的信號</p><p> output alarm;//所有的提示聲信號疊加,作為喇叭的驅(qū)動信號</p><p> reg [9:0] temp_count=0;</p><p><b> reg temp;</b></p><p> //reg alarm_time;</p
74、><p> always @(posedge cp1024hz)//(包括倒計時完,已搶答兩種情況的聲音提示)</p><p><b> begin</b></p><p> if(reset)//對中間變量進(jìn)行初始化</p><p><b> begin</b></p><
75、p><b> temp<=1;</b></p><p> temp_count<=0;</p><p><b> end</b></p><p> if(sound_en==1)</p><p><b> begin</b></p>&
76、lt;p> if(temp_count==1023)//sound_en==1時,響1s鐘提示</p><p><b> begin</b></p><p><b> temp<=0;</b></p><p><b> end</b></p><p><
77、;b> else </b></p><p><b> begin</b></p><p> temp_count<=temp_count+1;</p><p><b> end</b></p><p><b> end</b></p&g
78、t;<p><b> end</b></p><p> wire alarm_time;</p><p> assign alarm_time=temp & sound_en;</p><p> reg[9:0] temp1;</p><p> reg time_left_alarm;&l
79、t;/p><p> always @(posedge cp1024hz)//時間到三秒之后時提示聲響0.5s</p><p><b> begin</b></p><p> if(reset)//對中間變量進(jìn)行初始化</p><p><b> begin</b></p><
80、;p><b> temp1<=1;</b></p><p> time_left_alarm<=0;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b&g
81、t;</p><p> if(time_less_alarm==0)</p><p><b> begin</b></p><p><b> temp1<=0;</b></p><p> time_left_alarm<=0;</p><p><b&
82、gt; end</b></p><p><b> else</b></p><p> begin//時間少于3s時 提示</p><p> if(temp1<=512)</p><p><b> begin</b></p><p> temp
83、1<=temp1+1;</p><p> time_left_alarm<=1;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p>
84、time_left_alarm<=0;</p><p><b> end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> end</b></p><p&
85、gt; assign alarm=(time_left_alarm|alarm_time)&cp1024hz;</p><p><b> endmodule</b></p><p><b> control.v</b></p><p> module control(cp1024hz,started,res
86、et,k1,k2,k3,k4,k5,k6,</p><p> zero1,zero2,zero3,zero4,zero5,zero6,time_out,</p><p> mode,flag_pressed,sound_en,latch_en);//yesd</p><p> input cp1024hz,started,reset;</p>&
87、lt;p> input k1,k2,k3,k4,k5,k6;//搶答的6個按鍵,由cp1024hz掃描是否有按鍵</p><p> input zero1,zero2,zero3,zero4,zero5,zero6;//6個用?的分?jǐn)?shù)是否為0,并將分?jǐn)?shù)為0的淘汰</p><p> input time_out;//倒計時已完</p><p> outp
88、ut flag_pressed,sound_en,latch_en,mode;//是否已按鍵;聲音控制;模式控制;輸出模式</p><p> reg flag_pressed,sound_en,latch_en;</p><p> reg[3:0] mode;</p><p> always @(posedge cp1024hz)</p><
89、;p><b> begin</b></p><p> if(!started)//當(dāng)started=0時,對系統(tǒng)進(jìn)行初始化,同時將mode置0;</p><p><b> begin</b></p><p><b> mode<=0;</b></p><p>
90、; flag_pressed<=1;//利用設(shè)置這個將k1~k6屏蔽</p><p> sound_en<=0;</p><p> latch_en<=0;</p><p><b> end</b></p><p><b> else</b></p>&l
91、t;p><b> begin</b></p><p> if(reset)//started=1已開始,reset=1新一輪搶答</p><p><b> begin</b></p><p> flag_pressed<=0;</p><p> sound_en<
92、=0;</p><p> latch_en<=0;</p><p> mode<=7; //mode置為搶答模式</p><p><b> end</b></p><p><b> else</b></p><p><b> begi
93、n</b></p><p> if(time_out)</p><p><b> begin</b></p><p> sound_en<=1;//時間完了之后,響聲提示</p><p><b> end</b></p><p><b>
94、 else</b></p><p><b> begin</b></p><p> if(!flag_pressed && k1 && !zero1)//當(dāng)started=1時,按下key1</p><p><b> begin</b></p><p&g
95、t; flag_pressed<=1;</p><p> sound_en<=1;</p><p> latch_en<=1;//按鍵之后,產(chǎn)生相應(yīng)電平</p><p><b> mode<=1;</b></p><p><b> end</b></p&g
96、t;<p> else if(started && !flag_pressed && k2 && !zero2)</p><p><b> begin</b></p><p> flag_pressed<=1;</p><p> sound_en<=1;</
97、p><p> latch_en<=1;//按鍵之后,產(chǎn)生相應(yīng)電平</p><p><b> mode<=2;</b></p><p><b> end</b></p><p> else if(!flag_pressed && k3 && !zer
98、o3)</p><p><b> begin</b></p><p> flag_pressed<=1;</p><p> sound_en<=1;</p><p> latch_en<=1;//按鍵之后,產(chǎn)生相應(yīng)電平</p><p><b> mode&
99、lt;=3;</b></p><p><b> end</b></p><p> else if(!flag_pressed && k4 && !zero4)</p><p><b> begin</b></p><p> flag_pressed
100、<=1;</p><p> sound_en<=1;</p><p> latch_en<=1;//按鍵之后,產(chǎn)生相應(yīng)電平</p><p><b> mode<=4;</b></p><p><b> end</b></p><p>
101、else if(!flag_pressed && k5 && !zero5)</p><p><b> begin</b></p><p> flag_pressed<=1;</p><p> sound_en<=1;</p><p> latch_en<=1;
102、//按鍵之后,產(chǎn)生相應(yīng)電平</p><p><b> mode<=5;</b></p><p><b> end</b></p><p> else if(!flag_pressed && k6 && !zero6)</p><p><b>
103、 begin</b></p><p> flag_pressed<=1;</p><p> sound_en<=1;</p><p> latch_en<=1;//按鍵之后,產(chǎn)生相應(yīng)電平</p><p><b> mode<=6;</b></p><p&
104、gt;<b> end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> end</b></p>
105、<p><b> endmodule</b></p><p> score_count.v</p><p> module score_count(cp1024hz,started,reset,mode,time_out,right_key,wrong_key,setted_score,</p><p> score1,sc
106、ore2,score3,score4,score5,score6,</p><p> zero1,zero2,zero3,zero4,zero5,zero6);//yesd</p><p> input cp1024hz,started,reset;</p><p> input time_out;//時間完了之后卻沒有是搶答</p><p
107、> input right_key,wrong_key;//每次搶答之后主持人用于判斷搶答者回答是否正確,從而設(shè)置分?jǐn)?shù)</p><p> input[3:0] mode;//從control的mode輸出引進(jìn)</p><p> input[3:0] setted_score;//mode=0時設(shè)置的廚師分?jǐn)?shù)</p><p> output score1
108、,score2,score3,score4,score5,score6;//各玩家分?jǐn)?shù)</p><p> output zero1,zero2,zero3,zero4,zero5,zero6;//玩家分?jǐn)?shù)是否為0</p><p> reg zero1,zero2,zero3,zero4,zero5,zero6;</p><p> reg [3:0]score1
109、,score2,score3,score4,score5,score6;</p><p> reg right1,wrong1;</p><p> always @(posedge cp1024hz)</p><p><b> begin</b></p><p> right1<=right_key;<
110、;/p><p> wrong1<=wrong_key;</p><p><b> end</b></p><p> wire right2,wrong2;//將判斷回答對錯的信號變換,消除抖動以及便于掃描識別</p><p> assign right2=right1&(~right_key);<
111、/p><p> assign wrong2=wrong1&(~wrong_key);</p><p> reg temp_flag;//用于消除多次判斷回答對錯,防止扣分錯誤</p><p> always @(posedge cp1024hz)</p><p><b> begin</b></p>
112、;<p> if(!started)//設(shè)置分?jǐn)?shù)時,對各個玩家分?jǐn)?shù)初始化</p><p><b> begin</b></p><p> score1<=setted_score;</p><p> score2<=setted_score;</p><p> score3<=
113、setted_score;</p><p> score4<=setted_score;</p><p> score5<=setted_score;</p><p> score6<=setted_score;</p><p><b> zero1<=0;</b></p>
114、<p><b> zero2<=0;</b></p><p><b> zero3<=0;</b></p><p><b> zero4<=0;</b></p><p><b> zero5<=0;</b></p><
115、p><b> zero6<=0;</b></p><p> temp_flag<=0;</p><p><b> end</b></p><p> else//started=1,正常工作模式</p><p><b> begin</b>&
116、lt;/p><p> if(reset)//reset之后初始化參數(shù)</p><p><b> begin</b></p><p> temp_flag<=0;</p><p><b> end</b></p><p> else//進(jìn)行回答判斷&
117、lt;/p><p><b> begin</b></p><p> if(!time_out && !temp_flag && wrong2)//回答錯誤,減1分</p><p><b> begin</b></p><p> temp_flag<=1;//
118、標(biāo)志位置1,防止判斷回答正誤的按鍵多次被按以及抖動</p><p> case(mode)</p><p> 4'b0001 : //如果搶答為玩家1</p><p><b> begin</b></p><p> if(score1[3:0]<=1)</p><p><
119、;b> begin</b></p><p> score1[3:0]<=0;</p><p> zero1<=1;//玩家1的分?jǐn)?shù)減少到0,淘汰</p><p><b> end</b></p><p><b> else</b></p>&
120、lt;p><b> begin</b></p><p> score1[3:0]<=score1[3:0]-1;</p><p><b> end</b></p><p><b> end</b></p><p> 4'b0010 : //如果搶
121、答為玩家2</p><p><b> begin</b></p><p> if(score2[3:0]<=1)</p><p><b> begin</b></p><p> score2[3:0]<=0;</p><p> zero2<=1;
122、//玩家1的分?jǐn)?shù)減少到0,淘汰</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> score2[3:0]<=score2[3:0]-1;</p>
123、<p><b> end</b></p><p><b> end</b></p><p> 4'b0011 : //如果搶答為玩家3</p><p><b> begin</b></p><p> if(score3[3:0]<=1)<
124、/p><p><b> begin</b></p><p> score3[3:0]<=0;</p><p> zero3<=1;//玩家1的分?jǐn)?shù)減少到0,淘汰</p><p><b> end</b></p><p><b> else<
125、;/b></p><p><b> begin</b></p><p> score3[3:0]<=score3[3:0]-1;</p><p><b> end</b></p><p><b> end</b></p><p>
126、 4'b0100 : //如果搶答為??家4</p><p><b> begin</b></p><p> if(score4[3:0]<=1)</p><p><b> begin</b></p><p> score4[3:0]<=0;</p><
127、;p> zero4<=1;//玩家1的分?jǐn)?shù)減少到0,淘汰</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> score4[3:0]<=score4
128、[3:0]-1;</p><p><b> end</b></p><p><b> end</b></p><p> 4'b0101 : //如果搶答為玩家5</p><p><b> begin</b></p><p> if(s
129、core5[3:0]<=1)</p><p><b> begin</b></p><p> score5[3:0]<=0;</p><p> zero5<=1;//玩家1的分?jǐn)?shù)減少到0,淘汰</p><p><b> end</b></p><p&
130、gt;<b> else</b></p><p><b> begin</b></p><p> score5[3:0]<=score5[3:0]-1;</p><p><b> end</b></p><p><b> end</b>&
131、lt;/p><p> 4'b0110 : //如果搶答為玩家6</p><p><b> begin</b></p><p> if(score6[3:0]<=1)</p><p><b> begin</b></p><p> score6[3:0]&l
132、t;=0;</p><p> zero6<=1;//玩家1的分?jǐn)?shù)減少到0,淘汰</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> sc
133、ore6[3:0]<=score6[3:0]-1;</p><p><b> end</b></p><p><b> end</b></p><p> default : ;</p><p><b> endcase</b></p><p&
134、gt;<b> end</b></p><p> if(!time_out && !temp_flag && right2)//回答正確,相應(yīng)加1分</p><p><b> begin</b></p><p> temp_flag<=1;//和前述意義一樣</p>
135、<p> case(mode)</p><p> 4'b0001 : //玩家1</p><p><b> begin</b></p><p> if(score1[3:0]==9)</p><p><b> begin</b></p><p>
136、; score1[3:0]<=9;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> score1[3:0]<=score1[3:0]+1;</p&g
137、t;<p><b> end</b></p><p><b> end</b></p><p> 4'b0010 : //玩家2</p><p><b> begin</b></p><p> if(score2[3:0]==9)</p&g
138、t;<p><b> begin</b></p><p> score2[3:0]<=9;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b>&l
139、t;/p><p> score2[3:0]<=score2[3:0]+1;</p><p><b> end</b></p><p><b> end</b></p><p> 4'b0011 : //玩家3</p><p><b> begin
140、</b></p><p> if(score3[3:0]==9)</p><p><b> begin</b></p><p> score3[3:0]<=9;</p><p><b> end</b></p><p><b> else
141、</b></p><p><b> begin</b></p><p> score3[3:0]<=score3[3:0]+1;</p><p><b> end</b></p><p><b> end</b></p><p>
142、; 4'b0100 : //玩家4</p><p><b> begin</b></p><p> if(score4[3:0]==9)</p><p><b> begin</b></p><p> score4[3:0]<=9;</p><p>&
143、lt;b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> score4[3:0]<=score4[3:0]+1;</p><p><b> end</b></p
144、><p><b> end</b></p><p> 4'b0101 : //玩家5</p><p><b> begin</b></p><p> if(score5[3:0]==9)</p><p><b> begin</b><
145、/p><p> score5[3:0]<=9;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> score5[3:0]<=score5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字電子線路課程設(shè)計---數(shù)字搶答器
- 數(shù)字電子線路課程八路搶答器設(shè)計
- 電子線路cad課程設(shè)計
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路cad課程設(shè)計報告
- 電子線路課程設(shè)計
- 電子線路cad課程設(shè)計報告 (2)
- 高頻電子線路課程設(shè)計
- 高頻電子線路課程設(shè)計
- 通信電子線路課程設(shè)計
- 高頻電子線路課程設(shè)計
- 通信電子線路課程設(shè)計
- 高頻電子線路課程設(shè)計
- 電子線路cad課程設(shè)計--數(shù)字鐘
評論
0/150
提交評論