Verilog項(xiàng)目設(shè)計(jì)報(bào)拔河游戲機(jī)_第1頁(yè)
Verilog項(xiàng)目設(shè)計(jì)報(bào)拔河游戲機(jī)_第2頁(yè)
Verilog項(xiàng)目設(shè)計(jì)報(bào)拔河游戲機(jī)_第3頁(yè)
Verilog項(xiàng)目設(shè)計(jì)報(bào)拔河游戲機(jī)_第4頁(yè)
Verilog項(xiàng)目設(shè)計(jì)報(bào)拔河游戲機(jī)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、河海大學(xué)物聯(lián)網(wǎng)工程學(xué)院Verilog HDL項(xiàng)目設(shè)計(jì)報(bào)告題目 拔 河 游 戲 機(jī) 專業(yè) 電子科學(xué)與技術(shù) 學(xué)號(hào)1562910123、1562910125 授課班號(hào) 6292758 學(xué)生姓名 徐子豪、楊詩(shī)欣 指導(dǎo)教師 華迪、齊本勝 摘 要 和 關(guān) 鍵 字為了掌握數(shù)字系統(tǒng)的設(shè)計(jì)方法,掌握硬件描述語(yǔ)言Verilog HDL,掌握模塊化設(shè)計(jì)方法,掌握開(kāi)發(fā)軟件的使用方法。 選擇 基于FPGA開(kāi)發(fā)板設(shè)計(jì)的拔河游戲機(jī),使用兩個(gè)按鍵進(jìn)行比賽,利用按鍵按下的快慢作為模擬的雙方選手拔河過(guò)程,led燈的變化決定繩子的位置,led燈到了一邊以后比賽終止,整個(gè)過(guò)程的難點(diǎn)在于,需要過(guò)濾信號(hào),使按鍵產(chǎn)生的信號(hào)穩(wěn)定,所以程序中

2、需要有按鍵消抖模塊,同時(shí)需標(biāo)識(shí)符來(lái)控制比賽的開(kāi)始與結(jié)束。關(guān)鍵詞 :verilog 拔河比賽 消抖模塊 標(biāo)識(shí)符 In order to master the design method of digital system, we must master the hardware description language - Verilog HDL, grasp the modular design method and master the way of developing software. ChoiceTug of war game FPGA development board based

3、 on the design, the use of two button game, using key press speed as both players tug of war of simulation, change led lamp decide the position of the rope, LED lights to the side after the end game, the difficulty lies in the whole process, need to filter the signal, the stable signal generated by

4、the keys so, the procedure requires a key debounce module, also need to control the game's identifier and end start.Key words: Verilog tug shake-off module identifier. 一、系統(tǒng)設(shè)計(jì)1 . 實(shí)驗(yàn)要求 設(shè)計(jì)拔河游戲電路,用按鍵與LED表示輸入與輸出。 (1)初始時(shí),16個(gè)LED中間的兩個(gè)點(diǎn)亮,然后游戲雙方不停按動(dòng)按鍵,點(diǎn)亮的兩個(gè)LED向按動(dòng)按鍵慢的一方移動(dòng);(2)每按動(dòng)一下按鍵,LED向?qū)Ψ揭苿?dòng)一格;(3)只要LED移動(dòng)到頭

5、,游戲結(jié)束;(4)工作時(shí)鐘100Hz即可;(5)完成全部流程:設(shè)計(jì)規(guī)范文檔、模塊設(shè)計(jì)、代碼輸入、功能仿真、約束與綜合、布局布線、時(shí)序仿真、下載驗(yàn)證等。2 . 方案對(duì)比 脈沖信號(hào)方案: 在選定一定的時(shí)間周期內(nèi),檢測(cè)按鍵A與按鍵B的產(chǎn)生的脈沖個(gè)數(shù),進(jìn)行比較,若A的脈沖數(shù)量大于B,則Led向A方向移動(dòng),反之則向B方向移動(dòng),若相等則不動(dòng)。 4消抖模塊方案給所定按鍵兩個(gè)狀態(tài),一個(gè)前狀態(tài),一個(gè)后狀態(tài),當(dāng)時(shí)鐘時(shí)鐘的脈沖沿來(lái)臨時(shí),將按鍵狀態(tài)賦值給前狀態(tài),設(shè)置定時(shí)器,當(dāng)計(jì)數(shù)計(jì)滿后,前狀態(tài)值賦給后狀態(tài),按鍵輸出值為前狀態(tài)和后狀態(tài)的取反的并。此方案當(dāng)一直按住按鍵時(shí),按鍵電平信號(hào)一直為高,取反后的變?yōu)榈?,可以避免一?/p>

