verilog HDL搶答器(兩個程序)_第1頁
verilog HDL搶答器(兩個程序)_第2頁
verilog HDL搶答器(兩個程序)_第3頁
verilog HDL搶答器(兩個程序)_第4頁
verilog HDL搶答器(兩個程序)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、設(shè)計任務(wù)智力競賽搶答器Verilog HDL要求有6位參賽者進行搶答,有六個搶答信號進行搶答。當有搶答選手按下?lián)尨疰I后系統(tǒng)能夠快速準確的判斷是那一組選手按下了搶答信號,由于系統(tǒng)比較小,速度比較快一般不會有同時按下的可能,所以只有六種狀態(tài),然后系統(tǒng)能夠根據(jù)這六種狀態(tài)進行適時的顯示和提示。當有選手按下以后就對搶答信號進行鎖存,其他選手的輸入無效。然后就是對搶答進行時間限制了,根據(jù)設(shè)定的時間進行倒計時,當?shù)褂嫊r完成還沒有人搶答的時候系統(tǒng)發(fā)出警報聲音提示時間已經(jīng)到了。當有選手在主持人未按下?lián)尨疰I搶答時視為超前搶答,系統(tǒng)顯示該選手號,同時蜂鳴器響,該搶答無效。還有清除復(fù)位鍵,搶答完成以后按復(fù)位鍵即可

2、清除已有的狀態(tài)。通過Verilog HDL程序代碼實現(xiàn)系統(tǒng)的各個功能。二、設(shè)計目的與要求目的:理論聯(lián)系實際,鞏固和運用所學(xué)課程,提高分析、解決計算機技術(shù)實際問題的獨立工作能力,培養(yǎng)學(xué)生正確的設(shè)計思想,嚴肅認真、實事求是的科學(xué)態(tài)度和勇于探索的創(chuàng)新精神。通過對一個智力搶答器的設(shè)計,進一步加深對計算機原理以及數(shù)字電路應(yīng)用技術(shù)方面的了解與認識,進一步熟悉數(shù)字電路系統(tǒng)設(shè)計、制作與調(diào)試的方法和步驟,通過Verilog 程序的編寫,進一步熟悉Verilog HDL 的語法知識;規(guī)范化訓(xùn)練學(xué)生撰寫技術(shù)研究報告,提高書面表達能力。要求:Ø 掌握FPGA設(shè)計系統(tǒng)的一般方法。Ø 熟練掌握使用mo

3、delsim軟件設(shè)計較復(fù)雜的數(shù)字邏輯電路。Ø 培養(yǎng)學(xué)生獨立分析問題和解決實際問題的能力。三、 課程設(shè)計的內(nèi)容設(shè)計一搶答器,要求如下:(1)搶答臺數(shù)為6;(2)具有搶答開始后20s倒計時,20秒倒計時后6人搶答顯示超時,并報警;(3)能顯示超前搶答臺號并顯示犯規(guī)報警;(4)系統(tǒng)復(fù)位后進入搶答狀態(tài),當有一路搶答按鍵按下,該路搶答信號將其余各路搶答信號封鎖,同時鈴聲響起,直至該路按鍵松開,顯示牌顯示該路搶答臺號。四、系統(tǒng)設(shè)計方案根據(jù)系統(tǒng)設(shè)計要求可知,系統(tǒng)的輸入信號有:主持人按鈕inputEn,各選手的搶答按鈕分別是inputL1、inputL2、inputL3、inputL4,inputL

4、5,inputL6,主持人和選手搶答按鈕都是低電平有效,系統(tǒng)復(fù)位信號clr(高電平有效),系統(tǒng)時鐘信號clk,系統(tǒng)的輸出信號有:六個人搶答成功與否的指示燈控制信號輸出口Led2,犯規(guī)搶答時報警器Buzzer(低電平有效)。本系統(tǒng)應(yīng)具有的功能有:能夠準確的判斷出是哪位搶答者,當主持人沒按搶答時,有人搶答了則蜂鳴器報警,并顯示該選手號,當主持人按了搶答鍵時有人搶答了,同時封鎖搶答信號,其他選手搶答無效,不顯示該選手號。五、仿真過程與仿真結(jié)果仿真過程:使用ModelSim進行功能測試,首先在里面進行相應(yīng)的設(shè)置,在工程文件夾下面會新建一個modelsim的文件夾,然后編寫實現(xiàn)功能的程序和測試文件,最后

