桂林电子科技大学信息科技学院《EDA技术及应用》实训报告学号1152100135姓名殷浩指导教师:江国强窦文淼2013年5月10日实训题目:智能电子抢答器1.系统设计1.1设计要求1.1.1设计任务设计并制作一台智能电子抢答器。1.1.2技术要求①用EDA实训仪的I/O设备和PLD芯片实现智能电子抢答器的设计。②智能电子抢答器可容纳4组参赛者抢答,每组设一个抢答钮。③电路具有第一抢答信号的鉴别和锁存功能。在主持人将复位按钮按下后开始抢答,并用EDA实训仪上的八段数码管显示抢答者的序号,同时扬声器发出“嘟嘟”的响声,并维持3秒钟,此时电路自锁,不再接受其他选手的抢答信号。④设计一个计分电路,每组在开始时设置为100分,抢答后由主持人计分,答对一次加10分,答错一次减10分。⑤设计一个犯规电路,对提前抢答和超时抢答者鸣喇叭示警,并显示犯规的组别序号。1.2设计思路及设计框图1.2.1设计思路利用鉴别与锁存先确定第一抢答选手的号数,并用数码管显示其对应组号,通过输入信号,将组号传入计分模块,让计分模块显示对应组的分数,再通过加减按键对该组进行加减。最后复位,进行新一轮的抢答。犯规模块与抢答模块的思路基本相同,也要锁存与鉴别第一抢答选手。1.2.2总体设计框图主持人按下复位键,倒计时回归30秒主持人读题,选手准备开始抢答主持人按下开始按键,30秒倒计时开始,允许选手抢答。主持人没有按下开始按键,选手犯规抢答。有人抢答,绿灯闪3秒同时显示选手号绿灯闪3秒同时长亮一灯,并显示选手号倒计时结束,黄灯亮起;若此时有人抢答,则红灯也亮起,并显示选手号。主持人根据选手答题的对错进行加减分的操作显示各选手的分数2.各个模块程序的设计(1)分频器模块模块代码:modulefpq(clk,cout);inputclk;reg[24:0]q;outputregcout;always@(posedgeclk)beginif(q20000000-1)q=q+1;elseq=0;if(q==20000000-1)cout=1;elsecout=0;endendmodule(2)30秒倒计时模块模块代码:modulecnt30(clk,clr,ks,zt,q,bout);inputclk;inputclr;inputks;inputzt;outputreg[7:0]q;outputregbout;regkz1;always@(posedgeclkornegedgeclrornegedgeksornegedgezt)beginif(~clr)beginkz1=1;q='h30;bout='h0;endelseif(~ks)kz1=0;elseif(~zt)kz1=1;elsebeginif(kz1==0)beginif(q==0)q='h0;elseq=q-1;if(q[3:0]=='hf)q[3:0]=9;elseif(q==0)bout=1;elsebout=0;endendendendmodule(3)抢答模块模块代码:moduleqdmk(en,clr,k1,k2,k3,k4,q,f,e);inputen;inputclr;inputk1;inputk2;inputk3;inputk4;outputreg[7:0]q;outputregf;outputrege;regg;regh;alwaysbeginif(~clr)beginq=0;g=0;h=0;f=0;e=1;endelseif(~en)beginq=0;h=1;g=0;e=1;endelsebeginif(g==0)beginif(~k1)beginq=1;g=1;e=0;endelseif(~k2)beginq=2;g=1;e=0;endelseif(~k3)beginq=3;g=1;e=0;endelseif(~k4)beginq=4;g=1;e=0;endendif(h==0)beginif(~k1)beginq=1;h=1;f=1;endelseif(~k2)beginq=2;h=1;f=1;endelseif(~k3)beginq=3;h=1;f=1;endelseif(~k4)beginq=4;h=1;f=1;endendendendendmodule(4)计分模块模块代码:modulejsq(clk,p,m,k1,clr,e,clrn);inputp,m;input[7:0]k1;inputclk;inputclr;inputclrn;outputreg[7:0]e;reg[7:0]c,d,f,g;always@(negedgeclkornegedgeclrornegedgeclrn)beginif(~clr)beginc[7:4]=1;c[3:0]=0;d[7:4]=1;d[3:0]=0;f[7:4]=1;f[3:0]=0;g[7:4]=1;g[3:0]=0;endelseif(~clrn)e=0;elseif(k1==1)beginif(p==1)beginif(c[3:0]9&&c[7:4]!=9)c[3:0]=c[3:0]+1;elseif(c[3:0]==9&&c[7:4]!=9)beginc[3:0]=0;c[7:4]=c[7:4]+1;endelseif(c[3:0]==9&&c[7:4]==9)beginc[3:0]=9;c[7:4]=9;ende=c;endelseif(m==1)beginif(c[3:0]==0&&c[7:4]==0)beginc[3:0]=0;c[7:4]=0;endelseif(c[3:0]==0&&c[7:4]!=0)beginc[3:0]=9;c[7:4]=c[7:4]-1;endelseif(c[3:0]!=0&&c[7:4]==0)c[3:0]=c[3:0]-1;elseif(c[3:0]!=0&&c[7:4]!=0)beginc[7:4]=c[7:4];c[3:0]=c[3:0]-1;ende=c;endelsee=c;endelseif(k1==2)beginif(p==1)beginif(d[3:0]9&&d[7:4]!=9)d[3:0]=d[3:0]+1;elseif(d[3:0]==9&&d[7:4]!=9)begind[3:0]=0;d[7:4]=d[7:4]+1;endelseif(d[3:0]==9&&d[7:4]==9)begind[3:0]=9;d[7:4]=9;ende=d;endelseif(m==1)beginif(d[3:0]==0&&d[7:4]==0)begind[3:0]=0;d[7:4]=0;endelseif(d[3:0]==0&&d[7:4]!=0)begind[3:0]=9;d[7:4]=d[7:4]-1;endelseif(d[3:0]!=0&&d[7:4]==0)d[3:0]=d[3:0]-1;elseif(d[3:0]!=0&&d[7:4]!=0)begind[7:4]=d[7:4];d[3:0]=d[3:0]-1;ende=d;endelsee=d;endelseif(k1==3)beginif(p==1)beginif(f[3:0]9&&f[7:4]!=9)f[3:0]=f[3:0]+1;elseif(f[3:0]==9&&f[7:4]!=9)beginf[3:0]=0;f[7:4]=f[7:4]+1;endelseif(f[3:0]==9&&f[7:4]==9)beginf[3:0]=9;f[7:4]=9;ende=f;endelseif(m==1)beginif(f[3:0]==0&&f[7:4]==0)beginf[3:0]=0;f[7:4]=0;endelseif(f[3:0]==0&&f[7:4]!=0)beginf[3:0]=9;f[7:4]=f[7:4]-1;endelseif(f[3:0]!=0&&f[7:4]==0)f[3:0]=f[3:0]-1;elseif(f[3:0]!=0&&f[7:4]!=0)beginf[7:4]=f[7:4];f[3:0]=f[3:0]-1;ende=f;endelsee=f;endelseif(k1==4)beginif(p==1)beginif(g[3:0]9&&g[7:4]!=9)g[3:0]=g[3:0]+1;elseif(g[3:0]==9&&g[7:4]!=9)beging[3:0]=0;g[7:4]=g[7:4]+1;endelseif(g[3:0]==9&&g[7:4]==9)beging[3:0]=9;g[7:4]=9;ende=g;endelseif(m==1)beginif(g[3:0]==0&&g[7:4]==0)beging[3:0]=0;g[7:4]=0;endelseif(g[3:0]==0&&g[7:4]!=0)beging[3:0]=9;g[7:4]=g[7:4]-1;endelseif(g[3:0]!=0&&g[7:4]==0)g[3:0]=g[3:0]-1;elseif(g[3:0]!=0&&g[7:4]!=0)beging[7:4]=g[7:4];g[3:0]=g[3:0]-1;ende=g;endelsee=g;endendendmodule(5)超时模块模块代码:modulecs(d,bout,dout,eout);input[7:0]d;inputbout;outputregdout;outputregeout;alwaysbeginif(bout==1)beginif(d==0)begindout=1;eout=0;endelsebegindout=1;eout=1;endendelsebegindout=0;eout=0;endendendmodule(6)闪烁模块模块代码:moduless(clk,en,qb);inputclk;inputen;reg[24:0]q;regcout;reg[3:0]qa;outputregqb;always@(posedgeclk)beginif(q10000000-1)q=q+1;elseq=0;if(q10000000-1)cout=1;elsecout=0;endalways@(posedgecoutorposedgeen)beginif(en==1)qa=6;elseif(qa==0)qa=0;elseqa=qa-1;endalways@(qa)beginif(qa==6)qb=0;elseif(qa==5)qb=1;elseif(qa==4)qb=0;elseif(qa==3)qb=1;elseif(qa==2)qb=0;elseif(qa==1)qb=1;elseif(qa==0)qb=0;endendmodule各模块的组合3.调试过程打开QuartusII7.0主窗口,选择新建工程,新建VerilogHDL文本(1)用VerilogHDL设计语言编写用于20M分频模块,产生秒脉冲用于倒计时。(2)用VerilogHDL设计语言编写用于倒数计时的十进制模块。(3)用VerilogHDL设计语言编写抢答与犯规模块。(4)用VerilogHDL设计语言编写加减分模块。(5)将设计好的文本模块添加到元件库中,最后新建原理图,将电路连好线,编译成功后进行管脚锁定。准确无误后,载入电路箱。4.功能测试4.1测试仪器与设备计算机一台EDA实训箱一台4.2性能指标测试将做好的程序锁定好管脚下载到实训箱内,按键K0~K3分别是选手1~4号,K4是开始按键,K5是复位按键,K7是清零按键,K6是加减分按键,两个拨码开关分别控制加分和减分!当按下K5时,数码管显示30秒,这时按下开始按钮K4,倒计时开始,若K0~K3其中之一按下,则绿灯闪3秒,倒计时暂停,数码管同时显示选手号;当倒计时结束时,若没人按下,则亮起黄灯,若有人按下,则黄灯红灯同时亮起,数码管显示选手号。最后拨动加分的开关,按K6进行加分,拨动减分开关,按K6进行减