電子線路cad課程設(shè)計 -搶答器_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論