6、按住而直接比賽結(jié)束的特殊情況。3. 系統(tǒng)框圖譯碼模塊Led移動(dòng)比較模塊按鍵模塊消抖模塊時(shí)鐘分頻 由分頻后的時(shí)鐘信號(hào)模塊控制按鍵信號(hào)模塊,之后進(jìn)入比較模塊,若A的脈沖數(shù)大于B,則Led向A代表方向移動(dòng),反之則向B代表方向移動(dòng),若相等則不動(dòng)。由Led的位置決定使能端的開(kāi)啟與關(guān)閉,若移動(dòng)至A或B的頂端,則使能端控制Led無(wú)法再移動(dòng)。4. 代碼設(shè)計(jì)和說(shuō)明(1)對(duì)于輸入端口輸出端口的定義,和寄存器,線網(wǎng)型變量的,以及計(jì)數(shù)常量的定義module project_ba(Clk,Rst_n,KEY1,KEY2,LED);input Clk;input Rst_n;input KEY1;input KEY2;

7、/定義輸入 output 15:0 LED;/定義輸出reg 27:0 Cnt;reg Clk_100hz;reg en;reg Key1_n;reg Key1_n_reg;reg Key2_n;reg Key2_n_reg;reg 3:0 t;reg 15:0 led;wire key1,key2;parameter CNT = 28'd49_999;(2)分頻模塊,將Basys3的100M系統(tǒng)時(shí)鐘分頻成為周期為10ms,100Hz頻率always(posedge Clk or posedge Rst_n)beginif(Rst_n) beginCnt <= 28'd0

8、;Clk_100hz <= 0;endelse if(Cnt = CNT) beginCnt <= 28'd0;Clk_100hz <= Clk_100hz;endelseCnt <= Cnt + 1'b1;end(3)按鍵消抖模塊,給每一個(gè)按鍵兩個(gè)狀態(tài),保證按鍵產(chǎn)生的信號(hào)可以消除抖動(dòng)穩(wěn)定。always(posedge Clk or posedge Rst_n)begin if(Rst_n)begin Key1_n <= 0;Key2_n <= 0;endelse beginKey1_n <= Key1_n_reg;Key2_n <

9、;= Key2_n_reg;endendalways(*)beginif(Cnt = CNT) beginKey1_n_reg = KEY1;Key2_n_reg = KEY2;endelse beginKey1_n_reg = Key1_n;Key2_n_reg = Key2_n;endendassign key1 = Key1_n & (Key1_n_reg);assign key2 = Key2_n & (Key2_n_reg);(4)比較模塊,每當(dāng)時(shí)鐘的上升沿,便比較A,B的脈沖個(gè)數(shù),即誰(shuí)按得快,輸出就為1,否則就為0always(posedge Clk)begin i

10、f(t = 4'd0 | t = 4'd14)en <= 1'b0; elseen <= 1'b1;end(5) 移動(dòng)模塊always(posedge Clk_100hz or posedge Rst_n )begin if(Rst_n)t <= 7;elseif(en)case(key1,key2)2'b10 : t <= t + 1'b1;2'b01 : t <= t - 1'b1;default:t <= t;endcase end(6)譯碼模塊,將得到的信號(hào)t轉(zhuǎn)化為,Led的顯示,最后賦

11、值給Led輸出端口,并且由數(shù)碼管顯示勝利的一方 always(*)begincase(t)4'd0 : led = 16'b0000_0000_0000_0011;4'd1 : led = 16'b0000_0000_0000_0110; 4'd2 : led = 16'b0000_0000_0000_1100; 4'd3 : led = 16'b0000_0000_0001_1000; 4'd4 : led = 16'b0000_0000_0011_0000; 4'd5 : led = 16'b0

