名称:辩论赛控制器DE0-CV开发板verilog答辩计时(代码在文末下载)
软件:Quartus II
语言:Verilog
代码功能:
辩论赛,(双方起始分数为10分,这个数值可以改动)裁判按下开始按钮,双方开始答辩,甲方按下按钮开始答辩,甲方灯亮起,甲方答辩期间(10秒倒计时,这个数值能够更改),乙方不能按下按钮答辩,甲方结束后,乙方按下按钮开始回答,乙方灯亮起,乙方答辩期间(10秒倒计时,这个数值能够更改),甲方不能按下按钮答辩,结束后由裁判判断,给哪方减分。
本代码已在DE0-CV开发板验证,其他开发板可以修改管脚适配,开发板如下:
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
工程文件:
部分代码展示:
//?辩论赛,(双方起始分数为10分,这个数值可以改动)裁判按下开始按钮,双方开始答辩, //?甲方按下按钮开始答辩,甲方灯亮起,甲方答辩期间(10秒倒计时,这个数值能够更改),乙方不能按下按钮答辩, //?甲方结束后,乙方按下按钮开始回答,乙方灯亮起,乙方答辩期间(10秒倒计时,这个数值能够更改),甲方不能按下按钮答辩, //?结束后由裁判判断,给哪方减分。 //顶层模块 module?Debate( input?clk_in,//输入时钟 input?rst_n,//复位 input?key_referee,//裁判开始 input?key_sub_A,//甲方减分 input?key_sub_B,//乙方减分 input?SW_A,//甲方开始答辩 input?SW_B,//乙方开始答辩 output?LED_A,//甲方灯 output?LED_B,//乙方灯 output??[7:0]?HEX0,//数码管-低亮 output??[7:0]?HEX1,//数码管-低亮 output??[7:0]?HEX2,//数码管-低亮 output??[7:0]?HEX3,//数码管-低亮 output??[7:0]?HEX4,//数码管-低亮 output??[7:0]?HEX5?//数码管-低亮 ); wire?clk_1Hz; wire?[7:0]?score_A;//甲方分数 wire?[7:0]?score_B;//乙方分数 wire?[7:0]?time_A;//甲方倒计时 wire?[7:0]?time_B;//乙方倒计时 //分频到1Hz div?i_div( .?clk(clk_in),//时钟 .?clk_out(clk_1Hz)//分频到1Hz ); //控制模块 Debate_ctrl?i_Debate_ctrl( .?clk_in(clk_in),//输入时钟 .?clk_1Hz(clk_1Hz),//1Hz使能信号 .?rst_n(rst_n),//复位 .?key_referee(key_referee),//裁判开始 .?key_sub_A(key_sub_A),//甲方减分 .?key_sub_B(key_sub_B),//乙方减分 .?SW_A(SW_A),//甲方开始答辩 .?SW_B(SW_B),//乙方开始答辩 .?score_A(score_A),//甲方分数 .?score_B(score_B),//乙方分数 .?time_A(time_A),//甲方倒计时 .?time_B(time_B),//乙方倒计时 .?LED_A(LED_A),//甲方灯 .?LED_B(LED_B)//乙方灯 ); //数码管显示模块 display?i_display( .?clk(clk_in), .?score_A(score_A),//甲方分数 .?score_B(score_B),//乙方分数 .?time_A(time_A),//甲方倒计时 .?time_B(time_B),//乙方倒计时 .?HEX0(HEX0),//数码管-低亮 .?HEX1(HEX1),//数码管-低亮 .?HEX2(HEX2),//数码管-低亮 .?HEX3(HEX3),//数码管-低亮 .?HEX4(HEX4),//数码管-低亮 .?HEX5(HEX5)?//数码管-低亮 ); endmodule //控制模块 module?Debate_ctrl( input?clk_in,//输入时钟 input?clk_1Hz,//1Hz使能信号 input?rst_n,//复位 input?key_referee,//裁判开始 input?key_sub_A,//甲方减分 input?key_sub_B,//乙方减分 input?SW_A,//甲方开始答辩 input?SW_B,//乙方开始答辩 output?[7:0]?score_A,//甲方分数 output?[7:0]?score_B,//乙方分数 output?[7:0]?time_A,//甲方倒计时 output?[7:0]?time_B,//乙方倒计时 output?reg?LED_A,//甲方灯 output?reg?LED_B//乙方灯 ); reg?[2:0]?state=3'd0; parameter?s_idle=3'd0; parameter?s_start=3'd1; parameter?s_speak_A=3'd2; parameter?s_end_A=3'd3; parameter?s_speak_B=3'd4; parameter?s_end_B=3'd5; parameter?s_score=3'd6; reg?[7:0]?score_A_buf=8'd10;//甲方初始分数 reg?[7:0]?score_B_buf=8'd10;//乙方初始分数 reg?[7:0]?time_A_buf=8'd10;//甲方初始倒计时 reg?[7:0]?time_B_buf=8'd10;//乙方初始倒计时 always@(posedge?clk_in?or?negedge?rst_n) if(rst_n==0) state<=s_idle;//复位 else case(state) s_idle://初始状态 if(key_referee==0)//裁判开始 state<=s_start; else state<=s_idle; s_start://开始 if(SW_A==1)//甲方按下按钮开始答辩 state<=s_speak_A; else state<=s_start; s_speak_A://甲方答辩倒计时 if(time_A_buf==8'd0)//倒计时结束 state<=s_end_A; else
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=233
阅读全文