• 方案介绍
  • 相关推荐
申请入驻 产业图谱

辩论赛控制器DE0-CV开发板verilog答辩计时

05/12 08:07
594
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:辩论赛控制器DE0-CV开发板verilog答辩计时(代码在文末下载)

软件:Quartus II

语言:Verilog

代码功能:

辩论赛,(双方起始分数为10分,这个数值可以改动)裁判按下开始按钮,双方开始答辩,甲方按下按钮开始答辩,甲方灯亮起,甲方答辩期间(10秒倒计时,这个数值能够更改),乙方不能按下按钮答辩,甲方结束后,乙方按下按钮开始回答,乙方灯亮起,乙方答辩期间(10秒倒计时,这个数值能够更改),甲方不能按下按钮答辩,结束后由裁判判断,给哪方减分。

本代码已在DE0-CV开发板验证,其他开发板可以修改管脚适配,开发板如下:

DE0_cv.png

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

工程文件:

辩论.png

部分代码展示:

// 辩论赛,(双方起始分数为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

相关推荐