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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  電子線路 CAD 課程設(shè)計(jì)論文</p><p>  搶答器(verilog+Ise)</p><p><b>  概述</b></p><p>  在競(jìng)賽、文體娛樂(lè)活動(dòng)(搶答活動(dòng))中,能準(zhǔn)確、公正、直觀地判斷出搶答者的機(jī)器。</p><p>  通過(guò)搶答者的指示燈顯示、數(shù)碼顯示和警示顯示等手段指示出

2、第一搶答者。 </p><p>  一般搶答器由單片機(jī)以及外圍電路組成,分為八路十路等不同,八路和十路的差別是,搶答器背面的 接口有幾組,和外形沒(méi)有關(guān)系。</p><p><b>  課題要求</b></p><p>  設(shè)計(jì)一個(gè)可容納6組參賽的數(shù)字式搶答器,每組設(shè)一個(gè)按鈕,供搶答使用。</p><p>  搶答器具有第

3、一信號(hào)鑒別與鎖存功能,除第一個(gè)搶答者外,其余不起作用。</p><p>  設(shè)置一個(gè)主持人“復(fù)位”按鈕。</p><p>  主持人復(fù)位后,開(kāi)始搶答,第一信號(hào)鑒別與鎖存電路得到信號(hào)后,有指示器顯示搶答組別,揚(yáng)聲器發(fā)出2~3秒的音響。</p><p>  設(shè)置一個(gè)記分電路,每組開(kāi)始預(yù)置100 分,由主持人記分,答對(duì)一次加10分,答錯(cuò)一次減10分。</p>

4、<p><b>  其它創(chuàng)新功能。</b></p><p><b>  測(cè)試工具平臺(tái)</b></p><p>  編寫(xiě)語(yǔ)言:Verilog</p><p>  編譯調(diào)試工具:Xilinx ISE 9.2i</p><p>  運(yùn)行板子:Xilinx Basys_1.1</p>

5、<p><b>  實(shí)現(xiàn)功能</b></p><p><b>  基本功能</b></p><p>  搶答器可以容納6組參賽的數(shù)字式搶答器,每組都設(shè)置由一個(gè)搶答按鈕,供參賽者搶答。</p><p>  搶答器具有第一信號(hào)鑒別與鎖存功能,除第一個(gè)搶答者外,其余不起作用。</p><p>

6、;  設(shè)置一個(gè)主持人“復(fù)位”按鈕,每次搶答之后按此按鈕之后才能進(jìn)行下一輪搶答。</p><p>  主持人復(fù)位后,開(kāi)始搶答,第一信號(hào)鑒別與鎖存電路得到信號(hào)后,有指示器顯示搶答組別,揚(yáng)聲器發(fā)出2~3秒的音響。</p><p>  設(shè)置一個(gè)記分電路,由主持人記分,答對(duì)一次加1分,答錯(cuò)一次減1分。</p><p><b>  創(chuàng)新功能</b><

7、/p><p>  初始分?jǐn)?shù)可以在每次搶答比賽開(kāi)始前進(jìn)行設(shè)置,由于考慮到現(xiàn)實(shí)的方便性,設(shè)置范圍為1至9分</p><p>  當(dāng)某位參賽人員的積分減少至為0分時(shí),則該人員被徹底淘汰,在下一輪搶答中搶答按鈕無(wú)效。</p><p>  在每次才賽人員搶答完之后,由主持人或相關(guān)人員通過(guò)兩個(gè)按鈕來(lái)判斷答題是否正確,以確定其加分還是減分,程序會(huì)檢測(cè)該按鈕并且不允許進(jìn)行第二次被按下,

8、以免造成分?jǐn)?shù)的計(jì)數(shù)錯(cuò)誤。</p><p>  當(dāng)時(shí)間到最后3秒是會(huì)發(fā)出滴滴滴的提示音,在參賽人員按下?lián)尨鸢粹o也會(huì)發(fā)出長(zhǎng)1s的提示音。</p><p>  程序設(shè)置了一個(gè)搶答器的倒計(jì)時(shí),每輪搶答為10s倒計(jì)時(shí),并且時(shí)間倒計(jì)為0之后發(fā)出提示音,強(qiáng)大之后,時(shí)間重新復(fù)位,便于下一輪計(jì)時(shí)。</p><p>  在支持人判斷搶答者答題正誤之前或之后,可以通過(guò)兩個(gè)按鈕切換當(dāng)前狀態(tài)

