Verilog項目設(shè)計報拔河游戲機_第1頁
Verilog項目設(shè)計報拔河游戲機_第2頁
Verilog項目設(shè)計報拔河游戲機_第3頁
Verilog項目設(shè)計報拔河游戲機_第4頁
Verilog項目設(shè)計報拔河游戲機_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、需要有按鍵消抖模塊,同時需標(biāo)識符來控制比賽的開始與結(jié)束。關(guān)鍵詞 :verilog 拔河比賽 消抖模塊 標(biāo)識符 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è)計1 . 實驗要求 設(shè)計拔河游戲電路,用按鍵與LED表示輸入與輸出。 (1)初始時,16個LED中間的兩個點亮,然后游戲雙方不停按動按鍵,點亮的兩個LED向按動按鍵慢的一方移動;(2)每按動一下按鍵,LED向?qū)Ψ揭苿右桓?;?)只要LED移動到頭

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

6、按住而直接比賽結(jié)束的特殊情況。3. 系統(tǒng)框圖譯碼模塊Led移動比較模塊按鍵模塊消抖模塊時鐘分頻 由分頻后的時鐘信號模塊控制按鍵信號模塊,之后進入比較模塊,若A的脈沖數(shù)大于B,則Led向A代表方向移動,反之則向B代表方向移動,若相等則不動。由Led的位置決定使能端的開啟與關(guān)閉,若移動至A或B的頂端,則使能端控制Led無法再移動。4. 代碼設(shè)計和說明(1)對于輸入端口輸出端口的定義,和寄存器,線網(wǎng)型變量的,以及計數(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)時鐘分頻成為周期為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)按鍵消抖模塊,給每一個按鍵兩個狀態(tài),保證按鍵產(chǎn)生的信號可以消除抖動穩(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)時鐘的上升沿,便比較A,B的脈沖個數(shù),即誰按得快,輸出就為1,否則就為0always(posedge Clk)begin i

10、f(t = 4'd0 | t = 4'd14)en <= 1'b0; elseen <= 1'b1;end(5) 移動模塊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)譯碼模塊,將得到的信號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 /定義時鐘周期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施加高電平時鐘信號,Led燈的高電平一直向1方向的led燈方向移動,由此可得仿真成功。3、 問題與分析 在仿真成功以后生成比特流文件時一直顯示錯誤無法成功,之后在請教其他同學(xué)以后,共同分析后發(fā)現(xiàn),一開始設(shè)計中的數(shù)碼管模塊無法在結(jié)束后對應(yīng)顯示,于是便刪除了數(shù)碼管模塊,在led移動到一端后便是游戲結(jié)束標(biāo)志。4、 結(jié)果在分析出問題兵解決之后,將程序燒寫到fpga開發(fā)板上,設(shè)計的功能都能實現(xiàn),于是上板驗證也成功。三、心得體會 一開始接觸這個課題的時候,不知

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

17、錄實物板級驗證圖:1、左邊隊員勝利2、右邊隊員勝利 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、 測試文件define clk_period 10 /定義時鐘周期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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論