5、保存編譯執(zhí)行就可以進行功能仿真了。仿真結(jié)果 : 結(jié)果分析與討論:可以看到0時刻系統(tǒng)復(fù)位狀態(tài),2s時2號超前搶答(inputEn為高電平,inputL2為低電平),系統(tǒng)顯示2蜂鳴器并犯規(guī)報警(Buzzer為低電平),8s時系統(tǒng)復(fù)位狀態(tài),12s時4號選手先搶答成功(inputL4為低電平)顯示4,14s時3號選手后搶答,不顯示3,20s時系統(tǒng)復(fù)位。六、總結(jié) 通過本次合成設(shè)計,我又一遍熟悉了Verilog HDL語言進行建模,并且通過實際操作學(xué)會了怎么使用Modelsim這個軟件來完成一個完整的課程設(shè)計。以及對基于FPGA的系統(tǒng)開發(fā)流程有了一個整體認識,我越來越認識到一點, 編程對項目實現(xiàn)有著至關(guān)重

6、要的, 我們在硬件開發(fā)的過程中更應(yīng)該重視編程, 將編程看作是完善開發(fā)的不可缺少的一部分。雖然題目簡單,但這也磨練了我的意志。第一次做的太復(fù)雜了,然后一次次修改,做成最簡單功能的。在一次次的反復(fù)設(shè)計、論證和測試中, 提高了邏輯分析能力、全面分析問題的能力以及發(fā)現(xiàn)問題、解決問題的能力。通過對各方面資料的收集, 我的知識面也進一步拓寬了。同時,我也發(fā)現(xiàn)了自己的不足, 像語言表達還比較差, 不能更清楚地表達自己的意思, 邏輯分析能力和編程能力有待提高,有些預(yù)先的想法都未能實現(xiàn)。在系統(tǒng)的結(jié)構(gòu)設(shè)計上也還有很長的路需要走,這是需要時間去積累的。在今后的學(xué)習(xí)中我還得加以改進。七、程序系統(tǒng)主要Verilog H

7、DL源程序:module QiangDaQi(clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led2,Buzzer); /一開始聲明有哪些端口input clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6;output 0:7Led2;/Led2顯示選手號output Buzzer;/低電平時蜂鳴器發(fā)出聲音reg EnFlat=1'b0;/EnFlat為高電平時開始搶答reg 0:2Led2=3'd0;reg Buzzer

8、=1'b1;always (posedge clk)/時鐘上升沿begin if(inputEn=1)/如果主持人沒按按鈕就有人搶答 begin if(inputL1=0) begin Led2=3'd1;Buzzer=1'b0;end if(inputL2=0) begin Led2=3'd2;Buzzer=1'b0;end if(inputL3=0) begin Led2=3'd3;Buzzer=1'b0;end if(inputL4=0) begin Led2=3'd4;Buzzer=1'b0;end if(inpu