9、,從而可以查看所有選手的積分。</p><p>  使用的狀態(tài)機(jī)思想,設(shè)置了8種狀態(tài):</p><p><b>  設(shè)計(jì)思路</b></p><p><b>  總體電路</b></p><p>  Display原理圖</p><p><b>  總原理圖<

10、/b></p><p>  該電路是在Ise中將所寫(xiě)的各個(gè)模塊用導(dǎo)線連接之后的效果,從這個(gè)圖可以很清晰的看到程序的結(jié)構(gòu)和思路。</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p>  在對(duì)問(wèn)題進(jìn)行分析之后將該程序分成一下模塊,如表所示:</p><p><b>  模塊仿真</b>&

11、lt;/p><p>  restart模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:可以看到,cp1024hz的時(shí)鐘每個(gè)上升沿檢測(cè)start_clk信號(hào)下降沿,并且在其每個(gè)下降沿對(duì)start信號(hào)翻轉(zhuǎn),而搶答器在start=0是表示設(shè)置初始分?jǐn)?shù),start=1是表示搶答正常進(jìn)行,所以利用start_clk可以控制

12、搶答器重新開(kāi)始。</p><p>  Mode_latch_change模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:可以看出,該模塊在start=1是開(kāi)始工作,當(dāng)flag_pressed(表示選手搶答)信號(hào)置為1時(shí),模塊鎖存當(dāng)前的狀態(tài)mode_in,即相應(yīng)的強(qiáng)大選手的編號(hào),在flag_pressed=1的

13、過(guò)程中,可以通過(guò)按up_clk和down_clk兩個(gè)按鈕設(shè)置mode_out,由此輸入到display,從而顯示各個(gè)選手的分?jǐn)?shù)信息。模塊中提供1024hz的時(shí)鐘對(duì)up_clk和down_clk掃描,一旦有脈沖,則在下降沿做相應(yīng)動(dòng)作,可以消除按鍵的抖動(dòng)影響。</p><p>  Set_score模塊仿真</p><p><b>  波形如下:</b></p>

14、;<p>  分析:可以看出該模塊在start=0是工作,通過(guò)1024hz時(shí)鐘對(duì)兩個(gè)按鍵掃描,對(duì)初始分?jǐn)?shù)進(jìn)行加計(jì)數(shù)和減計(jì)數(shù),即一個(gè)0~9的計(jì)數(shù)器,同時(shí)消除按鍵抖動(dòng)的影響。</p><p>  Time_count模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:可以看出該模塊在start=1是正常

15、工作,當(dāng)flag_pressed信號(hào)為0時(shí),時(shí)間從9s開(kāi)始倒計(jì)時(shí),當(dāng)有選手搶答,flag_pressed有0變?yōu)?時(shí),時(shí)間停止計(jì)數(shù),在支持人按下reset按鍵之后,計(jì)數(shù)值恢復(fù)為9s,并開(kāi)始倒計(jì)數(shù),當(dāng)時(shí)間倒計(jì)至3時(shí),time_less_alarm信號(hào)由0變成1,當(dāng)時(shí)間倒計(jì)至0時(shí),time_out信號(hào)由0變成1,這兩個(gè)信號(hào)都送至sound_alarm并經(jīng)過(guò)變換之后驅(qū)動(dòng)喇叭得到提示音。</p><p>  Score_

16、count模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:有圖可以看出,該模塊在start=1時(shí)正常工作,利用1024hz的時(shí)鐘對(duì)right_key和wrong_key掃描,消除抖動(dòng)之后,做相應(yīng)的分?jǐn)?shù)設(shè)置操作,給誰(shuí)加減分通過(guò)當(dāng)前的mode判斷,并且當(dāng)某選手分?jǐn)?shù)減至0分時(shí),該選手的一個(gè)標(biāo)志位zero被置為1,表示該選手已被淘汰,下一輪

