四路抢答器报告最终版.docx
《四路抢答器报告最终版.docx》由会员分享,可在线阅读,更多相关《四路抢答器报告最终版.docx(15页珍藏版)》请在冰豆网上搜索。
四路抢答器报告最终版
设计报告
课程名称EDA技术实用教程
任课教师黄慧
设计题目数字式竞赛抢答器
班级12自动化卓越班
姓名学号李思聪1205032033
郭一鸣1205031020
孔德利1205031026
日期2014年11月11日
一、设计目的
1、学习使用实验箱中数码管显示、按键控制。
2、熟悉抢答器的工作原理。
3、了解数字系统设计,调试及故障排除方法。
二、设计要求
1、四组参赛者进行抢答,当抢答组按下抢答按钮时,抢答器能准确的判断
出抢答者。
2、抢答器可以容纳4组参赛者同时抢答,每组设置1个按钮供抢答者使用。
设置抢答使能信号,当此信号有效时,若参赛者按下抢答开关,则抢答器能判断出第一抢答者并指示该组抢答成功,其他组参赛者的抢答开关不起作用,若提前抢答则对相应的参赛者发出警报。
3、系统具有清零功能。
当清零信号有效时,抢答器对前一轮抢答的第一抢答者判断结果进行清零,恢复为初始状态。
4、数字式竞赛抢答器电路还具有计分功能。
如果抢答成功的参赛者满足得分条件则增加相应的分数,答错不扣分。
三、电路的总体方案及工作原理
1、总体方案
(1)方案一
系统由三个主要模块组成,分别为第一判别电路、计分电路、显示电路。
其中第一判断电路主要完成最快抢答者的判断功能;计分电路则存储每组的分数,显示电路则显示抢答者的状态和各组的分数。
因此数字竞赛抢答器的输入信号包括复位信号CLR、抢答器使能信号EN、4级参赛者抢答按钮A\B\C\D及加分信号ADD,输出信号包括4组参赛者的状态显示LEDx(x表示参赛者编号)及其对应的得分SCOREx、抢答器抢答成功的组别显示等。
(2)方案二
抢答电路选用优先编码器74LS148和锁存器74LS297来完成。
该电路主要完成两个功能:
一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号(显示电路采用七段数字数码显示管);二是禁止其他选手按键,其按键操作无效。
定时电路原理及设计:
该部分主要由555定时器秒脉冲产生电路、十进制同步加减计数器74LS192减法计数电路、74LS48译码电路和1个7段数码管即相关电路组成。
显示电路
方案二需要复杂的硬件电路,而方案一硬件简单,程序设计也不复杂易于实现所有功能,所以我们选择方案一。
2、抢答器工作流程
如果参赛者在抢答器使能信号EN有效前提下按下抢答按钮,报警信号FALSE[3..0]的对应位输出高电平,以示警告;当EN信号有效时,抢答器开始工作,将报警信号FALSE清零,A、B、C、D四个抢答者谁先按下抢答按钮,则抢答成功,对应的显示灯LEDx亮起,并通过显示电路模块显示其参赛编号FIRST
[6..0];抢答成功的选手进入答题阶段,如回答正确,则加分信号ADD有效,计分模块给相应的参赛组加分,每个参赛组得分的个位、十位、百位分别通过SCOREx[6..0]显示。
如果复位信号CLR有效,使得抢答器在下一轮抢答前,其抢答成功的组别判断恢复为初始状态,以便重新开始新的一轮抢答。
复位信号在不改变竞赛者的现有得分。
四、单元电路设计
1.抢答鉴别单元
在抢答鉴别电路设计中,A、B、C、D四组抢答,RST为复位端,将输出信号复位或停止警报声。
抢答信号A,B,C,D输入电路中后,通过判断是哪个信号最先为‘1’得出抢答成功的组别1,2,4或8组,将组别号输出到相应端A1,B1,C1,D1,等待输出到计分和显示单元。
同时有提前抢答的情况下发出警报警告的功能。
2.计分单元
图中RST端为复位端,将计分起始分数设为0。
CHOS[3..0]端功能是锁存已抢答成功的组别序号,当接加分按钮ADD后,将给CHOS[3..0]所存的组别加分。
每按一次加1分。
3.计时单元
本系统中的计时器电路既有抢答计时功能,又有回答计时功能,功能比较齐全。
其中初始值的预置功能是将时间的两位数(单位为秒)分解成两个数分别进行预置,默认时间为20秒倒计时。
TA、TB端分别预置两位数值,start端为高电平后开始计时,stop端为高电平后停止计时,CLK接时钟信号,操作简洁。
4.显示电路
COUTA[6..0]、COUTA[6..0]端输出显示在数码管
五、整体电路及仿真波形
1.抢答鉴别模块仿真波形图
2.计分模块仿真波形图
3.计时器仿真波形图
4.整体仿真图
5.顶层设计总体电路图
六、硬件测试及说明
由于是在实验箱上进行设计的,我们省去了焊接电路、连接电路等很多工作,所以我们要做的主要是程序的编写和测试。
一开始是调试程序,花了大量的时间去编写并改错,老师要求我们底层用程序设计,顶层用电路图设计,我们就开始封装程序等工作。
程序没问题之后就要结合试验箱锁定引脚,由于引脚较多,稍不留神在硬件调试的时候就会出现问题,一开始程序下到试验箱中怎么也没反应,经过程序的修改和引脚的重新设定等工作,终于达到了想要的结果。
最后我们想加个蜂鸣器报警,可是蜂鸣器的响声很小,怎么也解决不了,最后通过向老师请教知道原来是我们把蜂鸣器的频率设置大了,频率是越小蜂鸣器声音越大。
七、项目总结
通过这次课程设计我们认识到了自己知识掌握的程度,发现基础薄弱,但通过此次课程设计加深了对相关知识的理解,对相关器件的使用有了更深一步的认识。
这次设计的难度比我们平时训练的难度要大,没有完全理解这个程序的结构,在软硬件电路的调试过程中也遇到了很多困难,一开始我们很躁,想很快把实验结果调试出来,最后却一无所获。
我认识到当遇到困难时,更需要静下来慢慢去分析,一步一步来做,当我们把每一步都做好了,一切自然是水到渠成的。
让我欣慰的是我们组员之间合作分工比较好,锻炼了专业知识的能力,也增进了我们相互之间的感情。
八、课程总结
本学期对《EDA技术实用教程》的学习为我的专业知识学习打开了一个全新的窗口——微电子技术领域。
对EDA技术,我更是有了全新的认识。
微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得表征半导体工艺水平的线宽已经达到了纳米级。
所以,集成电路设计正在不断地向超大规模、极低功耗和超高速的方向发展。
VHDL在现在的EDA设计中使用最多,也拥有几乎所有主流EDA工具的支持。
VHDL作为一个规范语言和建模语言,不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具,可以利用软件工具将VHDL源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件。
这种方法显然对于电路自动设计是一个极大的推进。
它具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
EDA技术良好的可移植性与可测试性,将所有设计环节纳入统一的自顶向下的设计方案中。
它不但在整个设计流程上充分利用计算机的自动设计能力、在各个设计层次上利用计算机完成不同内容的仿真模拟,而且在系统板设计结束后仍可利用计算机对硬件系统进行完整的测试。
书中通过大量的图示对PLD硬件特性与编程技术进行了形象的讲解,不仅融合了之前学习的关于电路设计的知识还将EDA的技术加入其中。
对VHDL语言的详尽讲解更是让我深刻理解了VHDL语言的编程原理。
由于本门课程是一门硬件学习课程,所以实验必不可少。
通过课程最后实验,我体会一些VHDL语言相对于其他编程语言的特点。
相对于其它计算机语言的学习,如C 或汇编语言,VHDL 具有明显的特点。
这不仅仅是由于VHDL 作为一种硬件描述语言的学习需要了解较多的数字逻辑方面的硬件电路知识,包括目标芯片基本结构方面的知识更重要的是由于VHDL 描述的对象始终是客观的电路系统。
由于电路系统内部的子系统乃至部分元器件的工作状态和工作方式可以是相互独立、互不相关的,也可以是互为因果的。
这表明,在任一时刻,电路系统可以有许多相关和不相关的事件同时并行发生。
例如可以在多个独立的模块中同时入行不同方式的数据交换和控制信号传输,这种并行工作方式是任何一种基于CPU 的软件程序语言所无法描绘和实现的。
传统的软件编程语言只能根据CPU 的工作方式,以排队式指令的形式来对特定的事件和信息进行控制或接收。
在CPU 工作的任一时间段内只能完成一种操作。
因此,任何复杂的程序在一个单CPU 的计算机中的运行,永远是单向和一维的。
因而程序设计者也几乎只需以一维的思维模式就可以编程和工作了。
VHDL 虽然也含有类似于软件编程语言的顺序描述语句结构,但其工作方式是完全不同的。
软件语言的语句是根据CPU 的顺序控制信号,按时钟节拍对应的指令周期节拍逐条运行的,每运行一条指令都有确定的执行周期。
但VHDL 则不同,从表面上观,VHDL 的顺序语句与软件语句有相同的行为描述方式,但在标准的仿真执行中有很大的区别。
VHDL
的语言描述只是综合器赖以构成硬件结构的一种依据,但进程语句结构中的顺序语句的执行方式决非是按时钟节拍运行的。
实际情况是其中的每一条语句的执行时间几乎是0 (但该语句的运行时间却不一定为0),即1000 条顺序语句与10 条顺序语句的执行时间是相同的。
在此,语句的运行和执行具有不同的概念(在软件语言中,它们的概念是相同),的执行是指启动一条语句,允许它运行一次,而运行就是指该语句完成其设定的功能。
通过EDA的课堂教学与实验,我认识到理论要与实际结合,培养动手动脑能力的重要性,做事情要抱着一丝不苟的态度,这样才能做好事情。
同时也入一步了解到EDA的强大之处,硬件电路的优秀的地方,对硬件方面更感兴趣了。
这门课程的学习,为我以后的专业知识的学习打下了良好的基础。
九、实验参考文献
【1】潘松,黄继业《EDA实用教程》高等教育出版社2002
【2】吕思忠《数子电路实验与课程设计》哈尔滨工业大学出版社
【3】卢杰,赖毅《VHDL与数字电路设计》北京科学出版社2001
【4】《EDA与VHDL》清华大学出版社
附录
计分器程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJFQIS
PORT(RST:
INSTD_LOGIC;
ADD:
INSTD_LOGIC;
CHOS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
FA,FB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
FC,FD:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJFQ;
ARCHITECTUREARTOFJFQIS
BEGIN
PROCESS(RST,ADD,CHOS)
VARIABLEPOINTS_A:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_B:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_C:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_D:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IF(ADD'EVENTANDADD='1')THEN
IFRST='1'THEN
POINTS_A:
="0000";
POINTS_B:
="0000";
POINTS_C:
="0000";
POINTS_D:
="0000";
ELSIFCHOS="0001"THEN
IFPOINTS_A="1001"THEN
POINTS_A:
="0000";
ELSE
POINTS_A:
=POINTS_A+'1';
ENDIF;
ELSIFCHOS="0010"THEN
IFPOINTS_B="1001"THEN
POINTS_B:
="0000";
ELSE
POINTS_B:
=POINTS_B+'1';
ENDIF;
ELSIFCHOS="0100"THEN
IFPOINTS_C="1001"THEN
POINTS_C:
="0000";
ELSE
POINTS_C:
=POINTS_C+'1';
ENDIF;
ELSIFCHOS="1000"THEN
IFPOINTS_D="1001"THEN
POINTS_D:
="0000";
ELSE
POINTS_D:
=POINTS_D+'1';
ENDIF;
ENDIF;
ENDIF;
FA<=POINTS_A;
FB<=POINTS_B;
FC<=POINTS_C;
FD<=POINTS_D;
ENDPROCESS;
ENDART;
计时器程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityJSQis
port(clk1,rst,start,stop:
instd_logic;
ta,tb:
bufferstd_logic_vector(3downto0));
endJSQ;
architectureoneofJSQis
signalco:
std_logic;
begin
p1:
process(clk1,rst,start,stop,ta)
begin
ifrst='1'orstop='1'then
ta<="0000";
elsifclk1'eventandclk1='1'then
co<='0';
ifstart='1'then
ifta="0000"then
ta<="1001";co<='1';
elseta<=ta-1;
endif;
endif;
endif;
endprocessp1;
p2:
process(co,rst,start,stop,tb)
begin
ifrst='1'orstop='1'then
tb<="0010";
elsifco'eventandco='1'then
ifstart='1'then
iftb="0000"thentb<="0011";
elsetb<=tb-1;
endif;
endif;
endif;
endprocessp2;
endone;
抢答判断程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYQDJBIS
PORT(CLR:
INSTD_LOGIC;
A,B,C,D:
INSTD_LOGIC;
A1,B1,C1,D1:
OUTSTD_LOGIC;
STATES:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYQDJB;
ARCHITECTUREARTOFQDJBIS
CONSTANTW1:
STD_LOGIC_VECTOR:
="0001";
CONSTANTW2:
STD_LOGIC_VECTOR:
="0010";
CONSTANTW3:
STD_LOGIC_VECTOR:
="0100";
CONSTANTW4:
STD_LOGIC_VECTOR:
="1000";
BEGIN
PROCESS(CLR,A,B,C)
BEGIN
IFCLR='1'THENSTATES<="0000";
ELSIF(A='1'ANDB='0'ANDC='0'ANDD='0')THEN
A1<='1';B1<='0';C1<='0';D1<='0';STATES<=W1;
ELSIF(A='0'ANDB='1'ANDC='0'ANDD='0')THEN
A1<='0';B1<='1';C1<='0';D1<='0';STATES<=W2;
ELSIF(A='0'ANDB='0'ANDC='1'ANDD='0')THEN
A1<='0';B1<='0';C1<='1';D1<='0';STATES<=W3;
ELSIF(A='0'ANDB='0'ANDC='0'ANDD='1')THEN
A1<='0';B1<='0';C1<='0';D1<='1';STATES<=W4;
ENDIF;
ENDPROCESS;
ENDART;
显示电路程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYMQIS
PORT(AIN4:
INSTD_LOGIC_VECTOR(3DOWNTO0);
COUTA:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
COUTB:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDYMQ;
ARCHITECTUREARTOFYMQIS
BEGIN
PROCESS(AIN4)
VARIABLEDOUTA:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
CASEAIN4IS
WHEN"0000"=>DOUTA:
="0111111";
WHEN"0001"=>DOUTA:
="0000110";
WHEN"0010"=>DOUTA:
="1011011";
WHEN"0011"=>DOUTA:
="1001111";
WHEN"0100"=>DOUTA:
="1100110";
WHEN"0101"=>DOUTA:
="1101101";
WHEN"0110"=>DOUTA:
="1111101";
WHEN"0111"=>DOUTA:
="0000111";
WHEN"1000"=>DOUTA:
="1111111";
WHEN"1001"=>DOUTA:
="1101111";
WHENOTHERS=>DOUTA:
="0000000";
ENDCASE;
COUTA<=DOUTA;COUTB<=DOUTA;
ENDPROCESS;
ENDART;
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)