您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > VHDL的智能抢答器
基于VHDL的智能抢答器3智能抢答器系统的设计与实现3.1抢答器系统设计要求一台功能完善的智能抢答器,必须能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者,并设置一定的回答限制时间,让抢答者在规定时间内答题,主持人根据答题结果实行增减分的操作,并将分数显示在屏幕上。所以我们在设计智能抢答器的模块需要满足鉴别、计时、计分、数显等功能,具体设计要求如下:(1)抢答器可容纳四组选手,并为每组选手设置一个按钮供抢答者使用;为主持人设置一个控制按钮,用来控制系统清零(组别显示数码管灭灯)和抢答开始;(2)电路具有对第一抢答信号的锁存、鉴别和显示等功能。在主持人将系统复位并发出抢答指令后,蜂鸣器提示抢答开始,计时显示器显示初始时间并开始倒计时,若参赛选手按下抢答按钮,则该组别的信号立即被锁存,并在组别显示器上显示该组别,同时扬声器也给出音响提示,此时,电路具备自锁功能,使其他抢答按钮不起作用。(3)如果无人抢答,计时器倒计时到零,蜂鸣器有抢答失败提示,主持人可以按复位键,开始新一轮的抢答。(4)抢答器具有限时抢答的功能,且一次抢答的时间由主持人设定,本抢答时间设定为60秒。当主持人启动开始键后,要求计时器采用倒计时,同时最后十秒扬声器会发出声响提示;(5)参赛选手在设定的时间内抢答,则抢答有效,定时器停止工作,主持人根据抢答结果给出分数,并由数码管显示选手的组别、抢答分数,并一直保持到主持人将系统清零为止。【6】3.2系统总体设计思想本设计为四路智能抢答器,所以这种抢答器要求有四路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;对回答问题所用的时间进行计时、显示、超时报警、预置答题时间,同时该系统还应有复位、倒计时启动功能。抢答过程:主持人按下系统复位键(RST),系统进入抢答状态,计时模块输出初始信号给数码显示模块并显示出初始值。当某参赛组抢先将抢答键按下时,系统将其余三路抢答信号封锁,同时扬声器发出声音提示,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到下一轮主持人将系统清零为止。主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时,在规定的时间内根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。当主持人给出倒计时停止信号时,扬声器停止鸣叫。若参赛者在规定时间内回答完为题,主持人可给出倒计时计数停止信号,以免扬声器鸣叫。主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来。图3-1系统的总体框图3.3子模块的设计思想和实现根据对抢答器的功能要求,把要设计的系统划分为五个功能模块:抢答信号鉴别模块、计时模块、计分模块、数码显示模块和扬声器控制电路,具体的说,显示模块又包含最先抢答的组别显示电路、计时值显示电路和计分显示电路。【8】3.3.1鉴别模块的设计与实现抢答鉴别模块用来准确直观地判断A、B、C、D四组抢答者谁最先按下按钮,并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。抢答鉴别模块的元件图如下图所示:图3-2鉴别模块元件框图引脚作用:输入信号:各组的抢答按钮A、B、C、D,系统清零信号INI。输出信号:各组的抢答按钮显示端A1、B1、C1、D1,组别显示端G[3..0]。原理:第一个按下键的小组,抢答信号判定电路LOCK通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的锁存器清零,组别显示、计时和计分会保存到主持人对系统进行清零操作时为止。当INI=1时系统复位,使组别显示信号G=0000,各组的指示灯信号A1=0,B1=0,C1=0,D1=0;当INI=0,即低电平有效,使其进入抢答鉴别状态,到CLK的上升沿到来时,以A组抢答成功为例,当输入信号为A=1,B=0,C=0,D=0,输出信号G=1000,A1=1,即为鉴别出A组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。同理其他组别抢答成功也是这样的鉴别过程。【9】备注:理论上来说,A、B、C、D四组抢答,应该有从0000—1111等16种可能情况,但是由于时钟信号的频率很高而且是在时钟信号上升沿的状况下才做出的鉴别,所以在这里两组以上同时抢答成功的可能性非常小,因此可以只设计四种情况,即A、B、C、D分别为1000、0100、0010、0001,这大大简化了电路的设计复杂性。其用VHDL语言进行编程的流程图如下图所示:图3-3抢答鉴别模块的流程图3.3.2计时模块的设计与实现当抢答鉴别模块成功判别出最先按下抢答按钮的参赛组后,在成功鉴别出哪组最先抢答后,主持人按下计时信号,则进入计时状态。计时模块可分作两部分:(1)预置数;(2)60秒倒计时。60秒时间用两个数码管QA,QB显示,其中QA表示60秒的个位,QB表示60秒的十位。计时模块开始工作从预置初始值开始以秒计时,计时至0秒时停止,时间耗尽时,扬声器会发出超时报警信号,以中止答题。图3-4计时模块的元件图该系统输入信号有:系统清零信号CLR,计时预置控制端LDN,计时使能端EN,系统时钟信号CLK,计时预置数据调整按钮TA、TB。系统输出信号有:倒计时输出端QA[3..0]、QB[3..0]。当清零信号CLR=1时,模块输出信号QA=0000,QB=0000。当预置数控制信号LDN=1可通过TA来调整QA,TA来一次高电平,则QA的数值就加1;用TB来调整QB,通过这两个调整信号可调整参赛者答题所需要的时间。在CLR=0,LDN=0,EN=1时,通过时钟信号CLK的上升沿来进行60秒到计时。3.3.4译码显示模块的设计与实现该模块实际上是一个译码器,作用是用来显示组别,时间和成绩,其主要原理是四位二进制BCD编码转换成七段二进制数字,以阿拉伯数字的形式输出在数码管上,使观众能够更直观的看到结果。3.3.5抢答器的系统实现单独模块只有彼此联系起来构成一个完整的系统,才能实现其功能,这个过程有两种实现方法:①元件例化。也是用编程的方式将它们各个程序、信号、输入输出之间的关系用VHDL语言来叙述清楚,还关系到程序的调用问题,需要设计者思路清晰,设计合理;②元器件图示连线。这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查。在设计中选择的是这种方法。通过总的顶层元件图可以很清晰的看到模块连接的原理。图3-8顶层元件图4智能抢答器子模块的仿真验证4.1鉴别模块的仿真验证进行编译,综合,仿真,时序图如下:图4-1鉴别模块的仿真时序图引脚作用:系统输入信号:各组的抢答按钮A、B、C、D,系统清零信号CLR,CLK时钟信号。系统的输出信号:各组的抢答按钮显示端A1、B1、C1、D1,组别显示端控制信号G[3..0]。仿真分析:当鉴别模块的清零信号CLR为高电平时,无论A、B、C、D四组参赛者谁按下抢答按钮,系统输出均为零,同时组别显示端G输出信号也显示为零;当清零信号CLR为低电平时,A、B、C、D四组参赛者谁先按下抢答按钮,组别显示端就显示该组别的号码。假如C组按下抢答按钮时,组别输出为0010,同时C组的显示灯被点亮。仿真图上显示的为A先抢答,因为在0-1.28微秒之间A、C虽然都按抢答键,但CLR为有效状态,所以在此时间段内的抢答无效。4.2计时模块的仿真验证进行编译,综合,仿真,时序图如下:图4-2计时模块的仿真时序图引脚作用:系统输入信号:系统清零信号CLR,计时预置控制端LDN,计时使能端EN,系统时钟信号CLK,计时预置数据调整按钮TA、TB。系统输出信号:倒计时输出端QA[3..0]、QB[3..0]。仿真分析:当系统清零信号CLR=1时,计时器的时钟信号回到计时预置倒计时起始状态,此时倒计时输出端QA=0000,QB=0000.当计时使能端EN=0,计时预置控制端LDN=1时,通过计时预置数据调整按钮TA、TB进行预制数,并且通过TA,TB来调整QA,QB即当TA=1时,则QA的数值加1,当TB=1时,则QB的数值也加1。当计时使能端EN=1,系统清零信号CLR=0,并且计时预置控制端LDN=0时,通过时钟信号上升沿CLK来进行60秒倒计时。4.4数显模块的仿真验证进行编译,综合,仿真,时序图如下:图4-4数显模块的仿真时序图引脚作用:输入信号:AIN4;输出信号:DOUT7。仿真分析:当AIN4=0000,DOUT7输出1111110,此时数码管显示0;当AIN4=0001,DOUT7输出0110000,此时数码管显示1;当AIN4=0010,DOUT7输出1101101,此时数码管显示2;当AIN4=0011,DOUT7输出1111001,此时数码管显示3;当AIN4=0100,DOUT7输出0110011,此时数码管显示4;当AIN4=0101,DOUT7输出1011011,此时数码管显示5;当AIN4=0110,DOUT7输出1011111,此时数码管显示6;当AIN4=0111,DOUT7输出1110000,此时数码管显示7;当AIN4=1000,DOUT7输出1111111,此时数码管显示8;当AIN4=1001,DOUT7输出1111011,此时数码管显示9;结束语本文主要介绍了利用VHDL语言设计智能抢答器的详细流程,并横向介绍了一些关于此设计的背景知识,比如EDA的应用、设计流程等等。在设计的过程中,文章通过对比传统的自底向上的设计方法和和现代EDA的自顶向下的设计方法,突出了EDA设计方法的优越性。在这次设计中,我们也遇到了一些问题,比如设置输入信号不合适时,时序图也会出现一些毛刺现象。同时,我也发现了自己的许多不足。首先,最初开发时,对系统没有一个完整的思路,考虑不是很全面,所以系统功能设计时,碰到不少困难,也耽搁了不少时间。其次,我发现自己对于书本上的很多知识还不够熟悉,对开发工具的掌握还不算很全面,有很多我们需要掌握的知识还没掌握,所以在设计编程、编译以及仿真过程中走了不少弯路。再次,在论文的整理过程中,我对word文档的操作技能不是很娴熟,所以在以后的学习生活中,我会努力并尽量弥补我所缺少的一些相关知识,不断提高自己的操作能力附录附录1抢答鉴别模块VHDL程序(QDJB.VHD)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYQDJBISPORT(CLR:INSTD_LOGIC;CLK:INSTD_LOGIC;A,B,C,D:INSTD_LOGIC;A1,B1,C1,D1:OUTSTD_LOGIC;G:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDQDJB;ARCHITECTUREARTOFQDJBISCONSTANTW1:STD_LOGIC_VECTOR:=0001;CONSTANTW2:STD_LOGIC_VECTOR:=0010;CONSTANTW3:STD_LOGIC_VECTOR:=0100;CONSTANTW4:STD_LOGIC_VECTOR:=1000;BEGINPROCESS(CLR,A,B,C,D)BEGINIFCLR='1'THENG=0000;ELSIF(A='1'ANDB='0'ANDC='0'ANDD='0')THENA1='1';B1='0';C1='0';D1='0';G=W1;ELSIF(A='0'ANDB='1'ANDC='0'ANDD='0')THENA1='0';B1='1';C1='0';D1='0';G=W2;ELSIF(A='0'ANDB
本文标题:VHDL的智能抢答器
链接地址:https://www.777doc.com/doc-5390927 .html