爱玩科技网
您的当前位置:首页数字电子技术课程设计报告基于FPGA的四位智能抢答器

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

来源:爱玩科技网


数字电子技术课程设计报告--基于 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.5HZ;一直保持到主持人将系统清零为止; 5、

在主持人未按下开始按键时,如果有人抢答则犯规,在显示器

上右边两位闪烁犯规选手的编号,闪烁频率为0.5HZ;一直保持到

主持人将系统清零为止; 6、

说明:系统上电和按下清零按键后显示“0000”,设计中的时

钟脉冲频率为1000赫兹; 7、

附加:加入按键软件消抖功能及加减分数显示计分功能;能够

设置不同的抢答时间,以便应用于不同的抢答系统。

二、设计原理及方案

本次设计主要采用verilog HDL 语言,总体编程思路采用模块化设计方式,主要分为3个模块,一个主控制及按扭输入模块,一个LED计时提示模块,一个抢答组号显示模块,分别对这3个子模块进行编程设计,并生成元件,并在顶层使用原理图的方式将3个模块连接起来完成整个设计。锁定管脚并编译通过,下载到试验箱进 行测试。

总设计框图:

LED1 LED2 LED3 LED4

LED计时提示模块抢答组号显示模块 8421码 8421码

主控制及按钮输入模块

CLK 开始 清零 选手1 选手2 选手3 选手4

解析:在上图框架中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) end

if(flag1==0)

begin

flag1=0;temp3=4'b0100; end

begin

if((tm>=0)&(tm<1000)&(temp))

begin tm=tm+1; end

answer1=temp3;answer2=0;

else if((tm>=0)&(tm<1000)&(!temp))

begin

nswer1=4'b1010;answer2=4'b1010;

tm=tm+1;

end if(flag1) begin

answer1=4'd0000; end

end

else if((tm==1000))

begin

tm=0;temp=~temp; end

answer2=4'd0000;

end end end begin

if((!start)&(flag2)) kp=1; end begin if(!clear) flag2=1; end begin

