名稱:電子拔河比賽游戲機的設計Verilog代碼vivado? ego1開發(fā)板
軟件:vivado
語言:Verilog
代碼功能:
電子拔河比賽游戲機的設計
電子拔河游戲機供2~3人玩耍。由一排LED表示拔河的“電子繩”。初態(tài)時中間的LED亮。比賽時雙方通過按扭使中間亮的LED向己方移動,當亮至某方最后一個LED時,該方獲勝,并記分。
設計要求
(1)比賽開始,由裁判下達比賽“開始”命令后,雙方才能輸入信號否則電路自鎖,輸入信號無效。
(2)“電子繩”至少由15個LED構成,裁判下達比賽“開始”命令后。位于中間的LED亮。甲乙雙方通過按鍵輸入信號,使發(fā)亮的LED向自己一方移動,并能阻止其向對方移動。當自己一方終點LED亮時,表示比賽結束。此時電路自鎖,保持當前狀態(tài)不變,除非由裁判使電路復位。
(3)設計甲乙雙方自動記分電路,在每次比賽結束時能自動加分,用數(shù)碼管顯示得分。
注:附加功能根據(jù)本人能力自行添加(如可以自動記錄比賽時間等等)
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗證,ego1開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 管腳約束
5. Testbench
6. 仿真圖
6.1 整體仿真
6.2 控制模塊仿真
6.3顯示模塊仿真
6.4 按鍵消抖模塊
部分代碼展示:
`timescale?1ns?/?1ps ////////////////////////////////////////////////////////////////////////////////// //?Company:? //?Engineer:? //? //?Create?Date:?2019/05/25?20:04:44 //?Design?Name:? //?Module?Name:?bahe_game //?Project?Name:? //?Target?Devices:? //?Tool?Versions:? //?Description:? //? //?Dependencies:? //? //?Revision: //?Revision?0.01?-?File?Created //?Additional?Comments: //? ////////////////////////////////////////////////////////////////////////////////// module?bahe_game( input?clk_100M,//標準時鐘,100MHz input?reset_n,//復位信號,低有效? input?restart,//裁判控制重新開始 input?player_1_key,//選手1 input?player_2_key,//選手2 output?[14:0]?led,//15個led //數(shù)碼管顯示 output??[7:0]?seg_display_1, output??[3:0]?bit_display_1,?? output??[7:0]?seg_display_2, output??[3:0]?bit_display_2 ????); wire?[7:0]?minute_time;//游戲時間分鐘 wire?[7:0]?second_time;//游戲時間秒 wire?[7:0]?score_1;//選手1分數(shù) wire?[7:0]?score_2;//選手2分數(shù) wire?player_1; wire?player_2; key_debounce?U1_key_debounce( ?????.?clk(clk_100M), ?????.?button_in(player_1_key),//輸入 ?.?button_posedge(player_1)//消抖后按鍵上升沿 ); key_debounce?U2_key_debounce( ?????.?clk(clk_100M), ?????.?button_in(player_2_key),//輸入 ?.?button_posedge(player_2)//消抖后按鍵上升沿 ); bahe_ctrl?U_bahe_ctrl( .?clk_100M(clk_100M),//標準時鐘,100MHz .?reset_n(reset_n),//復位信號,低有效? .?restart(restart),//裁判控制重新開始 .?player_1(player_1),//選手1 .?player_2(player_2),//選手2 .?led(led),//15個led .?minute_time(minute_time),//游戲時間分鐘 .?second_time(second_time),//游戲時間秒 .?score_1(score_1),//選手1分數(shù) .?score_2(score_2)//選手2分數(shù) ); display?U_display( .?clk_100M(clk_100M),//標準時鐘,100MHz .?reset_n(reset_n),//復位信號,低有效? .?minute_time(minute_time),//游戲時間分鐘 .?second_time(second_time),//游戲時間秒 .?score_1(score_1),//選手1分數(shù) .?score_2(score_2),//選手2分數(shù) //數(shù)碼管顯示 .?seg_display_1(seg_display_1), .?bit_display_1(bit_display_1),?? .?seg_display_2(seg_display_2), .?bit_display_2(bit_display_2) ); endmodule
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=461