智能抢答器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学
实
验
报
告
学生姓名:
学号:
指导教师:
日期:
一、实验室名称:
二、实验项目名称:
智能抢答器设计
三、实验原理:
4人抢答器可同时供4位选手参加比赛,分别用player1 player2 player3 player4表示,节目主持人设置一个复位按键clear,用于控制系统的清零.抢答器具有锁存和显示功能,能够显示哪位选手获得抢答,并能显示具体选手的号码,同时屏蔽别的选手,再按选择信号.在选手回答问题时在规定时间到达发出报警主持人按键清零,一次抢答结束.
在本设计中,共4位选手,即4个输入信号,考虑到优先原则,所以引用一个状态变量,当这个标志为”1”的时候,说明有选手已经抢答,则对其他选手输入位信号进行屏蔽,然后锁存这个选手的编号并显示.采用两个数码管显示,计数采用BCD码输出.
四、实验目的:
▪学习QUARTUSⅡ软件的使用方法
▪学习VHDL或VerilogHDL语言
▪学会用VHDL或VerilogHDL语言进行简单的编程
五、实验内容:
完成智能抢答器实验程序的编写,并进行仿真后分析验证
六、实验器材(设备、元器件):
PC机,QUARTUSⅡ软件
七、实验步骤:
▪熟悉QUARTUSⅡ软件(以简单实例)
▪用VHDL开发FPGA的完整流程.继续掌握QUARTUSⅡ软件使用方法.
▪设计出抢答器程序进行调试,
▪用QUARTUSⅡ进行编译,综合及仿真.
八、实验数据及结果分析:
设计程序如下:
module qdq(player1,player2,player3,player4,res,clk,q1,q2,q3,q4,row,ra,Q1,beep);
input player1,player2,player3,player4;
input res,clk;
output[6:0]row,ra;
output[3:0]Q1;
output q1,q2,q3,q4,beep;
reg q1,q2,q3,q4,beep;
reg[6:0]row,ra;
reg clk1;
reg[3:0]Q1;
reg[3:0]y;
reg[6:0]i;
always @(res||q1||q2||q3||q4)
begin
if(!res)
begin q1<=0;q2<=0;q3<=0;q4<=0; // 裁判清零
end
else
begin
if(q1||q2||q3||q4)
begin q1<=q1;q2<=q2;q3<=q3;q4<=q4;
end
else
begin
if(player1) // 选手开始抢答
begin q1<=1;row<=7'b0111111; // 抢答后显示先抢答的选手编号
end
else if(player2)
begin q2<=1;row<=7'b0000110;
end
else if(player3)
begin q3<=1;row<=7'b1011011;
end
else if(player4)
begin q4<=1;row<=7'b1001111;
end
end
end
end
always@( posedge clk) // 10GHz ~clk
begin
case(Q1)
4'd0: ra<=7'b0111111; // 选手抢答后,数码管倒计时显示译码模块4'd1: ra<=7'b0000110;
4'd2: ra<=7'b1011011;
4'd3: ra<=7'b1001111;
4'd4: ra<=7'b1100110;
4'd5: ra<=7'b1101101;
4'd6: ra<=7'b1111101;
4'd7: ra<=7'b0000111;
4'd8: ra<=7'b1111111;
4'd9: ra<=7'b1100111;
endcase
end
always@(posedge clk) // 分频10ns~clk1
begin
if(i<50) i<=i+1;
else i<=0;clk1<=~clk1;
end
always@(posedge clk1 ) // 倒计时9~0控制模块begin
if(res&&(player1||player2||player3||player4))
begin
if(Q1>4'b0000) Q1<=Q1-1;
else Q1<=4'b1001;
end
end
always@(posedge clk1 ) // 报警模块
begin
if(res&&(player1||player2||player3||player4))
begin
if(y>4'b1011||y<4'b1111)
begin
beep<=1;y<=y+1;
end
else beep<=0;
end
else
begin
y<=0;beep<=0;
end
end
endmodule
仿真波形图: