• 方案介紹
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

辯論賽控制器DE0-CV開發(fā)板verilog答辯計時

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

名稱:辯論賽控制器DE0-CV開發(fā)板verilog答辯計時(代碼在文末下載)

軟件:Quartus II

語言:Verilog

代碼功能:

辯論賽,(雙方起始分數(shù)為10分,這個數(shù)值可以改動)裁判按下開始按鈕,雙方開始答辯,甲方按下按鈕開始答辯,甲方燈亮起,甲方答辯期間(10秒倒計時,這個數(shù)值能夠更改),乙方不能按下按鈕答辯,甲方結(jié)束后,乙方按下按鈕開始回答,乙方燈亮起,乙方答辯期間(10秒倒計時,這個數(shù)值能夠更改),甲方不能按下按鈕答辯,結(jié)束后由裁判判斷,給哪方減分。

本代碼已在DE0-CV開發(fā)板驗證,其他開發(fā)板可以修改管腳適配,開發(fā)板如下:

DE0_cv.png

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

工程文件:

辯論.png

部分代碼展示:

//?辯論賽,(雙方起始分數(shù)為10分,這個數(shù)值可以改動)裁判按下開始按鈕,雙方開始答辯,
//?甲方按下按鈕開始答辯,甲方燈亮起,甲方答辯期間(10秒倒計時,這個數(shù)值能夠更改),乙方不能按下按鈕答辯,
//?甲方結(jié)束后,乙方按下按鈕開始回答,乙方燈亮起,乙方答辯期間(10秒倒計時,這個數(shù)值能夠更改),甲方不能按下按鈕答辯,
//?結(jié)束后由裁判判斷,給哪方減分。
//頂層模塊
module?Debate(
input?clk_in,//輸入時鐘
input?rst_n,//復(fù)位
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,//數(shù)碼管-低亮
output??[7:0]?HEX1,//數(shù)碼管-低亮
output??[7:0]?HEX2,//數(shù)碼管-低亮
output??[7:0]?HEX3,//數(shù)碼管-低亮
output??[7:0]?HEX4,//數(shù)碼管-低亮
output??[7:0]?HEX5?//數(shù)碼管-低亮
);
wire?clk_1Hz;
wire?[7:0]?score_A;//甲方分數(shù)
wire?[7:0]?score_B;//乙方分數(shù)
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),//復(fù)位
.?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),//甲方分數(shù)
.?score_B(score_B),//乙方分數(shù)
.?time_A(time_A),//甲方倒計時
.?time_B(time_B),//乙方倒計時
.?LED_A(LED_A),//甲方燈
.?LED_B(LED_B)//乙方燈
);
//數(shù)碼管顯示模塊
display?i_display(
.?clk(clk_in),
.?score_A(score_A),//甲方分數(shù)
.?score_B(score_B),//乙方分數(shù)
.?time_A(time_A),//甲方倒計時
.?time_B(time_B),//乙方倒計時
.?HEX0(HEX0),//數(shù)碼管-低亮
.?HEX1(HEX1),//數(shù)碼管-低亮
.?HEX2(HEX2),//數(shù)碼管-低亮
.?HEX3(HEX3),//數(shù)碼管-低亮
.?HEX4(HEX4),//數(shù)碼管-低亮
.?HEX5(HEX5)?//數(shù)碼管-低亮
);
endmodule



//控制模塊
module?Debate_ctrl(
input?clk_in,//輸入時鐘
input?clk_1Hz,//1Hz使能信號
input?rst_n,//復(fù)位

input?key_referee,//裁判開始
input?key_sub_A,//甲方減分
input?key_sub_B,//乙方減分

input?SW_A,//甲方開始答辯
input?SW_B,//乙方開始答辯

output?[7:0]?score_A,//甲方分數(shù)
output?[7:0]?score_B,//乙方分數(shù)

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;//甲方初始分數(shù)
reg?[7:0]?score_B_buf=8'd10;//乙方初始分數(shù)
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;//復(fù)位
	else
		case(state)
			s_idle://初始狀態(tài)
				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)//倒計時結(jié)束
					state<=s_end_A;
				else

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=233

相關(guān)推薦