17、搶答將沒(méi)有資格搶答,相應(yīng)的按鍵也將無(wú)效。</p><p>  Display模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:該模塊在start=1時(shí)工作,用1024hz信號(hào)掃描mode變化,并以此作為依據(jù)輸出相應(yīng)的信號(hào)到數(shù)碼管中顯示,這種對(duì)應(yīng)關(guān)系在前面的表格中已經(jīng)詳細(xì)說(shuō)明,不再贅述。</p>&

18、lt;p>  Sound_alarm模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:該模塊在start=1時(shí)正常工作,輸入有sound_en信號(hào)time_less_alarm,sound_en=1表示有選手搶答或者時(shí)間倒計(jì)至0,此時(shí)alarm輸出1s鐘的1024hz信號(hào),驅(qū)動(dòng)喇叭得到提示音;time_less_alarm=1信

19、號(hào)表示時(shí)間只剩下3s,此時(shí)alarm輸出0.5s鐘的1024hz信號(hào),驅(qū)動(dòng)喇叭得到提示音。</p><p>  Control模塊仿真</p><p><b>  波形如下:</b></p><p>  分析:該模塊在start=1時(shí)正常工作,當(dāng)相應(yīng)的key按鍵按下時(shí),mode變成相應(yīng)選手的編號(hào)狀態(tài),并且flag_pressed變成1,此時(shí)so

20、und_en被置為1,驅(qū)動(dòng)喇叭得到1s的1khz的提示音。并且只有當(dāng)支持人按下reset鍵之后才恢復(fù)至0,;當(dāng)time_out信號(hào)為1時(shí),表示時(shí)間倒計(jì)至0,此時(shí)sound_en被置為1,驅(qū)動(dòng)喇叭得到提示音。</p><p><b>  實(shí)驗(yàn)感想</b></p><p>  通過(guò)這次課程設(shè)計(jì),加強(qiáng)了我們動(dòng)手、思考和解決問(wèn)題的能力。在設(shè)計(jì)過(guò)程中,經(jīng)常會(huì)遇到這樣那樣的情況,

21、就是心里想老著這樣的接法可以行得通,但實(shí)際接上電路,總是實(shí)現(xiàn)不了,因此耗費(fèi)在這上面的時(shí)間用去很多。</p><p>  做課程設(shè)計(jì)同時(shí)也是對(duì)課本知識(shí)的鞏固和加強(qiáng),由于課本上的知識(shí)太多,平時(shí)課間的學(xué)習(xí)并不能很好的理解和運(yùn)用各個(gè)元件的功能,而且考試內(nèi)容有限,所以在這次課程設(shè)計(jì)過(guò)程中,我們了解了很多元件的功能,并且對(duì)于其在電路中的使用有了更多的認(rèn)識(shí)。</p><p>  平時(shí)看課本時(shí),有時(shí)問(wèn)題老

22、是弄不懂,做完課程設(shè)計(jì),那些問(wèn)題就迎刃而解了。而且還可以記住很多東西。比如一些芯片的功能,平時(shí)看課本,這次看了,下次就忘了,通過(guò)動(dòng)手實(shí)踐讓我們對(duì)各個(gè)元件映象深刻。認(rèn)識(shí)來(lái)源于實(shí)踐,實(shí)踐是認(rèn)識(shí)的動(dòng)力和最終目的,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。所以這個(gè)課程設(shè)計(jì)對(duì)我的作用是非常大的。</p><p>  通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論

23、中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。</p><p>  此次課程設(shè)計(jì),學(xué)到了很多課內(nèi)學(xué)不到的東西,比如獨(dú)立思考解決問(wèn)題,出現(xiàn)差錯(cuò)的隨機(jī)應(yīng)變,和與人合作共同提高,都受益非淺,今后的制作應(yīng)該更輕松,自己也都能扛的起并高質(zhì)量的完成項(xiàng)目。</p><p>  最后衷心感謝老師的悉心授課和同學(xué)門(mén)的熱心幫助!</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開(kāi)始工作</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信號(hào),防止抖動(dòng)以及便于cp1024hz掃描</p><p>  always @(posedge cp1024hz)//start正常工作搶??_clk started翻轉(zhuǎn),為0時(shí)設(shè)置分?jǐn)?shù),為1時(shí)</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;//時(shí)鐘信號(hào),搶答開(kāi)始信號(hào),搶答中已經(jīng)有按下鍵信號(hào)</p><p>  input latch

