西安交通大学《数字逻辑电路》课内实验报告.docx
《西安交通大学《数字逻辑电路》课内实验报告.docx》由会员分享,可在线阅读,更多相关《西安交通大学《数字逻辑电路》课内实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
![西安交通大学《数字逻辑电路》课内实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/11/8bd4702c-1294-40dc-a2fb-f2bd808de4e4/8bd4702c-1294-40dc-a2fb-f2bd808de4e41.gif)
西安交通大学《数字逻辑电路》课内实验报告
西安交通大学
电子技术实验报告
——智力抢答器的设计
班级:
姓名:
学号:
日期:
2015年6月30日
联系电话:
一、实验目的
电子技术专题实验是对《数字逻辑电路》课程内容的全面、系统的总结、巩固和提高的一项课程实践活动。
通过智力抢答器的设计与分析实验,加强与巩固学对数字逻辑电路设计的基本方法和技巧的掌握,同时熟悉QuartusⅡ软件及实验室多功能学习机硬件平台,并掌握数字逻辑电路测试的基本方法,训练学生的动手能力和思维方法。
通过本实验,一方面提高学生运用数字逻辑电路解决实际问题的能力,另一方面使学生更深入的理解所学知识,将理论与实际问题相结合,为以后的计算机硬件课程的学习奠定良好的基础。
二、系统设计概要
1、项目名称————智力抢答器的设计
2、系统设计要求
在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。
同时,还可以设置计分、犯规及奖惩计录等多种功能。
本设计的具体要求是:
(1)设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。
(2)电路具有第一抢答信号的鉴别和锁存功能。
(3)设置计分电路。
(4)设置犯规电路。
三、系统设计方案
1、总体概述
根据系统设计要求可知,系统的输入信号有:
各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:
四个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。
根据以上的分析,我们可将整个系统分为三个主要模块:
抢答鉴别模块QDJB;抢答计时模块JSQ;抢答计分模块JFQ。
对于需显示的信息,需增加或外接译码器YMQ,进行显示译码。
考虑到FPGA/CPLD的可用接口及一般EDA实验开发系统提供的输出显示资源的限制,这里我们将组别显示和计时显示的译码器内设,而将各组的计分显示的译码器外接。
2、系统模块图
3、系统总体电路图
三、系统单元模块电路设计及工作原理
1、抢答鉴别模块
(1)VHDL源程序
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,D)IS
BEGIN
IFCLR='1'THENA1<='0';B1<='0';C1<='0';D1<='0';
ELSIF((A='1')AND((B='0'ANDC='0'ANDD='0')OR(B='1'ORC='1'ORD='1')))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;
ENDARCHITECTUREART;
(2)电路模块
(3)原理说明
在抢答鉴别电路设计中,A、B、C、D四组抢答,理论上应该有16种可能情况,但实际上由于芯片反应速度快到一定程度时,两组以上同时抢答成功的可能性非常小,因此我们可设计成只有四种情况,这大大简化了电路的设计复杂性。
RST为复位端,将输出信号复位或停止警报声。
CLK1端为警报时钟信号;待测信号,即抢答信号A,B,C,D输入电路中后,通过判断是哪个信号最先为‘1’得出抢答成功的组别1,2,3或4组,将组别号输出到相应端A1,B1,C1,D1,并将组别序号换算为四位二进制信号输出到STATES[3..0]端锁存,等待输出到计分和显示单元。
同时RING端在有成功抢答的情况下发出警报。
2、计分模块
(1)VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJFQIS
PORT(RST1:
INSTD_LOGIC;
ADD:
INSTD_LOGIC;
CHOS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
AA2,AA1,AA0,BB2,BB1,BB0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CC2,CC1,CC0,DD2,DD1,DD0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJFQ;
ARCHITECTUREARTOFJFQIS
BEGIN
PROCESS(RST1,ADD,CHOS)IS
VARIABLEPOINTS_A2,POINTS_A1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_B2,POINTS_B1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_C2,POINTS_C1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_D2,POINTS_D1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IF(ADD'EVENTANDADD='1')THEN
IFRST1='1'THEN
POINTS_A2:
="0001";POINTS_A1:
="0000";
POINTS_B2:
="0001";POINTS_B1:
="0000";
POINTS_C2:
="0001";POINTS_C1:
="0000";
POINTS_D2:
="0001";POINTS_D1:
="0000";
ELSIFCHOS="0001"THEN
IFPOINTS_A1="1001"THEN
POINTS_A1:
="0000";
IFPOINTS_A2="1001"THEN
POINTS_A2:
="0000";
ELSE
POINTS_A2:
=POINTS_A2+'1';
ENDIF;
ELSE
POINTS_A1:
=POINTS_A1+'1';
ENDIF;
ELSIFCHOS="0010"THEN
IFPOINTS_B1="1001"THEN
POINTS_B1:
="0000";
IFPOINTS_B2="1001"THEN
POINTS_B2:
="0000";
ELSE
POINTS_B2:
=POINTS_B2+'1';
ENDIF;
ELSE
POINTS_B1:
=POINTS_B1+'1';
ENDIF;
ELSIFCHOS="0011"THEN
IFPOINTS_C1="1001"THEN
POINTS_C1:
="0000";
IFPOINTS_C2="1001"THEN
POINTS_C2:
="0000";
ELSE
POINTS_C2:
=POINTS_C2+'1';
ENDIF;
ELSE
POINTS_C1:
=POINTS_C1+'1';
ENDIF;
ELSIFCHOS="0100"THEN
IFPOINTS_D1="1001"THEN
POINTS_D1:
="0000";
IFPOINTS_D2="1001"THEN
POINTS_D2:
="0000";
ELSE
POINTS_D2:
=POINTS_D2+'1';
ENDIF;
ELSE
POINTS_D1:
=POINTS_D1+'1';
ENDIF;
ENDIF;
ENDIF;
AA2<=POINTS_A2;AA1<=POINTS_A1;AA0<="0000";
BB2<=POINTS_B2;BB1<=POINTS_B1;BB0<="0000";
CC2<=POINTS_C2;CC1<=POINTS_C1;CC0<="0000";
DD2<=POINTS_D2;DD1<=POINTS_D1;DD0<="0000";
ENDPROCESS;
ENDARCHITECTUREART;
(2)电路模块
(3)原理说明
在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,要将计数数目分解成十进制并进行译码显示分变得越来越麻烦。
由于设计要求加减分均为10的倍数故而可以将个位一直设为0,这样既减少了接口,又大大地简化了设计。
图中,RST端为复位端,将计分起始分数设为100。
CHOS[3..0]端功能是锁存已抢答成功的组别序号,当接加分按钮ADD后,将给CHOS[3..0]所存的组别加分。
每按一次加10分,并分为个、十、百位从高位到低位进行显示。
3、计时模块
(1)VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJSQIS
PORT(CLR,LDN,EN,CLK:
INSTD_LOGIC;
TA,TB:
INSTD_LOGIC;
QA:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
QB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJSQ;
ARCHITECTUREARTOFJSQIS
signalDA:
STD_LOGIC_VECTOR(3DOWNTO0);
signalDB:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(TA,TB,CLR)IS
BEGIN
IFCLR='1'THEN
DA<="0000";
DB<="0000";
ELSE
IFTA='1'THEN
DA<=DA+1;
ENDIF;
IFTB='1'THEN
DB<=DB+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)IS
VARIABLETMPA:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLETMPB:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFCLR='1'THENTMPA:
="0000";TMPB:
="0110";
ELSIF(CLK'EVENTANDCLK='1')THEN
IFLDN='1'THENTMPA:
=DA;TMPB:
=DB;
ELSIFEN='1'THEN
IFTMPA="0000"THEN
TMPA:
="1001";
IFTMPB="0000"THENTMPB:
="0110";
ELSETMPB:
=TMPB-1;
ENDIF;
ELSETMPA:
=TMPA-1;
ENDIF;
ENDIF;
ENDIF;
QA<=TMPA;QB<=TMPB;
ENDPROCESS;
ENDARCHITECTUREART;
(2)电路模块
(3)原理说明
本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。
其中初始值的预置功能是将时间的两位数(单位为秒)分解成两个数分别进行预置,默认时间为60秒倒计时。
TA、TB端分别预置两位数值,再经过LDN端确认所置时间,EN端为高电平后开始计时。
每个数的预置则采用高电平计数的方式进行,CLK接时钟信号。
4、译码器模块
(1)VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYMQIS
PORT(AIN4:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDYMQ;
ARCHITECTUREARTOFYMQIS
BEGIN
PROCESS(AIN4)
BEGIN
CASEAIN4IS
WHEN"0000"=>DOUT7<="0111111";--0
WHEN"0001"=>DOUT7<="0000110";--1
WHEN"0010"=>DOUT7<="1011011";--2
WHEN"0011"=>DOUT7<="1001111";--3
WHEN"0100"=>DOUT7<="1100110";--4
WHEN"0101"=>DOUT7<="1101101";--5
WHEN"0110"=>DOUT7<="1111101";--6
WHEN"0111"=>DOUT7<="0000111";--7
WHEN"1000"=>DOUT7<="1111111";--8
WHEN"1001"=>DOUT7<="1101111";--9
WHENOTHERS=>DOUT7<="0000000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;
(2)电路模块
(3)原理说明
本译码器用于将抢答鉴别模块抢答成功的组别和计时器的时间进行显示,AIN4[3..0]端输入需显示的二进制数组,DOUT7[6..0]端输出显示在数码管,显示显示范围为0~9。
四、测试结果
1、抢答鉴别模块仿真波形
2、计时器模块仿真波形
3、计分器模块仿真波形
4、译码器模块仿真波形
5、系统总体仿真波形
五、实验结果分析
通过电路的仿真图形及EDA的操作,可以发现该电路实现的结果:
在抢答鉴别模块中,可容纳四组参赛者进行抢答,每组设置一个抢答按钮供抢答者使用,而且电路具有第一抢答信号的鉴别和锁存功能。
在主持人交系统复位并发出抢答指令后,如果有一组先按下抢答开关,则该组指示灯亮并用组别显示电路显示抢答者的组别,同时扬声器发出警报,同时其他参赛组不可以再抢答。
电路具有计分功能,使每组在开始时的分数预置成100分,抢答后由主持人计分,答对一次加10分。
电路有计时功能,选手需在规定时间内抢答和答题。
如果有犯规行为,系统也会发出警报。
五、实验中的问题及解决
此次试验遇到的最大的问题便是抢答鉴别模块的设计,之前的设计结果是抢答的那组参赛人员必须在按键之后一直按住,才能保证后面的选手不能继续抢答,而且之前的设计还没有声音警报。
后来在老师的指导下,又开始对它修改,只是我个人不太喜欢连电路,所以就一直在研究怎么改程序。
但是实验之前,我有没有学习过VHDL的程序格式,所以屡屡犯错。
后来在第二次实验之前,我特意去图书馆查阅了有关数电源程序的语言格式,可是去做实验的时候才发现,我们做的实验需要在VHDL下实现,但是我当时看的书是有关VerilogHDL的,所以格式还是不正确。
就这样,知道实验课程结束我也没能把抢答器修正过来。
最后还是在考试结束后,继续修改程序,才将抢答器模块改了过来,达到了老师的要求。
好在其他模块不太难,最后终于解决了这个问题。
六、对系统的评价
完成这个实验对我来说可谓是历经艰辛,总体来说我还是很满意的,毕竟已经尽了我得最大努力。
但是也有一些问题可以继续完善。
比如,在抢答鉴别模块中,抢答成功后各组台号灯具有记忆功能,这一点会造成即使下一轮抢答没有抢答成功者(即有两人或两人以上同时按下抢答器),之前被点亮的led灯会仍然保持点亮状态。
虽然此时可以根据有没有警报声来提示抢答是否有效,但是仍然不够完善。
这是因为自己的水平还不够,不能很好的设计电路来改善这个问题,希望通过以后的学习,我可以解决。
七、实验心得
通过这几次的上机实验,让我对《数字逻辑电路》这门课程,以前只是在课堂上听老师介绍一些器件,对那些器件并不是很熟悉。
可是通过这几次的实验,我加深了对这些器件的了解,对它们的功能也掌握得更好,在实验中可以很方便的选择自己需要的器件。
同时我因为学到了不少有关QuartusII这个软件和EDA的操作知识,也渐渐学会了如何将实际问题与数电这门课程的理论知识联系起来。
因为以前一直不知道学习数电这门课到底有什么作用,一直很困惑,可是这个实验解决了这个问题。
还有就是,这次实验教会了我:
不管什么时候都不要轻言放弃,人的潜力是无穷的,对不会的问题只要肯钻研,总会解决的。
正如这次的抢答器,开始班级的大部分人还是都做的这个实验的,奈何两次实验过后还是没有人做出来,所以大家又都去做时钟了,最后就剩下我们四个“孤军奋战”了。
毕竟花了不少时间和精力,我不想就这样放弃,虽然最后结束时结果也没有出来,但是课后终于做出来了。
所以,凡事不要轻易放弃,相信自己一定可以解决生活中的困难!