基于VHDL的数显抢答器.docx
《基于VHDL的数显抢答器.docx》由会员分享,可在线阅读,更多相关《基于VHDL的数显抢答器.docx(23页珍藏版)》请在冰豆网上搜索。
![基于VHDL的数显抢答器.docx](https://file1.bdocx.com/fileroot1/2022-12/15/086962ac-457f-4031-887a-9133d32d10c9/086962ac-457f-4031-887a-9133d32d10c91.gif)
基于VHDL的数显抢答器
数字电子技术
课程设计报告
设计课题:
抢答器
学生姓名:
杨列坤
学生学号:
20090710522
专业班级:
09级电自4班
学院名称:
电气与信息工程学院
2012-6-27
基于VHDL语言的八路数字抢答器系统的设计
本课题的实现可以通过不同的方法来进行,第一种使用单元集成电路实现,第二种使用硬件描述语言(VHDL语言)实现。
第一种方法实现的大体的思路如下图所示:
图2-1数字抢答器框图
第二种方法实现的思路可以用下面的框图来说明:
图2-2基于VHDL语言实现数字抢答器框图
以上两种实现方法中,第一种方法电路较复杂不便于制作,可靠性低,实现起来很困难;而第二种方法只需要软件仿真出来,在一块EDA实验箱上就能实现,制作简单,而且成本低。
综合比较之下,我决定采用第二种方案实现本课题。
根据第二种方案的的框图所示,整个系统分为以下几个模块来分别实现:
1.抢答判别模块:
它的功能是鉴别八组中是那组抢答成功并且把抢答成功的组别信号输出给锁存模块。
2.复位控制模块:
给节目主持人设置一个控制开关,用来控制系统的清零和抢答的开始。
3.锁存模块:
该电路的作用是当第一个抢答者抢答后,对第一个抢答者的组别进行锁存并显示在数码管上,后面的抢答者信号全都无响应,直到主持人按下复位键。
4.显示报警模块:
就是把各个模块的输入的不同信号经过译码成BCD码然后直接在数码管上显示,还可以加上蜂鸣器的声音,更能给观众一个准确、简明的数字。
5.在以上功能实现后,还可以扩展实现一些其他功能,比如答题倒计时等功能。
本课题采用VHDL语言编写应用程序并调试通过,在MAX+PLUSII或者Altiumdesigner软件中仿真并分析仿真波形。
1系统的设计平台概述
此次设计是按照"自顶向下"的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(VHDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。
1.1传统和现代的数字系统设计方法比较
传统的数字系统设计方法:
基于电路板的设计方法——采用固定功能的器件(通用型器件),通过设计电路板来实现系统功能,在系统硬件设计的后期进行仿真和调试。
现代的数字系统设计方法:
基于芯片——采用PLD,利用EDA开发工具,通过芯片设计来实现系统功能,在系统硬件设计的早期进行仿真。
此系统的设计就是采用的现代的数字系统设计方法——EDA的设计方法。
其与传统的设计方法的具体优劣比较如下表:
表3-1传统设计方法与EDA设计方法的比较
传统设计方法
EDA设计方法
自底向下
自顶向下
手动设计
自动设计
软硬件分离
打破软硬件屏障
原理图设计方式
原理图、HDL等设计方式
系统功能确定
系统功能易改
不易仿真
易仿真
难测试和修改
易测试和修改
模块难移植和共享
模块可移植共享
设计周期长
设计周期短
由以上对比图可知,数字抢答器的设计采用自顶向下的设计方法较优。
而传统的电子设计的基本思路还是选择标准集成电路"自底向上"(Bottom-Up)地构造出一个新的系统,这样的设计方法就如同一砖一瓦地建造金字塔,不仅效率低、成本高而且还容易出错。
2数字抢答器系统的设计与实现
2.1抢答器系统设计要求
一般来说,设计一台数字抢答器,必须能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者,并设置一定的回答限制时间,让抢答者在规定时间内答题,主持人根据答题结果控制抢答器的清零复位,掌握比赛的进程。
所以我在设计8路数字抢答器的模块需要满足鉴别、抢答报警、回答倒计时、数显等功能,具体设计要求如下:
(1)抢答器可容纳八组选手,并为每组选手设置一个按钮供抢答者使用;为主持人设置一个控制按钮,用来控制系统清零(组别显示数码管灭灯)和抢答开始;
(2)电路具有对第一抢答信号的锁存、鉴别和显示等功能。
在主持人将系统复位并发出抢答指令后,若参赛选手按下抢答按钮,则该组别的信号立即被锁存,并在组别显示器上显示该组别,同时扬声器也给出音响提示,此时,电路具备自锁功能,使其他抢答按钮不起作用。
(3)抢答器具有限时回答问题的功能,当主持人启动倒计时开始键后,要求计时器采用倒计时,同时最后计时器倒计时到00时扬声器会发出声响提示;
2.2系统总体设计思想
本设计为八路数字抢答器,所以这种抢答器要求有八路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;对回答问题所用的时间进行计时、显示、超时报警,同时该系统还应有复位、倒计时启动功能。
抢答过程:
主持人按下系统复位键(CLR),系统进入抢答状态,计时模块输出初始信号给数码显示模块并显示出初始值。
当某参赛组抢先将抢答键按下时,系统将其余七路抢答信号封锁,同时扬声器发出声音提示,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到主持人将系统清零为止。
主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时。
计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。
若参赛者在规定时间内回答完问题,主持人可给出倒计时计数停止信号,以免扬声器鸣叫。
主持人按下复位键,即CLR为低电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来系统的总体框图如下:
图4-2-1系统的总体框图
2.3子模块的设计思想和实现
根据对抢答器的功能要求,把要设计的系统划分为六个功能模块:
抢答信号鉴别模块、锁存模块、编码模块、计时模块、译码显示模块和扬声器控制电路,具体的说,显示模块又包含最先抢答的组别显示电路、计时值显示电路。
2.3.1鉴别模块的设计与实现
抢答鉴别模块用来准确直观地判断S1、S2、S3、S4、S5、S6、S7、S8八组抢答者谁最先按下按钮,并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。
同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行下一步的操作。
抢答鉴别模块的元件图如下图所:
图4-3-1鉴别模块元件框图
引脚作用:
输入信号:
各组的抢答按钮S1、S2、S3、S4、S5、S6、S7、S8,系统清零信号CLR,反馈使能端OE。
输出信号:
各组的抢答按钮显示端q1,q2,q3,q4,q5,q6,q7,q8。
工作原理:
第一个按下键的小组,抢答信号判定模块QDJB通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的按键信号屏蔽,显示组别直到主持人对系统进行清零操作时为止。
当CLR=1时系统复位,抢答被屏蔽;当CLR=0时,即低电平有效,且OE为低电平时,使其进入抢答鉴别状态,到CLK的上升沿到来时,以S1组抢答成功为例,当输入信号为S1=1,S2=0,S3=0,S4=0,S5=0,S6=0,S7=0,S8=0,即为鉴别出S1组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。
同理其他组别抢答成功也是这样的鉴别过程。
部分源程序如下所示:
IF(CLR='1')THEN
Q1<='0';Q2<='0';Q3<='0';Q4<='0';Q5<='0';Q6<='0';Q7<='0';Q8<='0';\\………当清零端有效时,所有的输出赋值为0
ELSIF(OE='0')THEN
Q1<=S1;Q2<=S2;Q3<=S3;Q4<=S4;Q5<=S5;Q6<=S6;Q7<=S7;Q8<=S8;\\………当清零无效,且OE为0时,将输入赋给输出
原理框图如下:
输出全为零
选手抢答
输出抢答组别
输入等于输出
抢答成功
CLR=1
CLR=0
OE=0
图4-3-2抢答鉴别模块原理图
该模块在Max-plusII软件中的仿真结果图如下图:
图4-3-3鉴别模块仿真图
2.3.2锁存反馈模块的设计与实现
当抢答鉴别模块成功将各个抢答组的抢答信号输出后后,必须由锁存电路来将抢答信号中最先抢答的组别锁定,禁止其他组的信号显示出来,这个模块是整个电路中最重要的地方,这个模块直接影响主持人对比赛公平进行的判断。
锁存模块的元件图如下图所示:
图4-3-4锁存模块元件图
引脚作用:
输入信号:
D1、D2、D3、D4、D5、D6、D7、D8是各组的抢答信号。
输出信号:
Q是锁存反馈信号。
工作原理:
当D1、D2、D3、D4、D5、D6、D7、D8各组的抢答信号进入锁存模块时,在锁存模块中,对输入的各个信号的信息进行或的关系运算,将计算结果输给Q,通过Q向外输出。
最后将Q值反馈给QDJB模块,对本次的抢答进行锁存,并将锁存结果输出给下一级电路。
部分源程序如下所示:
Ifd1='1'ord2='1'ord3='1'ord4='1'ord5='1'ord6='1'ord7='1'ord8='1'thenq<='1';\\……………当任何一个输入为1时,将1赋给q
Elseq<='0';\\……………当输入全为0时,将0赋给q
Endif;
该模块在Max-plusII软件中的仿真结果图如下图:
图4-3-5锁存反馈模块的仿真图
2.3.3编码模块的设计与实现
当被所存的信号被送到编码模块后,该模块会将送到的各个组的信息进行编码。
该模块在总体电路中起到对输出信号的编码的作用,以便后级的译码显示电路正确显示。
编码模块的元件图如下图所示:
图4-3-6编码模块元件图
引脚作用:
输入信号:
锁存后的信号输入端为Q1、Q2、Q3、Q4、Q5、Q6、Q7、Q8,模块清零端为CLR.
输出信号:
编码后的输出端为M[3..0],声音响起的使能端为EN。
工作原理:
通过编程的方法,实现编码的功能,例如S7组抢答成功,那么送到编码模块的信号就是01000000,这时,编码器就将改信号编码成0111,从M端输出,同时EN端跳变成高电平输出。
部分源程序如下所示:
TEMP:
=Q1&Q2&Q3&Q4&Q5&Q6&Q7&Q8;
CASETEMPI
WHEN"10000000"=>M<="0001";\\………当输入信号为10000000的时候,将信号编码成0001,并赋给M。
WHEN"01000000"=>M<="0010";\\………当输入信号为01000000的时候,将信号编码成0010,并赋给M。
WHEN"00100000"=>M<="0011";\\………当输入信号为00100000的时候,将信号编码成0011,并赋给M。
WHEN"00010000"=>M<="0100";\\………当输入信号为00010000的时候,将信号编码成0100,并赋给M。
WHEN"00001000"=>M<="0101";\\………当输入信号为00001000的时候,将信号编码成0101,并赋给M。
WHEN"00000100"=>M<="0110";\\………当输入信号为00000100的时候,将信号编码成0110,并赋给M。
WHEN"00000010"=>M<="0111";\\………当输入信号为00000010的时候,将信号编码成0111,并赋给M。
WHEN"00000001"=>M<="1000";\\………当输入信号为00000001的时候,将信号编码成1000,并赋给M。
WHENOTHERS=>M<="1111";\\………当输入信号不是以上几种形式的时候,将信号编码成1111,并赋给M。
ENDCASE;
EN<=TEMP(7)ORTEMP(6)ORTEMP(5)ORTEMP(4)ORTEMP(3)ORTEMP
(2)ORTEMP
(1)ORTEMP(0)ORCLR;\\………在同一时刻,将八个输入信号与CLR信号进行或的关系,然后将值赋予EN
该模块在Max-plusII软件中的仿真结果图如下图:
图4-3-7编码模块仿真图
2.3.4声音报警模块的设计与实现
当某组的选手抢答成功之后,为了让主持人第一时间反应到抢答的成功,系统需要设置一个声响报警装置,来提示主持人对其他选手的抢答信号进行屏蔽。
该模块在系统中是十分必要的,声音响起,可以节约不少时间,为比赛的顺利进行争取时间。
声音报警模块的元件图如下图所示:
图4-3-8发声模块的元件图
引脚作用:
输入信号:
时钟信号CLK,复位端CLR,声音响起的使能端EN。
输出信号:
声音响起的输出端SOUND。
工作原理:
当时钟脉冲的上升沿到来,并且高电平有效时,EN端为高电平,CLR端的信号是低电平时,SOUND端输出高电平,即声音响起;当CLR为高电平时屏蔽一切EN端的信号,SOUND端输出低电平,声音不响起。
原理框图如下图:
使能端信号
SOUND=0
声音不响起
SOUND=1
声音响起
CLR=1
CLR=0
EN=1
图4-3-9发声模块的原理框图
部分源程序如下所示:
IF(CLK'EVENTANDCLK='1')THEN
IF(CLR='0'ANDEN='1')THEN\\…………当清零有效且使能端EN为高电平时
SOUND<='1';\\……………声音响起
ELSE
SOUND<='0';\\……………声音不响起
ENDIF;
ENDIF;
该模块在Max-plusII软件中的仿真结果图如下图:
图4-3-10声音报警模块仿真图
2.3.5答题倒计时模块的设计与实现
当某组抢答成功后,需要由抢答成功的组的组员来回答问题,而这期间必须有时间限制,让比赛尽快地顺利的进行,而回答问题的开始和结束都必须由主持人来掌握,该模块的元件图如下图所示:
图4-3-11倒计时器模块元件图
引脚作用:
输入信号:
时钟信号CLK,复位端CLR,倒计时使能端EN。
输出信号:
倒计时高位显示端H[3..0],倒计时低位显示端L[3..0],倒计时结束声音报警端SOUND1。
工作原理:
如果一组抢答成功,主持人给出判断并给出使能信号使倒计时开始计时如果计时到30秒的时候声音就会响起给主持人提供信息说明抢答队员已经超过了规定的时间,主持人会根据自己的主观意愿宣部此次抢答有效或无效。
总的来说倒计时起到提醒参赛者时间的结束,并起到给主持人提示的作用。
倒计时的设计思想:
倒计时需要用两个数码管显示,其中一个数码管显示十位(H)另一个显示个位(L),它们都用二进制表示,当参赛者抢答成功时,主持人给出是否有效,如果有效就把使能信号EN赋低电平,倒计时开始工作,当时钟脉冲(CLK)有效的时候倒计时就开始计时,当个位变成零的时候程序就会使十位减1并且个位变成9,如果个位没有变成零的时候个位在时钟脉冲上升沿的时候自动减1,十位保持不变。
当倒计时结束时,会有声音响起,提醒回答者和主持人回答超时,主持人对倒计时进行复位,回答结束。
原理框图如下图:
选手抢答
CLR=1
OE=0
开始倒计时
倒计时到00
声音响起
OE赋给1
倒计时置数30
关闭声音
CLR=0
倒计时不启动
图4-3-12倒计时模块原理框图
部分源程序如下所示:
IFCLR='0'THEN\\……………当清零有效的时候
HH:
="0011";
\\……………清零时赋初始
LL:
="0000";
ELSE
IFCLK'EVENTANDCLK='1'THEN
IFEN='0'THEN\\…………………使能有效的时候
IFLL=0ANDHH=0THEN
\\…………当倒计时为00的时候声音响起
SOUND<='1';
ELSIFLL=0THEN
\\……………当个位为0时十位减1个位变成
LL:
="1001";
HH:
=HH-1;
ELSE
LL:
=LL-1;\\………………如果个位不为0时十位不变个位减1
ENDIF;
ELSE
SOUND<='0';
HH:
="0011";
LL:
="0000";
该模块在Max-plusII软件中的仿真结果图如下图:
图4-3-13倒计时模块仿真图
2.3.6组别译码显示模块的设计与实现
当抢答成功后,编码模块将抢答信息编码成四位二进制数,传送给译码显示模块,而译码显示模块的功能就是将四位二进制数通过数码管显示出来,以便于主持人判断出是哪一组抢答成功,且公布给每个抢答组。
该模块的元件图如下图所示:
图4-3-14组别译码显示模块元件图
引脚作用:
输入信号:
编码信号输入端M[3..0]。
输出信号:
数码管显示输出端BCD[7..0]。
工作原理:
译码显示模块的功能是将四位二进制BCD编码转换成七段二进制数字,以阿拉伯数字的形式输出在数码管上,数码管它是由a、b、c、d、e、f、g这七段组成,它根据各个模块的输出信号来决定这七段中那些显示那些不显示最终得到的数字就是需要显示的结果,能给观众一个准确、简明的数字。
部分源程序如下所示:
BEGIN
CASEMIS
WHEN"0000"=>BCD<="00111111";\\………当输入信号为0的时候数码管上只有g,h不显示因此显示结果为0.
WHEN"0001"=>BCD<="00000110";\\………当输入信号为1号座抢答成功时数码管上有b、c亮因此显示为1。
WHEN"0010"=>BCD<="01011011";\\………当输入信号为2号座抢答成功时数码管上有a、b、d、e、g亮因此显示为2。
WHEN"0011"=>BCD<="01001111";\\………当输入信号为3号座抢答成功时数码管上有a、b、c、d、g亮因此显示为3。
WHEN"0100"=>BCD<="01100110";\\………当输入信号为4号座抢答成功时数码管上有b、c、f、g亮因此显示为4。
WHEN"0101"=>BCD<="01101101";\\………当输入信号为5号座抢答成功时数码管上有a、c、d、f、g亮因此显示为5。
WHEN"0110"=>BCD<="01111101";\\………当输入信号为6号座抢答成功时数码管上有只有b不亮因此显示为6。
WHEN"0111"=>BCD<="00000111";\\………当输入信号为7号座抢答成功时数码管上有a、b、c亮因此显示为7。
WHEN"1000"=>BCD<="01111111";\\………当输入信号为8号座抢答成功时数码管上有全部都亮因此显示为8。
WHEN"1001"=>BCD<="01101111";\\………当输入信号为9号座抢答成功时数码管上只有e亮因此显示为9。
WHENOTHERS=>BCD<="00000000";\\………如果输入信号不是上面几种情况则数码管不显示。
该模块在Max-plusII软件中的仿真结果图如下图:
图4-3-15译码显示模块仿真图
3抢答器的系统实现
单独模块只有彼此联系起来构成一个完整的系统,才能实现其功能,这个过程有两种实现方法:
①元件例化。
也是用编程的方式将它们各个程序、信号、输入输出之间的关系用VHDL语言来叙述清楚,还关系到程序的调用问题,需要设计者思路清晰,设计合理;②元器件图示连线。
这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查。
在设计中选择的是这种方法。
通过总的顶层元件图可以很清晰的看到模块连接的原理。
下图就是各个元件连接在一起的的总的系统图。
图3-1顶层元件图
系统总体仿真图如下图:
图3-2系统总体仿真图
表3-1输入/输出引脚的作用:
端口名
功能
S1、S2、S3、S4、S5、S6、S7、S8
抢答输入信号
CLK
系统时钟信号
CLR
系统清理信号
EN
倒计时时能信号
H[3..0]
倒计时高位输出信号
L[3..0]
倒计时低位输出信号
BCD[7..0]
组别显示输出信号
SOUND、SOUND1
声音报警输出信号
注:
本设计中,抢答器组别信号S1、S2、S3、S4、S5、S6、S7、S8为高电平时,其功能为有效状态。
同样,系统清零信号CLR为高电平时有效,预置及倒计时控制信号EN,为低电平有效。
当CLR有效时,抢答信号判别电路清零,为判别优先抢答信号做出准备。
当倒计时使能端EN为高电平时,预置时间设置信号EN=1时,通过倒计时预置数功能进行预置数。
当倒计时使能端EN为低电平,有系统时钟信号CLK时,进行30秒倒计时。
输入时钟CLK一方面作为扬声器控制电路的输入信号,另一方面为倒计时电路提供信号。
附录
系统总体图:
系统仿真结果图:
附录
1、抢答鉴别模块VHDL程序(QDJB.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYQDJBIS
PORT(S1,S2,S3,S4,S5,S6,S7,S8,CLR,OE:
INSTD_LOGIC;
Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8:
OUTSTD_LOGIC);
ENDQDJB;
ARCHITECTUREAOFQDJBIS
BEGIN
PROCESS(S1,S2,S3,S4,S5,S6,S7,S8,OE,CLR)
BEGIN
IF(CLR='1')THEN
Q1<='0';Q2<='0';Q3<='0';Q4<='0';Q5<='0';Q6<='0';Q7<='0';Q8<='0';
ELSIF(OE='0')THEN
Q1<=S1;Q2<=S2;Q3<=S3;Q4<=S4;Q5<=S5;Q6<=S6;Q7<=S7;Q8<=S8;
ENDIF;
ENDPROCESS;
ENDA
2、锁存反馈模块VHDL程序(SUOCUN.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSUOCUNIS
PORT(D1,D2,D3,D4,D5,D6,D7,D8:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC);
ENDSUOCUN;
ARCHITECTUREAOFSUOCUNIS
BEGIN
PROCESS(D1,D2,D3)
BEGIN
IFD1='1'ORD2='1'ORD3='1'ORD4='1'ORD5='1'ORD6='1'ORD7='1'ORD8='1'THENQ<='1';
ELSEQ<='0';
ENDIF;
ENDPROCESS;
ENDA;
3、编码模块VHDL程序(BIANMA.VHD