您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 数字式竞赛抢答器VHDL
1/15数字系统设计与硬件描述语言期末考试作业题目:数字式竞赛抢答器设计学院:电子信息工程专业:电子信息工程学号:姓名:2/15一、选题设计描述1.功能介绍此设计用于竞赛的四人抢答,有如下的功能:(1)具有多路抢答功能,台数设计为四;(2)具有抢答器开始后30秒倒计时,30秒后无人抢答显示超时,并报警;(3)能显示超前抢答犯规,并警报;(4)能显示各组得分,大队加分,答错扣分;当系统复位,主持人按下抢答开始按键,处于使能状态,抢答开始,某路抢答键按下时,该路信号将其他路信号锁存,同时抢答铃声响起,直至此路按键松开,显示该路组号。2.算法简介本设计采用分层设计思想,分为:信号鉴别模块、计时模块、计分模块、BCD译码模块、分频器,还有顶层模块。信号鉴别模块。此模块主要实现抢答器的抢答功能,并能够分辨是正常抢答还是提前抢答,选取最先按下的一路信号,锁存其余信号,实现信号选取功能。在此模块中,用到的信号为抢答信号a、b、c、d;抢答使能信号en;抢答结果信号states;警报时钟信号clk2;复位信号rst;提前抢答信号fangui。计时模块。此模块主要实现抢答过程中的计时功能,在抢答开始后进行30秒的倒计时,且在30秒后显示无人抢答报警信号。其中有抢答时钟信号clk;系统复位信号rst;抢答使能信号en;无人抢答警报信号warn;计时中止信号stop;计时十位个位信号tb,ta。计分模块。此模块主要实现给四个抢答器计分的功能,初始条件下,为每个抢答器信号预制5分,当某组抢答且回答正确时加一分,答错减一分,未获答题机会时保持不变。其中设有时钟信号clk;复位信号rst;抢答使能信号en;抢答结果显示信号states;记分加减信号add(add=‘1’时为加,add=‘0’时为减);四个信号的得分显示信号a_out,b_out,c_out,d_out。BCD译码模块。此模块主要实现将抢答结果信号显示在bcd七段译码器上。其中输入信号a;输出译码结果信号q。分频器。此模块主要实现时钟分频功能。在开头对时钟信号进行一次千分频。其中时钟输入信号clkin,输出信号clk。顶层模块。将前几个模块综合在一起,形成一个整体。分频器输出作为其他模块所需的时钟信号,使整个系统正常运转。二、程序源代码及说明抢答信号鉴别模块的程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityqdjbisport(clk2,en,rst:instd_logic;3/15a,b,c,d:instd_logic;fangui:outstd_logic;states:outstd_logic_vector(3downto0));endqdjb;architectureoneofqdjbissignalsinor,fanguif,tmp:std_logic;signalcnt:std_logic_vector(5downto0);beginsinor=aorborcord;p1:process(a,rst,b,c,d,tmp)beginifrst='1'then--复位信号有效,系统复位。tmp='1';states=0000;elsiftmp='1'thenifa='1'then--判断哪路信号变化,进行选取states=0001;tmp='0';--对states进行置数elsifb='1'thenstates=0010;tmp='0';elsifc='1'thenstates=0011;tmp='0';elsifd='1'thenstates=0100;tmp='0';elsetmp='1';states=0000;endif;endif;endprocessp1;p2:process(clk2,en,rst,cnt)--判断是否提前抢答并报警beginifrst='1'thencnt=000000;fanguif='0';--初始化提前抢答犯规信号elsifclk2'eventandclk2='1'then4/15ifen='0'andsinor='1'thenifcnt111111thenfanguif=notfanguif;cnt=cnt+1;elsefanguif='0';endif;endif;endif;endprocessp2;fangui=fanguif;endone;计时模块的程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjsisport(clk,rst,en,stop:instd_logic;warn:bufferstd_logic;ta,tb:bufferstd_logic_vector(3downto0));endjs;architectureoneofjsissignalco:std_logic;beginp1:process(clk,rst,en,stop,ta)--个位计时信号进行0到9循环计数beginifrst='1'orstop='1'thenta=0000;elsifclk'eventandclk='1'thenco='0';ifen='1'thenifta=0000thenta=1001;co='1';5/15elseta=ta-1;endif;endif;endif;endprocessp1;p2:process(co,rst,en,stop,tb)--十位计时信号0到3变化beginifrst='1'orstop='1'thentb=0011;elsifco'eventandco='1'thenifen='1'theniftb=0000thentb=0011;elsetb=tb-1;endif;endif;endif;endprocessp2;p3:process(rst,ta,tb)--计时时间到达,报警beginifrst='1'thenwarn='0';elsifta=0000andtb=0000thenwarn='1';elsewarn='0';endif;endprocessp3;endone;计分模块的程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;6/15entityjfisport(clk,rst,en,add:instd_logic;states:instd_logic_vector(3downto0);a_out,b_out,c_out,d_out:bufferstd_logic_vector(3downto0));endjf;architectureoneofjfisbeginp1:process(clk,rst,add,states,a_out,b_out,c_out,d_out)beginif(rst='1')thena_out=0101;b_out=0101;c_out=0101;d_out=0101;--初始化置5分elsifen='1'thenifclk'eventandclk='1'thencasestatesiswhen0001=ifadd='1'then--add信号为高时,加1分ifa_out=1111then--最多15分a_out=0000;elsea_out=a_out+1;endif;elsifadd='0'then--add信号为0,减1分ifa_out=0000thena_out=0000;elsea_out=a_out-1;endif;endif;when0010=ifadd='1'thenifb_out=1111thenb_out=0000;elseb_out=b_out+1;7/15endif;elsifadd='0'thenifb_out=0000thenb_out=0000;elseb_out=b_out-1;endif;endif;when0011=ifadd='1'thenifc_out=1111thenc_out=0000;elsec_out=c_out+1;endif;elsifadd='0'thenifc_out=0000thenc_out=0000;elsec_out=c_out-1;endif;endif;when0100=ifadd='1'thenifd_out=1111thend_out=0000;elsed_out=d_out+1;endif;elsifadd='0'thenifd_out=0000thend_out=0000;elsed_out=d_out-1;endif;endif;8/15whenothers=a_out=a_out;b_out=b_out;c_out=c_out;d_out=d_out;endcase;endif;endif;endprocessp1;endone;抢答器顶层模块程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityqiangdaisport(clkin,clk2,en,a,b,c,d,add,stop,rst:instd_logic;fangui,alarm:outstd_logic;ta,tb:bufferstd_logic_vector(3downto0);states:bufferstd_logic_vector(3downto0);statesout:outstd_logic_vector(0to6);a_out,b_out,c_out,d_out:bufferstd_logic_vector(3downto0));endqiangda;architecturebhvofqiangdaiscomponentqdjbisport(clk2,en,rst:instd_logic;a,b,c,d:instd_logic;fangui:outstd_logic;states:outstd_logic_vector(3downto0));endcomponent;componentjsisport(clk,rst,en,stop:instd_logic;warn:bufferstd_logic;ta,tb:bufferstd_logic_vector(3downto0));endcomponent;9/15componentjfisport(clk,rst,en,add:instd_logic;states:instd_logic_vector(3downto0);a_out,b_out,c_out,d_out:bufferstd_logic_vector(3downto0));endcomponent;componentBCD7isport(a:instd_logic_vector(3downto0);q:outstd_logic_vector(0to6));endcomponentBCD7;componentdivfisport(clk:INSTD_LOGIC;q:OUTSTD_LOGIC;qn:OUTstd_logic_vector(9downto0));endcomponentdivf;signalcnt:std_logic_vector(3downto0);signalclk:STD_LOGIC;signaldivqn:std_logic_vector(3downto0);beginu1:qdjbportmap(clk2,en,rst,a,b,c,d,fangui,states);u2:jsportmap(clk,rst,en,stop,alarm,ta
本文标题:数字式竞赛抢答器VHDL
链接地址:https://www.777doc.com/doc-6326570 .html