if(st==1'b0)

begin begin

if(p1&p2&p3&p4&flag)

begin

answer1=4'b1010;answer2=4'b1010; end

else if((p1==1'b0)&flag) begin

//禁止其他选手抢答

flag=1'b0;answer1=4'b0001;answer2=4'b0000;flag2=0;kp=0;

end

else if((p2==1'b0)&flag) begin

flag=1'b0;answer1=4'b0010; answer2=4'b0000;flag2=0;kp=0;

end

else if((p3==1'b0)&flag) begin

flag=1'b0;answer1=4'b0011;

answer2=4'b0000;flag2=0;kp=0;

end

else if((p4==1'b0)&flag) begin

flag=1'b0; answer1=4'b0100;

answer2=4'b0000;flag2=0;kp=0;

end begin

if(co&(!st))

end

end end

end

begin end

if((tm>=0)&(tm<1000)&(temp))

begin

tm=tm+1;q1=0;q2=0; end

else if((tm>=0)&(tm<1000)&(!temp))

begin

tm=tm+1;q1=4'b1010;q2=4'b1010; end

else if((tm==1000)) end

answer1=4'b1010;

answer2=4'b1010;

begin

tm=0;temp=~temp;

begin end

if(!co) begin

q1<=qq1;q2<=qq2; end

if(!cr) end Endmodule

begin

flag=1'b1;kp=1; end

2、LED计时提示模块:

module shijian(in,led1,led2); input [3:0]in; output led1,led2;

reg [7:0]led1,led2; always@(in) begin

case(in) 4'b0000:begin led1=8'b00000011;led2=8'b00000011; end 4'b0001:begin led1=8'b10011111;led2=8'b00000011; end 4'b0010:begin led1=8'b00100101;led2=8'b00000011; end 4'b0011:begin led1=8'b00001101;led2=8'b00000011; end 4'b0100:begin led1=8'b10011001;led2=8'b00000011; end 4'b0101:begin led1=8'b01001001;led2=8'b00000011; end 4'b0110:begin led1=8'b11000001;led2=8'b00000011; end 4'b0111:begin led1=8'b00011111;led2=8'b00000011; end 4'b1000:begin led1=8'b00000001;led2=8'b00000011; end 4'b1001:begin led1=8'b00011001;led2=8'b00000011; end 4'b1010:begin led1=8'b00000011;led2=8'b10011111; end 4'b1111:begin led1=8'b11111111;led2=8'b11111111; end endcase end endmodule

3、抢答组号显示模块:

module xianshi(decodeout,indec); output[7:0] decodeout; input[3:0] indec; reg[7:0] decodeout; always @(indec) begin

case(indec)

4'b0000:decodeout=8'b00000011; 4'b0001:decodeout=8'b10011111; 4'b0010:decodeout=8'b00100101;4'b0011:decodeout=8'b00001101; 4'b0100:decodeout=8'b10011001; 4'b0101:decodeout=8'b01001001; 4'b0110:decodeout=8'b01000001; 4'b0111:decodeout=8'b00011111; 4'b1000:decodeout=8'b00000001; 4'b1001:decodeout=8'b00001001; 4'b1010:decodeout=8'b11111111;

default:decodeout=8'b11111111; endcase end Endmodule

模块连接图:

管教分配表:1、设计中应用的管脚

信号 CLK 按键S1 按键S2 按键S3 按键S7 按键S8 管脚 L2 F8 A14 F10 F15 B18 说明 时钟脉冲 选手1 选手2 选手3 加分按键 减分按键 信号 按键S4 按键S5 按键S6 管脚 B16 F12 B17 说明 选手4 开始按键 清零按键 以下两行附加设计用到 0-1开关K1 0-1开关K2 E15 B14 抢答时间选择开关 2、四个数码管的管脚分配如下:(ABCDEFG为七段LED,H为小数点,共阳极连接。

四、总结与讨论

通过这为期四天的数字电路模拟训练,我获益匪浅:

1、 通过这次课程设计,我学会了并且可以比较熟练的使用QuartusII可编程逻辑器件开发软件。

2、我对“基于FPGA的4位智能抢答器”的运行原理有了更加深入的认识,可以自行设计这种抢答器,为我以后的实验设计积累了宝贵的经验。 3、我对Verilog HDL有了深入的认识。同时也对EDA/SOPC产生了更加浓厚的兴趣。通过本学期对《数字电子技术基础》第六章的学习,以及这几天为了完成课程设计的任务而查阅的视频、文字资料,我已经可以比较熟练的运用Verilog HDL语言进行简单程序的编写。掌握了这一门技术将对我以后的发展有很大的帮助。

4、通过这四天的实践,我的分析能力大大的提升,动手操作能力也有所提高,即使天气炎热,我也平心静气的做程序,搞测试,我知道了,无论做什么事,都要相信自己,戒骄戒躁,不会的东西就学会自己查资料,自学,实在不懂得再向老师同学请教,心态是最重要的。虽然到最后由于时间原因没有测试完,但是经历是最后重要的,这些经历将为我以后

带来莫大的好处。

但是,我这几天以来也存在很多不足,首先,一开始有点知难而退的心里,其次,有不少的地方还没完全弄明白,尤其是那个LED即时显示模块还没有完全搞懂,设计任务与要求中的第7条附加条件,即“加入按键软件消抖功能及加减分数显示计分功能;能够设置不同的抢答时间,以便应用于不同的抢答系统”这个功能不知道怎么实现。另外,对于在控制端口在满足上升沿计数达到1000时在“0”和“1”之间进行变换这个程序请教过同学,但是也是还没有完全搞懂。“分频”这一块还需之后自己在攻克。

这个课程设计在7月10号上午考完试已完成,从设计到测试和检测过程,无不凝聚着老师们的心血和汗水。在我实习期间,老师为我提供了种种专业知识上的指导,同学们为我提供宝贵的建议,老师们严谨求实的态度和同学们真诚的热情使我深受感动,没有这样的帮助和关怀和熏陶,我不会这么顺利的完成实训任务。

最后,我向老师跟同学们发出真诚的感谢,老师您辛苦了,谢谢您陪伴我们这五天,您的敬业是我们实习成功的最大动力。

因篇幅问题不能全部显示,请点此查看更多更全内容