数字电子技术课程设计报告基于FPGA的四位智能抢答器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档