名稱:電子拔河比賽游戲機(jī)的設(shè)計(jì)Verilog代碼vivado? ego1開發(fā)板
軟件:vivado
語言:Verilog
代碼功能:
電子拔河比賽游戲機(jī)的設(shè)計(jì)
電子拔河游戲機(jī)供2~3人玩耍。由一排LED表示拔河的“電子繩”。初態(tài)時(shí)中間的LED亮。比賽時(shí)雙方通過按扭使中間亮的LED向己方移動(dòng),當(dāng)亮至某方最后一個(gè)LED時(shí),該方獲勝,并記分。
設(shè)計(jì)要求
(1)比賽開始,由裁判下達(dá)比賽“開始”命令后,雙方才能輸入信號否則電路自鎖,輸入信號無效。
(2)“電子繩”至少由15個(gè)LED構(gòu)成,裁判下達(dá)比賽“開始”命令后。位于中間的LED亮。甲乙雙方通過按鍵輸入信號,使發(fā)亮的LED向自己一方移動(dòng),并能阻止其向?qū)Ψ揭苿?dòng)。當(dāng)自己一方終點(diǎn)LED亮?xí)r,表示比賽結(jié)束。此時(shí)電路自鎖,保持當(dāng)前狀態(tài)不變,除非由裁判使電路復(fù)位。
(3)設(shè)計(jì)甲乙雙方自動(dòng)記分電路,在每次比賽結(jié)束時(shí)能自動(dòng)加分,用數(shù)碼管顯示得分。
注:附加功能根據(jù)本人能力自行添加(如可以自動(dòng)記錄比賽時(shí)間等等)
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗(yàn)證,ego1開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
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,//標(biāo)準(zhǔn)時(shí)鐘,100MHz input?reset_n,//復(fù)位信號,低有效? input?restart,//裁判控制重新開始 input?player_1_key,//選手1 input?player_2_key,//選手2 output?[14:0]?led,//15個(gè)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;//游戲時(shí)間分鐘 wire?[7:0]?second_time;//游戲時(shí)間秒 wire?[7:0]?score_1;//選手1分?jǐn)?shù) wire?[7:0]?score_2;//選手2分?jǐn)?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),//標(biāo)準(zhǔn)時(shí)鐘,100MHz .?reset_n(reset_n),//復(fù)位信號,低有效? .?restart(restart),//裁判控制重新開始 .?player_1(player_1),//選手1 .?player_2(player_2),//選手2 .?led(led),//15個(gè)led .?minute_time(minute_time),//游戲時(shí)間分鐘 .?second_time(second_time),//游戲時(shí)間秒 .?score_1(score_1),//選手1分?jǐn)?shù) .?score_2(score_2)//選手2分?jǐn)?shù) ); display?U_display( .?clk_100M(clk_100M),//標(biāo)準(zhǔn)時(shí)鐘,100MHz .?reset_n(reset_n),//復(fù)位信號,低有效? .?minute_time(minute_time),//游戲時(shí)間分鐘 .?second_time(second_time),//游戲時(shí)間秒 .?score_1(score_1),//選手1分?jǐn)?shù) .?score_2(score_2),//選手2分?jǐn)?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
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=461