12、000_0000_0110_0000; 4'd6 : led = 16'b0000_0000_1100_0000; 4'd7 : led = 16'b0000_0001_1000_0000;4'd8 : led = 16'b0000_0011_0000_0000; 4'd9 : led = 16'b0000_0110_0000_0000; 4'd10: led = 16'b0000_1100_0000_0000; 4'd11: led = 16'b0001_1000_0000_0000; 4'

13、;d12: led = 16'b0011_0000_0000_0000; 4'd13: led = 16'b0110_0000_0000_0000;4'd14: led = 16'b1100_0000_0000_0000; default : led = 16'b0000_0000_0000_0000;endcaseendassign LED = led;endmodule 2、 結(jié)果與討論1、仿真代碼 define clk_period 10 /定義時(shí)鐘周期module BaTB();reg Clk;reg Rst_n;reg KEY1,KEY

14、2;wire15:0 LED;project_ba u0(.Clk(Clk),.Rst_n(Rst_n),.KEY1(KEY1),.KEY2(KEY2),.LED(LED);initial begin Clk = 0; end always #(clk_period /2) Clk = Clk; initial begin KEY1 = 0;KEY2 = 0; #(clk_period * 10) ; Rst_n = 1; #(clk_period * 10); Rst_n = 0; KEY1 = 1;KEY2 = 0; #(clk_period * 100); KEY1 = 1;KEY2 =

15、 0; #(clk_period * 100); KEY1 = 1;KEY2 = 0; end endmodule2、仿真波形可以看到一直給Key1施加高電平時(shí)鐘信號(hào),Led燈的高電平一直向1方向的led燈方向移動(dòng),由此可得仿真成功。3、 問(wèn)題與分析 在仿真成功以后生成比特流文件時(shí)一直顯示錯(cuò)誤無(wú)法成功,之后在請(qǐng)教其他同學(xué)以后,共同分析后發(fā)現(xiàn),一開(kāi)始設(shè)計(jì)中的數(shù)碼管模塊無(wú)法在結(jié)束后對(duì)應(yīng)顯示,于是便刪除了數(shù)碼管模塊,在led移動(dòng)到一端后便是游戲結(jié)束標(biāo)志。4、 結(jié)果在分析出問(wèn)題兵解決之后,將程序燒寫(xiě)到fpga開(kāi)發(fā)板上,設(shè)計(jì)的功能都能實(shí)現(xiàn),于是上板驗(yàn)證也成功。三、心得體會(huì) 一開(kāi)始接觸這個(gè)課題的時(shí)候,不知

16、道怎么下手,通過(guò)其他同學(xué)的講解以及查找資料基本了解了拔河游戲機(jī)的設(shè)計(jì)原理。通過(guò)這次課程設(shè)計(jì),我更加感到理論和實(shí)際之間的差異很大。我也越來(lái)越強(qiáng)烈地感到要掌握一項(xiàng)技術(shù),唯一的辦法也是最好的辦法就是實(shí)踐。只有通過(guò)實(shí)踐才能將書(shū)本上的知識(shí)應(yīng)用,也只有實(shí)踐才能發(fā)現(xiàn)很多問(wèn)題,真正掌握知識(shí),學(xué)以致用。雖然遇到的問(wèn)題很多,但是同時(shí)得到很多有用的經(jīng)驗(yàn)。這些對(duì)于以后的學(xué)習(xí)和工作都有很大的幫助。 四、參考文獻(xiàn) 1 夏宇聞,Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程,北京航天航空大學(xué)出版社,20132 王金明,數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL,北京電子工業(yè)出版社,20093 潘松,EDA技術(shù)實(shí)用教程,北京科學(xué)出版社,2009附

17、錄實(shí)物板級(jí)驗(yàn)證圖:1、左邊隊(duì)員勝利2、右邊隊(duì)員勝利 3、清零重置4、 源代碼module project_ba(Clk,Rst_n,KEY1,KEY2, LED);input  Clk;input  Rst_n;input  KEY1;input  KEY2;      /定義輸入 output 15:0 LED;/定義輸出reg 27:0 Cnt;reg Clk_100hz;

18、reg en;reg Key1_n;reg Key1_n_reg;reg Key2_n;reg Key2_n_reg;reg 3:0 t;reg 15:0 led;wire key1,key2;parameter CNT = 28'd49_999;always(posedge Clk or posedge Rst_n)beginif(Rst_n) beginCnt <= 28'

19、;d0;Clk_100hz <= 0;endelse if(Cnt = CNT) beginCnt <= 28'd0;Clk_100hz <= Clk_100hz;endelseCnt <= Cnt + 1'b1;endalways(posedge Clk or posedge Rst_n)begin if(Rst_n)begin Key1_n &

20、lt;= 0;Key2_n <= 0;endelse beginKey1_n <= Key1_n_reg;Key2_n <= Key2_n_reg;endendalways(*)beginif(Cnt = CNT) beginKey1_n_reg = KEY1;Key2_n_reg = KEY2;endelse beginKey1_n_reg = Key1_n;Key2_n_reg =&#

21、160;Key2_n;endendassign key1 = Key1_n & (Key1_n_reg);assign key2 = Key2_n & (Key2_n_reg);always(posedge Clk_100hz or posedge Rst_n )begin if(Rst_n)t <= 7;elseif(en)case(key1,key2)2'b10 :

22、0;t <= t + 1'b1;2'b01 : t <= t - 1'b1;default:t <= t;endcase end  always(posedge Clk)begin if(t = 4'd0 | t = 4'd14)en <= 1'b0; elseen&

23、#160;<= 1'b1;endalways(*)begincase(t)4'd0 : led = 16'b0000_0000_0000_0011;4'd1 : led = 16'b0000_0000_0000_0110; 4'd2 : led = 16'b0000_0000_0000_1100; 4'd3 : led = 16'

24、b0000_0000_0001_1000; 4'd4 : led = 16'b0000_0000_0011_0000; 4'd5 : led = 16'b0000_0000_0110_0000; 4'd6 : led = 16'b0000_0000_1100_0000; 4'd7 : led = 16'b0000_0001_1000_

25、0000;4'd8 : led = 16'b0000_0011_0000_0000; 4'd9 : led = 16'b0000_0110_0000_0000; 4'd10: led = 16'b0000_1100_0000_0000; 4'd11: led = 16'b0001_1000_0000_0000; 4'd12: led&#

26、160;= 16'b0011_0000_0000_0000; 4'd13: led = 16'b0110_0000_0000_0000;4'd14: led = 16'b1100_0000_0000_0000;  default : led = 16'b0000_0000_0000_0000;endcaseend/譯碼模塊assign LED = led;endmodule

27、60; 5、 測(cè)試文件define clk_period 10 /定義時(shí)鐘周期module BaTB();reg Clk;reg Rst_n;reg KEY1,KEY2;wire15:0 LED;project_ba u0(.Clk(Clk),.Rst_n(Rst_n),.KEY1(KEY1),.KEY2(KEY2),.LED(LED);initial begin Clk = 0; end always #(clk_period /2) Clk = Clk; initial begin KEY1 = 0;KEY2 = 0; #(clk_period * 10) ; Rst_n = 1; #(c

28、lk_period * 10); Rst_n = 0; KEY1 = 1;KEY2 = 0; #(clk_period * 100); KEY1 = 1;KEY2 = 0; #(clk_period * 100); KEY1 = 1;KEY2 = 0; end endmodule6、 管腳約束set_property IOSTANDARD LVCMOS33 get_ports LED15set_property IOSTANDARD LVCMOS33 get_ports LED14set_property IOSTANDARD LVCMOS33 get_ports LED13set_prope

29、rty IOSTANDARD LVCMOS33 get_ports LED12set_property IOSTANDARD LVCMOS33 get_ports LED11set_property IOSTANDARD LVCMOS33 get_ports LED10set_property IOSTANDARD LVCMOS33 get_ports LED9set_property IOSTANDARD LVCMOS33 get_ports LED8set_property IOSTANDARD LVCMOS33 get_ports LED7set_property IOSTANDARD

30、LVCMOS33 get_ports LED6set_property IOSTANDARD LVCMOS33 get_ports LED5set_property IOSTANDARD LVCMOS33 get_ports LED4set_property IOSTANDARD LVCMOS33 get_ports LED3set_property IOSTANDARD LVCMOS33 get_ports LED2set_property IOSTANDARD LVCMOS33 get_ports LED1set_property IOSTANDARD LVCMOS33 get_ports LED0set_property PACKAGE_PIN L1 get_ports LED15

溫馨提示

  • 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)論