基于FPGA的四路抢答器的VerilogHDL代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
module
qiangda4(clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,inputL4,Led1,Led2,Led3,B
uzzer);
// 开始声明各个端口
//输入口
input clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,inputL4;
//输出口
//倒计时时使用的 LED 控制端 //数码管控制端 //分数显示数码管控制端 //蜂鸣器
reg [0:7] Led1;
reg [0:7] Led2;
reg [0:7] Led3;
reg cnt=32'b0;
reg Buzzer;
reg score=4'hf;// 分数显示寄存器
//配置寄存器 ,EnFlat 是表明开始抢答的标志位
reg EnFlat=1'b0;
//BuClk 是蜂鸣器的标志位 reg BuClk=1'b0;
//BuL 是做蜂鸣器的延时用 reg [0:7]BuL=8'd0;
//抢答选手标志位
reg answer=3'd0;
//各组分数标志位
reg score1=4'd5;
reg score2=4'd5;
reg score3=4'd5;
reg score4=4'd5;
// ------ 初始化模块 ---------
always @ (posedge elk)//甫捉时钟 begin
//初始化各按键并开始抢答 begin
if(inputEn==1'b0) begin
//初始化各个标志位和参数
EnFlat=1'b1;
〃倒计时开始时8个Led 灯全亮
Led1=8'b11111111;
//组号显示静态数码管 (数码管为共阳极
)的控制端,有 8
位 Led2=8'b11111111;
//分数显示数码管控制端
Led3=8'b11111111;
//蜂鸣器标志位
BuClk=1'b0;
//蜂鸣器的控制管脚 ,低电平为发声音
output [0:7] Led1;
output [0:7] Led2; output [0:7] Led3;
output Buzzer;
Buzzer=1'b1;
end
end
// --- 抢答模块----
begin
if(EnFlat==1'b1)
begin
//如果按键 1 按下
if(inputL1==1'b0)
begin
//禁止其他选手抢答
EnFlat=1'b0;
//选手标志位改变,用于加减分数模块 answer=3'd1;
//静态数码管显示序号 '1',及显示选手对应的组号
Led2=8'hf9;
//指示蜂鸣器发声
BuClk=1'b1;
end
//如果按键 2 按下
else if(inputL2==1'b0)
begin
//禁止其他选手抢答
EnFlat=1'b0;
answer=3'd2;
Led2=8'ha4;
BuClk=1'b1;
end
//如果按键 3 按下
else if(inputL3==1'b0)
begin
//禁止其他选手抢答
EnFlat=1'b0;
answer=3'd3;
Led2=8'hb0;
BuClk=1'b1;
end
//如果按键 4 按下
else if(inputL4==1'b0)
begin //禁止其他选手抢答 EnFlat=1'b0; answer=3'd4; Led2=8'h99;
BuClk=1'b1;
end
end
end
// ----------- 加减分数模块 ----------
//第一组加减分
if(answer ==3'd1)
begin
if(add) score1=score1+1; //当主持人判定选手的回答正确时,按下add
键进行加分操作 else if(stu)
score1=score1-1;
//当主持人判定选手的回答错误时,按下stu 键进行减分操作
score=score1;/耙第一组的分数赋值给分数寄存器 end //第二组加减分 if(answer ==3'd2) begin if(add)
score2=score2+1;
//当主持人判定选手的回答正确时,按下add 键进行加分操作else if(stu)
score2=score2-1;
//当主持人判定选手的回答错误时,按下stu 键进行减分操作
score=score2;
end
//第三组加减分
if(answer = =3'd3)
begin
if(add)
score3=score3+1;
//当主持人判定选手的回答正确时,按下add 键进行加分操作
else
if(stu) score3=score3-1;
//当主持人判定选手的回答错误时,按下stu 键进行减分操作
score=score3;
end
//第四组加减分 if(answer ==3'd4) begin if(add) score4=score4+1; //当主持人判定选手的回答正确时,按下add 键进行加分操作else if(stu) score4=score4-1;
//当主持人判定选手的回答错误时,按下stu 键进行减分操作
score=score4;
end
// --------- 倒计时模块-------------
begin
if(EnFlat==1'b1)
begin if(cnt!=32'd4*******)// 计时实现 1HZ 分频 cnt=cnt+32'd1;
else begin cnt=32'd0;
Led仁8'b11111111«1'b1;//Led1左移一个单位,实现一秒的倒计时
end