33、_clk;//鎖存mode的脈沖信號(hào)</p><p>  input up_clk,down_clk;//設(shè)置mode的兩個(gè)按鍵,上調(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;//對(duì)輸入的信號(hào)??變化?

36、??閿赾p1024hz的脈沖捕獲,并且可以防止設(shè)置mode的兩個(gè)按鍵的抖動(dòng)</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//正常搶答過(guò)程</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)//查看各個(gè)分?jǐn)?shù),mode加計(jì)數(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)//查看各個(gè)分?jǐn)?shù),mode減計(jì)數(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ù)的計(jì)數(shù)cp,并防止抖動(dòng)</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ù)的模式,開(kāi)?忌柚梅質(zhì)?begin</p><p>  if(cp_up_pos&&a

52、mp;(!cp_down_pos)) //設(shè)置??數(shù)加計(jì)數(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ù)減計(jì)數(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;//倒計(jì)時(shí)到3s之

59、后發(fā)出提醒信號(hào)</p><p>  output time_out;//倒計(jì)時(shí)完了之后發(fā)出信號(hào)</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ù)褂?jì)時(shí)剩3s時(shí)?崾臼???剩余不多</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ù)褂?jì)時(shí)完了后,發(fā)出信號(hào)</p><p><b>  begin</b></p><p>  time_out<=1;</p&g

65、t;<p><b>  end</b></p><p>  if(flag_pressed)//已搶答,則終止倒計(jì)時(shí),并置為初值</p><p><b>  begin</b></p><p>  time_left<=9;</p><p><b>  end</

66、b></p><p>  else//還未搶答,進(jìn)行倒計(jì)時(shí)</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);//提示聲,包括時(shí)間少于3秒后的讀秒提示聲,搶答按鍵按下提示聲以及時(shí)間完了的提示聲</p><p>  input reset,sound_en,cp1024hz;//重新開(kāi)始新的搶答信號(hào),發(fā)聲信號(hào),時(shí)鐘</p><p>  input time_less_al

73、arm;//時(shí)間少于3s時(shí)的信號(hào)</p><p>  output alarm;//所有的提示聲信號(hào)疊加,作為喇叭的驅(qū)動(dòng)信號(hào)</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)//(包括倒計(jì)時(shí)完,已搶答兩種情況的聲音提示)</p><p><b>  begin</b></p><p>  if(reset)//對(duì)中間變量進(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時(shí),響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)//時(shí)間到三秒之后時(shí)提示聲響0.5s</p><p><b>  begin</b></p><p>  if(reset)//對(duì)中間變量進(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//時(shí)間少于3s時(shí) 提示</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個(gè)按鍵,由cp1024hz掃描是否有按鍵</p><p>  input zero1,zero2,zero3,zero4,zero5,zero6;//6個(gè)用?的分?jǐn)?shù)是否為0,并將分?jǐn)?shù)為0的淘汰</p><p>  input time_out;//倒計(jì)時(shí)已完</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時(shí),對(duì)系統(tǒng)進(jìn)行初始化,同時(shí)將mode置0;</p><p><b>  begin</b></p><p><b>  mode<=0;</b></p><p>

90、;  flag_pressed<=1;//利用設(shè)置這個(gè)將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已開(kāi)始,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;//時(shí)間完了之后,響聲提示</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時(shí),按下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;//時(shí)間完了之后卻沒(méi)有是搶答</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í)設(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;//將判斷回答對(duì)錯(cuò)的信號(hào)變換,消除抖動(dòng)以及便于掃描識(shí)別</p><p>  assign right2=right1&(~right_key);<

111、/p><p>  assign wrong2=wrong1&(~wrong_key);</p><p>  reg temp_flag;//用于消除多次判斷回答對(duì)錯(cuò),防止扣分錯(cuò)誤</p><p>  always @(posedge cp1024hz)</p><p><b>  begin</b></p>

112、;<p>  if(!started)//設(shè)置分?jǐn)?shù)時(shí),對(duì)各個(gè)玩家分?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)//回答錯(cuò)誤,減1分</p><p><b>  begin</b></p><p>  temp_flag<=1;//

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

評(píng)論

0/150

提交評(píng)論