八路抢答器课程设计.docx
《八路抢答器课程设计.docx》由会员分享,可在线阅读,更多相关《八路抢答器课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
八路抢答器课程设计
课程设计报告
题目八人抢答器设计
学院工程学院
专业电气工程及其自动化
目录
第一章设计任务要求············
(1)
第二章设计流程··············
(2)
2.1设计模块方框图··········
(2)
2.2模块功能分析···········(3)
第三章电路设计···············(4)
3.1系统封装图·············(4)
3.2各种模块的VHDL文本输入语言·····(5)
3.3各种模块的封装图和仿真波形·····(10)
第四章设计总结···············(16)
参考文献····················(16)
第1章设计任务要求
设计任务和基本要求:
8人抢答器电路的功能要求如下:
1、可供8人同时参赛,编号为1号至8号。
没人均有一个抢答按钮,开始抢答时,第一个按下抢答器的参赛者,数码管将显示其号码,喇叭报警,获得抢答机会。
2、主持人拥有一个控制开关,用于控制抢答系统的清零和启动抢答状态。
3、抢答器具有数据锁存好显示的功能。
抢答开始后,若有参赛者按下抢答按钮,其编号立即锁存,显示在数码管上,同时喇叭发出声音提示。
另外,在最先按下按钮后,需要封锁输入电路,禁止其他选手抢答。
最先抢答者的编号一直保持,直到主持人将系统清零为止。
4、提高要求:
设计时间显示电路,要求抢答者在规定时间内抢答,如在抢答时间内无人按下抢答器,喇叭报警,抢答结束,数码管闪烁0号码。
(注:
时间数字显示为倒计时方式)
1
第2章设计流程
2.1设计模块方框图:
2.2模块功能分析
2.2.1参赛选手按钮电路
该电路由8个开关按键组成,每一个选手与一个开关对应。
开关为常开型,抢答开始时按下抢答开关时,开关断开,输入抢答信号为低电平。
2.2.2编码器
编码器的作用是将开关信息转化为8421BCD码,以提供数字显示电路所需要的编码输入。
2.2.3锁存器
当只要有一个且为任意一个选手抢答输入信号产生时,锁存器电路被触发,在输出端产生相应的开关电平信息,同时为避免之后的抢答开关按钮也按下产生错乱,最先产生的输出电平变化又反馈回来将锁存器器锁定住,并保持输出的电平信息。
2.2.4译码器
译码器的作用是将编码器输出的8421BCD码转化为数码管需要的逻辑状态。
2.2.5号码和时间显示器
数码显示管有发光的共阴二极管(LED)数码管,喇叭为高电平触发。
2.2.6计时器
通过脉冲来进行计时,用来抢答倒计时。
2.2.7报警器
当有选手抢答成功时或倒计时到十秒后,喇叭鸣响。
3
第3章电路设计
3.1系统封装图:
图表3.1
一、图3.1所示为抢答器的系统封装图,可以看到Q1-Q8为8组选手的输入抢答按钮,RST为复位控制信号,CLK是脉冲信号,该系统描述的功能是当所有开关输入信号Q1-Q8均未按下,锁存器输出为低电平,经过8个输入反馈信号则为高点平,该信号作为锁存器时能端控制信号即EN,使锁存器处在等待接收触发输入状态;当任一开关输入信号Q1-Q8中的任一开关按下时,输出信号中必然会有一路为高电平,则反馈信号发生非门后变成低电平,时能信号EN成为低电平后,EN传给锁存器则立即使锁存器封锁,这时其他抢答者信息的输入将被封锁,不能再传输到锁存器中。
二、RST为复位控制信号,也是低电平有效,当主持人复位后即提示抢答开始时,锁存器全为低电平,反馈时能信号为高电平,是锁存器处于等待抢答输入信号的状态。
三、输入的信号一旦锁定后,译码器的Y[3..0]信号的输入到7段译码器中,7段译码器含有7段共阴极二极管,对输入的LED[1]~LED[7]进行验证,LED数码管对应显示出最先抢答者的编号,并且报警器发出响声。
四、当使能端按下后,计时器开始倒计时,如果在10秒内没有选手按按钮,这报警器发出响声,并反馈到锁存器的使能端EN使EN成为低电平,立即使锁存器封锁,这时其他抢答者信息的输入将被封锁,不能再传输到锁存器中。
4
3.2各种模块的VHDL文本输入语言
一.编码器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYBMIS
PORT(B1,B2,B3,B4,B5,B6,B7,B8:
INSTD_LOGIC;
RST1:
INSTD_LOGIC;
M:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREoneOFBMIS
SIGNALM1:
STD_LOGIC_VECTOR(1TO8);
BEGIN
M1<=B1&B2&B3&B4&B5&B6&B7&B8;
PROCESS(M1,RST1)
BEGIN
IFRST1='0'THEN
M<="0000";
ELSE
CASEM1IS
WHEN"01111111"=>M<="0001";
WHEN"10111111"=>M<="0010";
WHEN"11011111"=>M<="0011";
WHEN"11101111"=>M<="0100";
WHEN"11110111"=>M<="0101";
WHEN"11111011"=>M<="0110";
WHEN"11111101"=>M<="0111";
WHEN"11111110"=>M<="1000";
WHENOTHERS=>M<="0000";
ENDCASE;
ENDIF;
ENDPROCESS;
ENDone;
二.锁存器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSCIS
PORT(S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
RST2,EN2:
INSTD_LOGIC;
C:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
5
ARCHITECTURETWOOFSCIS
BEGIN
PROCESS(S,EN2,RST2)
BEGIN
IFRST2='0'THEN
C<="0000";
ELSEIFEN2='1'THEN
C<=S;
ENDIF;
ENDIF;
ENDPROCESS;
ENDTWO;
三.译码器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYYMIS
PORT(Y:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED1:
OUTSTD_LOGIC_VECTOR(7DOWNTO1));
END;
ARCHITECTURETHREEOFYMIS
BEGIN
PROCESS(Y)
BEGIN
CASEYIS
WHEN"0001"=>LED1<="0000110";
WHEN"0010"=>LED1<="1011011";
WHEN"0011"=>LED1<="1001111";
WHEN"0100"=>LED1<="1100110";
WHEN"0101"=>LED1<="1101101";
WHEN"0110"=>LED1<="1111101";
WHEN"0111"=>LED1<="0000111";
WHEN"1000"=>LED1<="1111111";
WHENOTHERS=>LED1<="0111111";
ENDCASE;
ENDPROCESS;
ENDTHREE;
四.报警器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYBJIS
PORT(BC,BS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
6
LA:
OUTSTD_LOGIC);
END;
ARCHITECTUREFOUROFBJIS
BEGIN
PROCESS(BC,BS)
BEGIN
IF(((BC(0)ORBC
(1)ORBC
(2)ORBC(3))='1')ORBS="0000")THEN
LA<='1';
ELSE
LA<='0';
ENDIF;
ENDPROCESS;
ENDFOUR;
五.计时器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJSIS
PORT(CLK1,RST3,EN1:
INSTD_LOGIC;
S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREFIVEOFJSIS
BEGIN
PROCESS(CLK1,RST3,EN1)
VARIABLES1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST3='0'THENS1:
="1001";
ELSEIF(CLK1'EVENTANDCLK1='1')THEN
IFEN1='1'THEN
IFS1>"0000"THENS1:
=S1-1;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
S<=S1;
ENDPROCESS;
ENDFIVE;
六.显示器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYXSIS
7
PORT(X:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED2:
OUTSTD_LOGIC_VECTOR(7DOWNTO1));
END;
ARCHITECTURESIXOFXSIS
BEGIN
PROCESS(X)
BEGIN
CASEXIS
WHEN"0001"=>LED2<="0000110";
WHEN"0010"=>LED2<="1011011";
WHEN"0011"=>LED2<="1001111";
WHEN"0100"=>LED2<="1100110";
WHEN"0101"=>LED2<="1101101";
WHEN"0110"=>LED2<="1111101";
WHEN"0111"=>LED2<="0000111";
WHEN"1000"=>LED2<="1111111";
WHEN"1001"=>LED2<="1101111";
WHENOTHERS=>LED2<="0111111";
ENDCASE;
ENDPROCESS;
ENDSIX;
七.顶层文件
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYQDQIS
PORT(Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8:
INSTD_LOGIC;
RST,CLK:
INSTD_LOGIC;
LED1,LED2:
OUTSTD_LOGIC_VECTOR(7DOWNTO1);
LA:
OUTSTD_LOGIC);
END;
ARCHITECTURESEVENOFQDQIS
COMPONENTBM
PORT(B1,B2,B3,B4,B5,B6,B7,B8:
INSTD_LOGIC;
RST1:
INSTD_LOGIC;
M:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTSC
PORT(S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
RST2,EN2:
INSTD_LOGIC;
C:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
8
COMPONENTYM
PORT(Y:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED1:
OUTSTD_LOGIC_VECTOR(7DOWNTO1));
ENDCOMPONENT;
COMPONENTBJ
PORT(BC,BS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LA:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTJS
PORT(CLK1,RST3,EN1:
INSTD_LOGIC;
S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTXS
PORT(X:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED2:
OUTSTD_LOGIC_VECTOR(7DOWNTO1));
ENDCOMPONENT;
SIGNALA,C:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALB:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALD:
STD_LOGIC;
SIGNALE:
STD_LOGIC;
SIGNALF:
STD_LOGIC;
BEGIN
D<=NOT(B(0)ORB
(1)ORB
(2)ORB(3));
E<=C(0)ORC
(1)ORC
(2)ORC(3);
F<=DANDE;
U1:
BMPORTMAP(Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,RST,A);
U2:
SCPORTMAP(A,RST,F,B);
U3:
YMPORTMAP(B,LED1);
U4:
BJPORTMAP(B,C,LA);
U5:
JSPORTMAP(CLK,RST,D,C);
U6:
XSPORTMAP(C,LED2);
ENDSEVEN;
9
3.3各种模块的封装图和仿真波形
一.编码器:
波形分析:
如图知,编码器为纯组合电路,处理数据为二进制,当分别向编码器输入不同信号时,对应输出不同的数值。
如输入B<="01111111",编码器输出M<="0001",其他同理。
当复位键RST为低电平时,编码器输出M<="0000"。
二.锁存器:
10
波形分析:
从波形图可以得出当复位信号RST复位后即为高电平时,抢答开始,当一旦有抢答输入信号时。
使能信号EN立即变为低电平,即锁存发生,此时再有抢答信号输入已经不发生作用。
,
三.译码器:
11
波形分析:
由上图知,七段数码为纯组合电路,处理数据为二进制,当分别向译码器输入不同信号时,对应数码管的七个段接高电平的亮起,从而输出不同的数值。
如输入Y<='0',译码器输出LED<="3F",数码管显示为“0”,;如输入Y<='1',译码器输出LED<="06",数码管显示为“1”,其他同理。
四.报警器:
12
波形分析:
当BC端输入“0000”,数码管输出LA<='0',喇叭不响,当BC端输入其他四位二进制数时,数码管输出LA<='1',喇叭响;当BS端输入“0000”,数码管输出LA<='1',喇叭响,当BC端输入其他四位二进制数时,数码管输出LA<='0',喇叭不响。
五.计时器:
波形分析:
由上图知,当复位信号为低电平时,S输出“1001”,然后每到时钟脉冲的上升沿时递减变化,当使能端EN1变为低电平时,S输出保持不变,直到复位信号再次为低电平。
13
六.显示器:
波形分析:
由上图知,七段数码为纯组合电路,处理数据为二进制,当分别向译码器输入不同信号时,对应数码管的七个段接高电平的亮起,从而输出不同的数值。
如输入Y<='0',译码器输出LED<="3F",数码管显示为“0”,;如输入Y<='1',译码器输出LED<="06",数码管显示为“1”,其他同理。
七.系统文件:
14
波形分析:
由上图知,当复位信号为低电平时,S输出“1001”,然后每到时钟脉冲的上升沿时递减变化,并在LED2上依次显示出来,当有选手按了抢答器,则在LED1上显示他的号码,LA变成高电平,喇叭响,LED2上显示的时间不再变化。
当在十秒内没有选手抢答,则LED1显示零号,LA变成高电平,喇叭响。
15
第4章设计总结
这次的八人抢答器的EDA课程设计,使我们熟练地掌握了EDA设计软件max+plus2的操作,并且使我对电子设计有了更深的了解,通过建立各个模块,分模块进行编程,然后上机编译,连接,仿真,并分析各个模块是否逻辑正确,最后通过例化语句将各个模块连接起来,形成整个八人抢答器。
其中,遇到很多困难,特别是在编译锁存器,报警器和计时器的时候,由于反馈的应用,有些难理解和难设计。
而且该抢答器仍存在一些问题,比如报警器无法形成定时报警。
而且在网络上和参考文献中都没有找到相关的例子。
所以暂时无法改进。
故留下不小的遗憾,所以在以后的学习中仍要不断寻找相关的解决方法,争取弥补这一缺陷。
参考文献
【1】潘松,黄继业.EDA技术与VHDL[M].北京:
清华大学出版社,2007
【2】聂小燕,鲁才.数字电路EDA技术与应用[J].北京:
人民邮电出版社,2010
【3】乔庐峰,尹廷辉.现代数字设计与VHDL[M].北京:
电子工业出版社,2010.
【4】康华光.电子技术基础·数字部分(第五版).北京:
高等教育出版社,2006
【5】刘欲晓.EDA技术与VHDL电路开发应用实践[M].北京:
电子工业出版社,2009
16