您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数字竞赛抢答器课程设计Verilog语言实现
可编程器件与应用课程设计报告姓名:XXX学号:XXXXXXXXXX专业班级:信息XXX题目:数字式竞赛抢答器指导老师:1一、绪论背景:随着电子技术的发展,可编程逻辑器件(PLD)的出现,使得电子系统的设计者利用EDA(电子设计自动化)软件,就可以独立设计自己的专用集成电路(ASIC)器件。可编程逻辑器件是一种半导体集成器件的半成品。在可编程逻辑器件的芯片中按一定方式(阵列形式或单元阵列形式)制作了大量的门、触发器等基本逻辑器件,对这些基本器件适当地连接,就可以完成某个电路或系统的功能。数字式竞赛抢答器控制系统是工厂、学校和电视台等单位举办各种智力竞赛等娱乐活动中经常使用的重要基础设备之一。目前设计抢答器的方法很多,例如用传统的PCB板设计、用PIC设计或者用单片机设计。而用Verilog可以更加快速、灵活地设计出符合各种要求的抢答器,优于其他设计方法,使设计过程达到高度自动化。本文介绍的4路数字式竞赛抢答器基于Verilog语言、以EDA技术作为开发手段、采用CPLD(复杂的可编程逻辑器件)作为控制核心设计而成。与传统设计相比较,不仅简化了接口和控制,也提高了系统的整体性能和工作可靠性,具有电路简单、成本低廉、操作方便、灵敏可靠等优点。意义:数字式竞赛抢答器作为一种电子产品,早已广泛应用于各种智力和知识竞赛场合,但目前所使用的抢答器存在分立元件使用较多,造成每路的成本偏高,而现代电子技术的发展要求电子电路朝数字化、集成化方向发展,因此设计出数字化全集成电路的多路抢答器是现代电子技术发展的要求。二、实现方案设计要求:1、设计一个可容纳4组参赛的数字式抢答器,每组设一个按钮,供抢答使用。2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。3、设置一个主持人“复位”按钮。4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出2~3秒的音响。5、设置一个计分电路,每组开始预置5分,由主持人记分,答对一次加1分,答错一次减1分。6、设置犯规电路,对超时答题(例如1分钟)的组别鸣笛示警,并由组别显示电路显示出犯规组别,该轮该选手退出,由裁判员重新发令,其他人再抢答。设计方案:此设计问题可分为第一信号鉴别、锁存模块,答题计时电路模块,计分电路模块和扫描显示模块四部分。第一信号鉴别锁存模块的关键是准确判断出第一抢答者并将其锁存,在得到第一信号后,将输入端封锁,使其他组的抢答信号无效,可以用触发器或锁存器实现。设置抢答按钮K1、K2、K3、K4,主持人复位信号judge,蜂鸣器驱动信号buzzout。judge=0时,第一信号鉴别、锁存电路、答题计时电路复位,在此状态下,若有抢答按钮按下,鸣笛示警并显示犯规组别;judge=1时,开始抢答,由第一信号鉴别锁存电路形成第一抢答信号,进行组别显示,控制蜂鸣器发出声响,并启动答题计时电路,若计时时间到,主持人复位信号还没有按下,则由蜂鸣器发出犯规示警声。计分电路是一个相对独立的模块,采用十进制加/减计数器、数码管数码扫描显示,设置复位信号Reset、加减分信号add_min,加减分状态键key_state,Reset=0时所有得分回到2起始分(5分),且加、减分信号无效;Reset=1时,由第一信号鉴别、锁存电路的输出信号选择进行加减分的组别,当key_state=1时,按一次add_min,第一抢答组加1分;当key_state=0时,每按一次add_min,则减1分。以下为每个模块的设计过程。三、程序及仿真/******************************************************************顶层模块信号定义:clk:基准时钟输入信号;k1,k2,k3,k4:抢答按钮输入信号;seg:数码管段输出引脚;sl:数码管位输出引脚;add_min:加减分按键;key_state:加减分模式选择按键;reset:初始5分设置键信号;judge:裁判员抢答开始键信号;o5:超时信号;o1、o2、o3、o4:抢答组别LED显示输出信号;buzz:示警输出信号;******************************************************************/moduleqiangdaqi(clk,k1,k2,k3,k4,seg,sl,add_min,key_state,reset,judge,o1,o2,o3,o4,o5,buzz,vg,sel);inputclk,k1,k2,k3,k4,add_min,key_state,reset,judge;output[7:0]seg;output[3:0]sl;outputregsel;outputo1,o2,o3,o4,o5,vg;outputbuzz;reg[3:0]vg=0010;wireo1,o2,o3,o4;wire[3:0]s1,s2,s3,s4;/*模块引用*/selQ1(clk,k1,k2,k3,k4,judge,o1,o2,o3,o4,o5,buzz);//调用抢答信号锁存显示电路countQ2(clk,o1,o2,o3,o4,add_min,key_state,reset,s1,s2,s3,s4);//调用计分电路dledQ3(seg,sl,s1,s2,s3,s4,clk);//调用数码管显示电路endmodule/****************************************************************信号锁存电路信号定义:CLK:时钟信号;K1、K2、K3、K4、K5、K6:抢答按钮信号;out1、out2、out3、out4、out5、out6:抢答LED显示信号;judge:裁判员抢答开始信号;buzzout:示警输出信号;flag:答题是否超时的标志;****************************************************************/modulesel(clk,k1,k2,k3,k4,judge,out1,out2,out3,out4,out5,buzzout);inputclk,k1,k2,k3,k4,judge;outputout1,out2,out3,out4,out5,buzzout;regout1,out2,out3,out4,out5,block,buzzout;reg[32:0]count;reg[27:0]counter;regflag;always@(posedgeclk)begincounter=counter+1;//裁判员发开始抢答信号,初始指示灯灭,蜂鸣器禁声if(!judge)begin{out1,out2,out3,out4,out5,block}=6'b111110;count=0;flag=0;endelsebeginif(!k1)//第一组别按键是否按下beginif(!block)beginout1=0;//点亮第一组别指示灯block=1;//封锁别组抢答信号count=1;//第一组已按下按钮,可启动答题计时器endendelseif(!k2)//第二组别按键是否按下3beginif(!block)beginout2=0;block=1;count=1;endendelseif(!k3)//第三组别按键是否按下beginif(!block)beginout3=0;block=1;count=1;endendelseif(!k4)//第四组别按键是否按下beginif(!block)beginout4=0;block=1;count=1;endendend/*答题计时开始,并判断是否答题超时*/if(count!=0)beginif(count==32'hc11e7a00)//如果答题时间到了1分钟,亮犯规灯begincount=0;out5=0;flag=1'b1;endelsebegincount=count+1;endendend////蜂鸣器发声always@(counter[7])if(flag==1)buzzout=!(counter[11]&counter[22]&counter[27]);elsebuzzout=1'b0;endmodule/**************************************************************去键盘抖动信号定义:clkin:基准时钟输入信号;clkout:周期为20ms的信号输出;*************************************************************/modulef_1M(clkin,clkout);Inputclkin;outputclkout;regclkout;reg[18:0]count;always@(negedgeclkin)if(count==19'd500000)begincount=19'd000000;clkout=~clkout;endelsecount=count+1'b1;endmodule/**************************************************************计分电路信号定义:clk:时钟信号;c1,c2,c3,c4:抢答组别输入信号;add_min:加减分按钮;key_state:加减分标志按钮;reset:初始5分设置信号;count1:第一组得分输出;count2:第二组得分输出;count3:第三组得分输出;count4:第四组得分输出;*************************************************************/modulecount(clk,c1,c2,c3,c4,add_min,key_state,reset,count1,count2,count3,count4);inputclk,c1,c2,c3,c4,add_min,key_state,reset;output[3:0]count1,count2,count3,count4;4reg[3:0]count1,count2,count3,count4;wireclk0;regkeyout;f_1Mf_1Ma(clk,clk0);//引用获得20毫秒的子模块always@(negedgeclk0)keyout=add_min;always@(posedgekeyout)//根据相应组别加减分beginif(!reset)//初始化各组的起始分数{count1,count2,count3,count4}=16'h5555;if(!key_state)//key_state为低电平,选组别减分模式beginif(!c1)//第一组别减1分,最高分为10分,最低分为0分beginif(count1!=4'b0000)count1=count1-1;endif(!c2)//第二组别减1分,最高分为10分,最低分为0分beginif(count2!=4'b0000)count2=count2-1;endif(!c3)//第三组别减1分,最高分为10分,最低分为0分beginif(count3!=4'b0000)count3=count3-1;endif(!c4)//第四组别减1分,最高分为10分,最低分为0分beginif(count4!=4'b0000)count4=count4-1;endendelse//key_state为高电平,选组别加分模式beginif(!c1)//第一组别加分,最高分为10分,最低分为0分beginif(count19)count1=0;elsecount1=count1+1;endif(!c2)//第二组别加分,最高分为10分,最低分为0分beginif(count29)count2=0;elsec
本文标题:数字竞赛抢答器课程设计Verilog语言实现
链接地址:https://www.777doc.com/doc-4329921 .html