课程设计报告课题名称:基于VHDL的六路抢答器成绩:指导教师:系(院)名:电控系班级:电子班学号:200700303学生姓名:最后之舞1)设计任务:1.抢答器同时供七名选手或七个代表队比赛,分别用七个按钮Ren(0)~Ren(6)表示。2.设置一个系统清除即抢答控制开关CLR,该开关由主持人控制。3.抢答器具有锁存与显示功能。即只要有选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时相应编号的LCD灯,即LD(0)~LD(6)点亮提示,并且全局警报灯LCD也点亮。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。4.抢答器具有定时抢答功能。当主持人启动“开始”(LCR)键后,定时器进行减计时,同时数码管显示时间变动情况。5.如果定时时间已到,无人抢答,本次抢答无效,系统报警灯LCD亮并禁止抢答,定时显示器上显示00。主持人再次按下“开始”(CLR)键后即可进行下一轮的抢答。2)工作原理:1.原理框图:2.各部分工作原理:①抢答器计时模块:这个模块的输入端有时钟信号MIAO、系统复位信号CLR和一个H输入信号;输出端有秒时间状态显示信号SEC和无人抢答和计时中止警报信号LCD。这个模块中主要实现抢答过程中的计时功能,在抢答开始后进行15秒的倒计时,并且在15秒倒计时后无人抢答的情况下显示超时并输出信号至LCD报警,或者只要15秒内有人抢答,时间也即刻停止计时,系统输出一个信号经LCD传至“抢答系统”,并显示优先抢答者的抢答时刻。②抢答控制系统模块:在这个模块输入端有LCD输入(以时间控制系统的LCD输出信号为信号源)、一个和“时间控制系统”公用的CLR端、七人抢答输入信号端Ren和有一个时钟信号端CLK,这个时钟信号是个高频信号,用以扫描Ren是否有信号输入。输出端有对应于Ren编号的7个指示灯LD和4线2进制输出端Who(用于以数字的形式显示优先抢答者的编号),还有一个H端用于指示Ren按钮状态。在此模块中高频时钟信号一直作用,此时,若主持人按下CLR即为开始抢答信号,所有输出端都自动清零。在有效时间范围(15秒)内只要有人抢答,H就有高电平输出至“时间控制系统”的H端以控制倒计时的停止,并且对应的LD指示灯点亮,数码管Who显示优先抢答者编号,并锁定输入端Ren以阻止系统响应其他抢答者的信号。若有两个(或两个以上的人)同时刻按下Ren按钮(概率非常小),系统也即刻锁定Ren按钮,对应的两个(或两个以上)的LD灯点亮(这就是用多个灯管代替单个铃音作为报警的优势),但是数码管Who显示“00”,H有信号输出至“时间控制系统”致使其停止倒计时。3)软件设计:完整程序如下:①抢答控制部分:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYQIANGDAISPORT(Ren:INSTD_LOGIC_VECTOR(6downto0);--七人抢答信号定义LCD,CLR,CLK:INSTD_LOGIC;--使能端、主持人复位(开始)和时钟信号定义H:OUTSTD_LOGIC;Who:OUTSTD_LOGIC_VECTOR(3downto0);--显示输出信号定义LD:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--编号灯信号定义ENDQIANGDA;ARCHITECTUREstOFQIANGDAISSIGNALG:STD_LOGIC_VECTOR(6downto0);--变量信号定义BEGINPROCESS(Ren,CLK,CLR,LCD)BEGINIFCLR='1'THENG=0000000;LD=0000000;H='0';--判断复位是否按下ELSIF(CLK'EVENTANDCLK='1')THEN--判断时钟上升沿IFLCD='0'THEN--未到15秒仍可抢答IF(Ren(0)='1')ANDNOT(G(1)='1'ORG(2)='1'--判断此号回答者是否最先抢答ORG(3)='1'ORG(4)='1'ORG(5)='1'ORG(6)='1')THENG(0)='1';LD(0)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人IF(Ren(1)='1')ANDNOT(G(2)='1'ORG(3)='1'--判断此号回答者是否最先抢答ORG(4)='1'ORG(5)='1'ORG(6)='1'ORG(0)='1')THENG(1)='1';LD(1)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人IF(Ren(2)='1')ANDNOT(G(1)='1'ORG(3)='1'--判断此号回答者是否最先抢答ORG(4)='1'ORG(5)='1'ORG(6)='1'ORG(0)='1')THENG(2)='1';LD(2)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人IF(Ren(3)='1')ANDNOT(G(1)='1'ORG(2)='1'--判断此号回答者是否最先抢答ORG(4)='1'ORG(5)='1'ORG(6)='1'ORG(0)='1')THENG(3)='1';LD(3)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人IF(Ren(4)='1')ANDNOT(G(1)='1'ORG(2)='1'--判断此号回答者是否最先抢答ORG(3)='1'ORG(5)='1'ORG(6)='1'ORG(0)='1')THENG(4)='1';LD(4)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人IF(Ren(5)='1')ANDNOT(G(1)='1'ORG(2)='1'--判断此号回答者是否最先抢答ORG(3)='1'ORG(4)='1'ORG(6)='1'ORG(0)='1')THENG(5)='1';LD(5)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人IF(Ren(6)='1')ANDNOT(G(1)='1'ORG(2)='1'--判断此号回答者是否最先抢答ORG(3)='1'ORG(4)='1'ORG(5)='1'ORG(0)='1')THENG(6)='1';LD(6)='1';ENDIF;---若为肯定,对应编号灯亮,回答权给此人H=G(0)ORG(1)ORG(2)ORG(3)ORG(4)ORG(5)ORG(6);ENDIF;ENDIF;CASEGISWHEN0000001=Who=0001;--显示优先抢答者号码WHEN0000010=Who=0010;WHEN0000100=Who=0011;WHEN0001000=Who=0100;WHEN0010000=Who=0101;WHEN0100000=Who=0110;WHEN1000000=Who=0111;WHENOTHERS=Who=0000;ENDCASE;ENDPROCESS;ENDst;②倒计时控制部分:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSHIJIANISPORT(CLR,MIAO,H:INSTD_LOGIC;--主持人复位(开始)信号、秒时钟信号定义SEC:OUTSTD_LOGIC_VECTOR(7DOWNTO0);LCD:OUTSTD_LOGIC);--全局报警信号定义ENDSHIJIAN;ARCHITECTUREstOFSHIJIANISSIGNALCNT:STD_LOGIC_VECTOR(3DOWNTO0);--内部变量信号定义BEGINPROCESS(MIAO,CLR,H)BEGINIF(CNT0ANDH='0')THENCNT=CNT-1;--倒计时ELSIF(MIAO'EVENTANDMIAO='1')THEN--判断秒时钟信号上升沿ELSELCD='1';--15秒后停止抢答,到时信号灯亮ENDIF;ENDIF;CASECNTIS--显示倒计时时间状态WHEN1111=SEC=00010101;--15sWHEN1110=SEC=00010100;--14sWHEN1101=SEC=00010011;--13sWHEN1100=SEC=00010010;--12sWHEN1011=SEC=00010001;--11sWHEN1010=SEC=00010000;--10sWHEN1001=SEC=00001001;--9sWHEN1000=SEC=00001000;--8sWHEN0111=SEC=00000111;--7sWHEN0110=SEC=00000110;--6sWHEN0101=SEC=00000101;--5sWHEN0100=SEC=00000100;--4sWHEN0011=SEC=00000011;--3sWHEN0010=SEC=00000010;--2sWHEN0001=SEC=00000001;--1sWHENOTHERS=SEC=00000000;--0ENDCASE;ENDPROCESS;ENDst;[上图为硬件测试管脚锁定图]4)仿真结果分析:右图体现出了倒计时15秒后报警灯LCD点亮,并停止抢答(即抢答无效)。其中SEC显示为从21倒计到16后才从9倒计到0是因为从8位二进制直接转换为十进制和由四线数码管经译码器分别转换为两位十进制之间的区别。七、心得体会通过这次对抢答器的设计与实践,让我了解了程序的设计和设计的程序,也让我了解了关于抢答器的基本原理与设计理念,要设计一个电路总要先经仿真。本实验通过EDA软件muxlus2的实现,让我对VHDL语言有了更深层次的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的高兴。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总的来说,这次设计的抢答器还是比较成功的,在设计中遇到了很多问题,最后在老师和同学的指导下,终于迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力。