数字电子技术课程设计报告基于FPGA的四位智能抢答器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电子技术课程设计报告--基于 FPGA的四位智能抢答器
专业:xxx
班级:xxx
姓名:xxx
学号:xxx
一、设计任务及要求
基于EDA/SOPC系统开发平台,运用QuartusⅡ可编程逻辑器件开发软件,设计一个4位智能抢答器。要求如下:
1、可以同时供4名选手抢答,其编号分别为1、
2、
3、4,各用
抢答按键S1、S2、S3、S4,按键编号与选手编号对应。主持人设置有一个开始按键S5,一个清零按键S6,用于控制抢答的开始和系统的清零;
2、抢答器具有定时抢答的功能,一次抢答的时间为10秒。当主
持人启动“开始”按键后,用4 位LED 数码管左边两位显示10s 的倒计时;
3、抢答器具有数据锁存和显示的功能,抢答开始后,如果有选手
按动按键,其编号立即锁存并显示在数码管上(显示在右边的两个数码管上),同时封锁输入电路,禁止其他选手抢答;优先选手的编号一直保持到主持人将系统清零为止;
4、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工
作,显示器上显示抢答时刻的时间(左边两个数码管上)和参赛选手的编号(显示在右边的两个数码管上),并保持到主持人将系统清零为止;如果定时抢答的时间已到而没有选手抢答,本次抢答无效,封锁输入电路,禁止抢答,定时器显示“00”并闪烁,闪烁频率为0.5H Z;一直保持到主持人将系统清零为止;
5、在主持人未按下开始按键时,如果有人抢答则犯规,在显示器
上右边两位闪烁犯规选手的编号,闪烁频率为0.5H Z;一直保持到
主持人将系统清零为止;
6、说明:系统上电和按下清零按键后显示“0000”,设计中的时
钟脉冲频率为1000赫兹;
7、附加:加入按键软件消抖功能及加减分数显示计分功能;能够
设置不同的抢答时间,以便应用于不同的抢答系统。
二、设计原理及方案
本次设计主要采用verilog HDL 语言,总体编程思路采用模块化设计方式,主要分为3个模块,一个主控制及按扭输入模块,一个LED计时提示模块,一个抢答组号显示模块,分别对这3个子模块进行独立编程设计,并生成元件,并在顶层使用原理图的方式将3个模块连接起来完成整个设计。锁定管脚并编译通过,下载到试验箱进行测试。
总设计框图:
解析:在上图框架中LED计时提示模块、抢答组号显示模块都为译码器,主控制及按钮输入模块实现具体功能。主控制及按钮输入模块主要功能为计时、显示、闪烁、分频。其先将需要输出的内容以8421BCD 码的形式输入给下一级,再通过LED计时提示模块和抢答组号显示模块的程序将8421BCD码译为对应的数据显示,最后和对应的共阳极数码显示管的管脚相连,显示最后的数据。
三、电路源文件
1、主控制与按钮输入模块
module zhukongzhi(clk,clear,start,p1,p2,p3,p4,answer1,answer2,q1,q2);
input clk,clear,start,p1,p2,p3,p4;
output[3:0] q1,q2
output [3:0] answer1,answer2;
wire[3:0] qq1, qq2;
wire co;
reg [3:0] answer1, answer2;reg st;reg cr;reg en;reg kp;reg [10:0] tm;reg temp;reg temp2;reg [3:0] temp3;reg [3:0]q1;reg [3:0]q2;reg flag;reg flag1;reg flag2;
initial
begin
flag2=1;st=1;cr=1;flag1=1;tm=0;temp=0;flag=0;kp=0;
answer1=4'b0000;answer2=4'b0000;
end
always@(negedge start or negedge clear)
begin
if(!start) begin st=0;cr=1;end
else if(!clear) begin st=1;cr=0;end
end
jishi2 cou(clk,cr,st,qq1,qq2,co,kp); always @(posedge clk )
begin
begin
if(st==1'b1)
begin
flag=1;
begin
if(!clear)
flag1=1;
end
begin
begin
if((p1==1'b0)&flag1)
begin
flag1=0;temp3=4'b0001;
end
else if((p2==1'b0)&flag1)
begin
flag1=0;temp3=4'b0010;
end
else if((p3==1'b0)&flag1)
begin
flag1=0;temp3=4'b0011;
end
else if((p4==1'b0)&flag1)
begin
flag1=0;temp3=4'b0100;
end
end
if(flag1==0)
if((tm>=0)&(tm<1000)&(temp))
begin
tm=tm+1; answer1=temp3;answer2=0;
end
else if((tm>=0)&(tm<1000)&(!temp))
begin
tm=tm+1; nswer1=4'b1010;answer2=4'b1010;
end
else if((tm==1000))
begin
tm=0;temp=~temp;
end
end
if(flag1)
begin
answer1=4'd0000; answer2=4'd0000;
end
end
end
end
begin
if((!start)&(flag2))
kp=1;
end
begin
if(!clear)
flag2=1;
end
begin
if(st==1'b0)