文超:基于VHDL的多路抢答器的设计
2.2系统设计方案
本设计为四路智能抢答器,所以这种抢答器要求有四路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;对回答问题所用的时间进行计时、显示、超时报警、预置答题时间,同时该系统还应有复位、倒计时启动功能。
抢答过程:主持人按下系统复位键(RST),系统进入抢答状态,计时模块和计分模块输出初始信号给数码显示模块并显示出初始值。当某参赛组抢先将抢答键按下时,系统将其余三路抢答信号封锁,同时扬声器发出声音提示,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到下一轮主持人将系统清零为止。主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时,在规定的时间内根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。当主持人给出倒计时停止信号时,扬声器停止鸣叫。若参赛者在规定时间内回答完为题,主持人可给出倒计时计数停止信号,以免扬声器鸣叫。主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来。系统的总体框图如下:
【3】
图2-1系统的总体框图
2
2009届电子信息工程(应用电子技术方向)专业毕业设计(论文)
2.3 子模块的设计思想和实现
根据对抢答器的功能要求,把要设计的系统划分为五个功能模块:抢答信号鉴别模块、计时模块、计分模块、数码显示模块和扬声器控制电路,具体的说,显示模块又包含最先抢答的组别显示电路、计时值显示电路和计分显示电路。计时模块、计分模块、数码显示模块和扬声器控制电路,
3.1 抢答鉴别模块
抢答鉴别模块用来准确直观地判断A、B、C、D四组抢答者谁最先按下按钮,并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。
抢答鉴别模块的元件图如下图所示:
图3-1 鉴别模块元件框图 引脚作用:
输入信号:各组的抢答按钮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组抢答成功,同时屏蔽其他组的输
【3】入信号,以免发生错误。同理其他组别抢答成功也是这样的鉴别过程。
备注:理论上来说,A、B、C、D四组抢答,应该有从0000—1111等16种可能情况,但是由于时钟信号的频率很高而且是在时钟信号上升沿的状况下才做出的鉴别,所以在这里两组以上同时抢答成功的可能性非常小,因此可以只设计四种情况,即A、B、C、D分别为1000、0100、0010、0001,这大大简化了电路的设计复杂性。
其用VHDL语言进行编程的流程图如下图所示:
3
文超:基于VHDL的多路抢答器的设计
图3-2 抢答鉴别模块的流程图 3.2 计时模块
当抢答鉴别模块成功判别出最先按下抢答按钮的参赛组后,在成功鉴别出哪组最先抢答后,主持人按下计时信号,则进入计时状态。计时模块可分作两部分:(1)预置数;(2)60秒倒计时。60秒时间用两个数码管QA,QB显示,其中QA表示60秒的个位,QB表示60秒的十位。计时模块开始工作从预置初始值开始以秒计时,计时至0秒时停止,时间耗尽时,扬声器会发出超时报警信号,以中止答题。
图3-3 计时模块的元件图
该系统输入信号有:系统清零信号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,通过这两个调
4
2009届电子信息工程(应用电子技术方向)专业毕业设计(论文)
整信号可调整参赛者答题所需要的时间。在CLR=0,LDN=0,EN=1时,通过时钟信号CLK的上
【1】
升沿来进行60秒到计时。其用VHDL语言进行编程的流程图如下:
开始 CLR=LDN=0 TA=1 LDN=1 CLK上TA=0 EN=1 QA<=QQB<=Q
图3-4 抢答计时模块的流程图
3.3 计分模块
计分模块的运行方式是按照十进制进行加减,即当时钟出现上升沿时就进行加一或者减
一的操作。
记分模块为哪组进行记分取决于鉴别模块的输入信号G,当G=1000时表示A组最先抢答,则在此模块中为A组记分,当G=0100时表示B组最先抢答,则在此模块中为B组记分,当G=0010时表示C组最先抢答,则在此模块中为C组记分,当G=0001时表示D组最先抢答,则在此模块中为D组记分。
以A组为例来说明此模块的设计,当复位信号RST=1时,系统复位且A组的分值显示
初始值,为100分。当RST=0时,如果该组选手答题正确,则主持人按下加分键,即ADD=1,此时对该组进行加分操作;如果该组选手答题错误,则主持人按下减分键,即SUB=1,此时对该组进行减分操作。 计分模块的元件图如下图所示:
5
文超:基于VHDL的多路抢答器的设计
图3-5 计分模块的元件图
系统的输入信号有:计分复位端RST,加分按钮端ADD,减分按钮端SUB,组别号输入端CHOS[3..0]。系统的输出信号有:A组分数输出端AA2[3..0]、AA1[3..0]、AA0[3..0],B组分数输出端BB2[3..0]、BB1[3..0]、BB0[3..0],C组分数输出端CC2[3..0]、CC1[3..0]、CC0[3..0],D组分数输出端DD2[3..0]、DD1[3..0]、DD0[3..0]。 计分模块用VHDL语言进行编程的流程图如下:
图3-6计分模块的设计状态图
注:在设计中减法的实现是以加法运算来实现的。也以A为例,由于每次减分都是减去10分,即每次为POINTS_A1减一,所以可以用POINTS_A1+ \来实现。如:0111-0001=0110,用加法实现:0111+1111=10110。由于POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0),所以POINTS_A1=0110。
6