9、tL5=0) begin Led2=3'd5;Buzzer=1'b0;end if(inputL6=0) begin Led2=3'd6;Buzzer=1'b0;end end if(inputEn=1'b0)/為低電平時表示主持人按下?lián)尨鸢粹o開始搶答 begin EnFlat=1'b1; if(EnFlat=1'b1) begin if(inputL1=1'b0)/一號選手搶答 begin Led2=3'd1; EnFlat=1'b0;/為低電平禁止其他選手搶答 Buzzer=1'b1; end else

10、/一開始沒加else發(fā)現(xiàn)仿真結(jié)果隨著輸入數(shù)據(jù)變化而變化 if(inputL2=1'b0)/二號選手搶答 begin Led2=3'd2; EnFlat=1'b0; Buzzer=1'b0; end else if(inputL3=1'b0)/三號選手搶答 begin Led2=3'd3; EnFlat=1'b0;/為低電平禁止其他選手搶答 Buzzer=1'b1; endelse if(inputL4=1'b0)/四號選手搶答 begin Led2=3'd4; EnFlat=1'b0;/為低電平禁止其他選手

11、搶答 Buzzer=1'b1; end else if(inputL5=1'b0)/五號選手搶答 begin Led2=3'd5; EnFlat=1'b0;/為低電平禁止其他選手搶答 Buzzer=1'b1; end else if(inputL6=1'b0)/六號選手搶答 begin Led2=3'd6; EnFlat=1'b0;/為低電平禁止其他選手搶答 Buzzer=1'b1; end end end if(clr)/按下clr鍵以后各組參數(shù)重置,整個比賽重新開始 begin EnFlat=1'b0; Led

12、2=3'd0;/為低電平時,選手前的燈點亮 Buzzer=1'b1;/為高電平不響 endendendmodule測試程序timescale 1s/1smodule qiangdaqi_test(); reg clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6;/輸入口 wire 0:7Led2;/Led2顯示選手號 wire Buzzer;/低電平時蜂鳴器發(fā)出聲音 QiangDaQi u1(clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,

13、inputL6,Led2,Buzzer); initial begin #0 clk=1;clr=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1; #2 inputL2=0;/二號選手超前搶答 #4 clr=1;inputL2=1;/復(fù)位 #2 clr=0; #4 inputEn=0;inputL4=0;/四號選手先搶答顯示4 #2 inputL3=0;/三號選手后搶答不顯示3 #4 clr=1;inputEn=1;inputL3=1;inputL4=1; #2 clr=0; end always

14、#1 clk=clk;endmodule程序二module QiangDaQi(clk,clr,add,stu,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led1,Led2,Led3,Buzzer); /一開始聲明有哪些端口input clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,add,stu;/輸入口output 0:5Led1;/對應(yīng)參賽選手前的燈output 0:7Led2,Led3;/Led2顯示選手號Led3顯示選手分數(shù)output

15、 Buzzer;/低電平時蜂鳴器發(fā)出聲音reg EnFlat=1'b1;/EnFlat為高電平時開始搶答reg BuClk=1'b0;/為高電平時進入蜂鳴器處理程序/reg add,stu;/add答題正確加一分stu答題錯誤減一分/reg clr=0;/重置鍵reg 0:5Led1=6'b111111;reg 0:2 answer=3'd0;reg0:3 score=4'd0,score1=4'd0,score2=4'd0;reg0:3 score3=4'd0,score4=4'd0,score5=4'd0,sc

16、ore6=4'd0;/各選手分數(shù)計算reg Buzzer=1;reg 0:4 daojishi=5'd20;/用于產(chǎn)生20s倒計時reg 0:7Led2=8'b11111111,Led3=8'b11111111;always (posedge clk)/時鐘上升沿begin if(inputEn=1)/如果主持人沒按按鈕就有人搶答 begin if(inputL1=0) begin Led1=6'b111110;answer=3'd1;BuClk=1'b1;end if(inputL2=0) begin Led2=6'b11110

17、1;answer=3'd2;BuClk=1'b1;end if(inputL3=0) begin Led2=6'b111011;answer=3'd3;BuClk=1'b1;end if(inputL4=0) begin Led2=6'b110111;answer=3'd4;BuClk=1'b1;end if(inputL5=0) begin Led2=6'b101111;answer=3'd5;BuClk=1'b1;end if(inputL6=0) begin Led2=6'b011111;an

18、swer=3'd6;BuClk=1'b1;end end if(inputEn=1'b0)/為低電平時表示主持人按下?lián)尨鸢粹o開始搶答beginLed1=6'b111111;/為低電平時,選手前的燈點亮BuClk=1'b0;Buzzer=1'b1;/為高電平不響end if(EnFlat=1'b1) begin begin if(inputL1=1'b0)/一號選手搶答 begin EnFlat=1'b0;/為低電平禁止其他選手搶答 answer=3'd1;/為高電平時轉(zhuǎn)到對應(yīng)選手加減分程序中去 BuClk=1

19、9;b1;/轉(zhuǎn)到蜂鳴器程序 end if(inputL2=1'b0)/二號選手搶答 beginEnFlat=1'b0;answer=3'd2;BuClk=1'b1; end if(inputL3=1'b0)/三號選手搶答 beginEnFlat=1'b0;answer=3'd3;BuClk=1'b1; end if(inputL4=1'b0)/四號選手搶答 beginEnFlat=1'b0;answer=3'd4;BuClk=1'b1; end if(inputL5=1'b0)/五號選手搶答

20、 beginEnFlat=1'b0;answer=3'd5;BuClk=1'b1; end if(inputL6=1'b0)/六號選手搶答 beginEnFlat=1'b0;answer=3'd6;BuClk=1'b1; end end begin if(daojishi!=5'd0)/用于1Hz信號 daojishi=daojishi-1; else/倒計時結(jié)束搶答器還沒按下則搶答停止且蜂鳴器響 begin daojishi=5'd20; EnFlat=1'b0; BuClk=1'b1; end end

21、begin if(BuClk=1'b1)/當蜂鳴器標志為1時 Buzzer=1'b0;/蜂鳴器發(fā)聲 end begin if(answer =3'd1)/第一組加減分 begin Led1=6'b111110;/點亮該選手前的LED燈 Led2=8'hf9;/選手號數(shù)碼管顯示1 if(add) score1=score1+1;/當主持人判定選手的回答正確時,按下add鍵進行加分操作 else if(stu|inputEn)&&(score1!=0) score1=score1-1;/當主持人判定選手的回答錯誤時,按下stu鍵進行加分操作

22、else score1=0; score=score1;/把第一組的分數(shù)賦值給分數(shù)寄存器 end if(answer =3'd2)/第二組加減分 begin Led1=6'b111101;Led2=8'ha4; if(add) score2=score2+1;/當主持人判定選手的回答正確時,按下add鍵進行加分操作 else if(stu|inputEn)&&(score2!=0) score2=score2-1;/當主持人判定選手的回答錯誤時,按下stu鍵進行加分操作 else score2=0; score=score2;/把第一組的分數(shù)賦值給分數(shù)寄

23、存器 end if(answer =3'd3)/第三組加減分 begin Led1=6'b111011;Led2=8'hb0; if(add) score3=score3+1;/當主持人判定選手的回答正確時,按下add鍵進行加分操作 else if(stu|inputEn)&&(score3!=0) score3=score3-1;/當主持人判定選手的回答錯誤時,按下stu鍵進行加分操作 else score3=0; score=score3;/把第一組的分數(shù)賦值給分數(shù)寄存器 end if(answer =3'd4)/第四組加減分 begin L

24、ed1=6'b110111;Led2=8'h99; if(add) score4=score4+1;/當主持人判定選手的回答正確時,按下add鍵進行加分操作 else if(stu|inputEn)&&(score4!=0) score4=score4-1;/當主持人判定選手的回答錯誤時,按下stu鍵進行加分操作 else score4=0; score=score4;/把第一組的分數(shù)賦值給分數(shù)寄存器 end if(answer =3'd5)/第五組加減分 begin Led1=6'b101111;Led2=8'h92; if(add)

25、score5=score5+1;/當主持人判定選手的回答正確時,按下add鍵進行加分操作 else if(stu|inputEn)&&(score5!=0) score5=score5-1;/當主持人判定選手的回答錯誤時,按下stu鍵進行加分操作 else score5=0; score=score5;/把第一組的分數(shù)賦值給分數(shù)寄存器 end if(answer =3'd6)/第六組加減分 begin Led1=6'b011111;Led2=8'h82; if(add) score6=score6+1;/當主持人判定選手的回答正確時,按下add鍵進行加分

26、操作 else if(stu|inputEn)&&(score6!=0) score6=score6-1;/當主持人判定選手的回答錯誤時,按下stu鍵進行加分操作 else score6=0; score=score6;/把第一組的分數(shù)賦值給分數(shù)寄存器 end begin case(score)/? 4'd0:Led3=8'hc0;4'd1:Led3=8'hf9;4'd2:Led3=8'ha4; 4'd3:Led3=8'hb0;4'd4:Led3=8'h99;4'd5:Led3=8'

27、h92; 4'd6:Led3=8'h82;4'd7:Led3=8'hf8;4'd8:Led3=8'h80; 4'd9:Led3=8'h90;default:Led3=8'hff; endcase end end end if(clr)/按下clr鍵以后各組參數(shù)重置,整個比賽重新開始 begin EnFlat=1'b1; daojishi=5'd20; Led1=6'b111111;/重置時六個Led全滅 Led2=8'b11111111;/熄滅選手號靜態(tài)數(shù)碼管 Led3=8'b111

28、11111;/熄滅分數(shù)顯示數(shù)碼管 BuClk=1'b0;/蜂鳴器標志位重置 Buzzer=1'b1;/蜂鳴器控制管腳重置 score=0; /score1=4'd0;score2=4'd0;score3=4'd0; /score4=4'd0;score5=4'd0;score6=4'd0; answer=3'd0; endendendmodule測試程序timescale 1s/1smodule qiangdaqi_test(); reg clk,clr,add,stu,inputEn,inputL1,inputL2,in

29、putL3,inputL4,inputL5,inputL6; /reg clr;/重置鍵 /reg add,stu;/add答題正確加一分stu答題錯誤減一分 wire 0:5Led1;/對應(yīng)參賽選手前的燈 wire 0:7Led2,Led3;/Led2顯示選手號Led3顯示選手分數(shù) wire Buzzer;/低電平時蜂鳴器發(fā)出聲音 QiangDaQi u1(clk,clr,add,stu,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led1,Led2,Led3,Buzzer); initial begin #0 clk=1;add=0;stu=0;clr=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1; #2 inputEn=0;inputL1=1;inputL2=0;inputL3=1;inputL4=1;inputL5=1;inputL6=1;add=1; #2 clr=1;add=0;stu=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1; #2 clr=0; #2 inputEn=0;inputL1=1;in

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論