1、EDA课程设计智能抢答器1智能抢答器的设计1.1基于VHDL的智能抢答器 1.1.1设计目的及要求EDA技术作为现代电子设计最新技术的结晶,其广阔的应用前景和深远的影响已毋庸置疑,它在信息工程类专业中的基础地位和核心作用也逐渐被人们所认识。许多高等学校开设了相应的课程,并为学生提供了课程设计、综合实践、电子设计竞赛、毕业设计、科学研究和产品开发等EDA技术的综合应用实践环节。相关的工程技术人员也特别重视学习EDA技术,并渴望提高其工程应用能力。 对于迅猛发展的EDA技术的综合应用,从EDA技术的综合应用系统的深度来分,可分为3个层次: 功能电路模块的设计; 算法实现电路模块的设计; 片上系统/
2、嵌入式系统/现代DSP系统的设计。 从EDA技术的综合应用系统的最终主要硬件构成来分,已出现6种形式: CPLD/FPGA系统; CPLD/FPGA+MCU系统; CPLD/FPGA+专用DSP处理器系统; 基于FPGA实现的现代DSP系统; 基于FPGA实现的SOC片上系统; 基于FPGA实现的嵌入式系统。 从EDA技术的综合应用系统的完善层次来分,可分为3个层次:EDA综合系统主体电路的设计、仿真及硬件验证;EDA综合系统主体电路的设计、仿真、硬件验证+系统外围电路PCB的设计与制作;EDA综合系统主体电路的设计、仿真、硬件验证+系统整体电路PCB的设计与制作及系统的组装、调试。 在许多比
3、赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等各种手段批示出第一抢答者。同时,还可以设置计分、犯规及奖惩记录等各种功能。本设计的具体要求是:1.设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。 2.电路具有第一抢答信号的鉴别和锁存功能。在主持人交系统复位并发出抢答指令后,若抢答开关,则该组指示灯亮并用组别显示电路显示抢答者的组别,同时扬声器发出“嘀嘟”的双音音响,且持续23秒。此时,电路应具备自锁功能,使别组的抢答开关不起作用。 3.设置计分电路。每组在开始时预置成100分,抢答后由诗人计分,答对一次加10分,否则减
4、10分。 4.设置犯规电路。对提前抢答和超时抢答的组别鸣喇叭示警,并由组别显示电路显示出犯规组别。 1.1.2设计分析与设计思路 设计分析与设计思路设计分析与设计思路:根据系统设计要求可知,系统的输入信号有:各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:四个组抢答成功与否的指示灯控制信号输出口LEDA、LESB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。本系统应具有的
5、功能有:第一抢答信号的鉴别和锁存功能;抢答计时功能;各组得分的累加和动态显示功能;抢答犯规记录功能。2 抢答器各模块的原理及介绍2.1 系统的框图及介绍2.1.1 结构框图及系统框图 图2.1 抢答器系统及结构框图原理分析:将电路分为三个主要模块:抢答鉴别模块QDJB;计时模块JSQ;记分模块JFQ。可用静态显示,使用4个数码管,两个显示计时,一个显示组别,一个显示分数。2.2 模块的介绍2.2.1抢答鉴别模块QDJB图2.2 QDJB在抢答鉴别电路设计中,A、B、C、D四组抢答,理论上应该有16种可能情况,但实际上由于芯片反应速度快到一定程度时,两组以上同时抢答成功的可能性非常小,因此我们可
6、设计成只有四种情况,这大大简化了电路的设计复杂性。2.2.2 计时模块JSQ 图2.3 JSQ本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。其中初始值的预置功能是将时间的两位数(单位为秒)分解成两个数分别进行预置,默认时间为60秒倒计时。TA、TB端分别预置两位数值,再经过LDN端确认所置时间,EN端为高电平后开始计时。每个数的预置则采用高电平计数的方式进行,CLK接时钟信号,操作简洁。2.2.3 记分模块JFQ 图2.4 JFQ在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,要将计数数目分解成十进制并进行译码显示分变得
7、越来越麻烦。因此为了减少译码显示的麻烦,一般是将一个大的进制数分解成数个十进制以内的时制数,计数器串级连接。但随着位数的增加,电路的接口增加因此本设计采用IF语句从低往高判断是否有进位,以采取相应的操作,而且由于设计要求加减分均为10的倍数故而可以将个位一直设为0,这样既减少了接口,又大大地简化了设计。2.2.4 译码器显示模块YMQ图2.5 YMQ本译码器用于将抢答鉴别模块抢答成功的组别和计时器的时间进行显示,AIN43.0端输入需显示的二进制数组,DOUT76.0端输出显示在数码管,显示显示范围为09。2.3 系统的源程序2.3.1 抢答鉴别模块QDJBLIBRARY IEEE; USE
8、IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB ISPORT(CLR: IN STD_LOGIC; A, B, C, D: IN STD_LOGIC;-4个组A1,B1,C1,D1: OUT STD_LOGIC; STATES: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END ENTITY QDJB; ARCHITECTURE ART OF QDJB ISsignal a_1,b_1,c_1,d_1: STD_LOGIC;BEGINPROCESS(CLR,A,B,C,D) IS BEGINIF CLR=1 THEN STATES=0000;
9、a_1=0;b_1=0;c_1=0;d_1=0;-清零ELSIF a_1=1 or b_1=1 or c_1=1 or d_1=1 then null;-锁存,当有一组选中时其他组再抢答没作用ELSIF a=1 then a_1=1;STATES =0001;ELSIF b=1 then b_1=1;STATES =0010;ELSIF c=1 then c_1=1;STATES =0011;ELSIF d=1 then d_1=1;STATES =0100;END IF;a1=a_1;b1=b_1;c1=c_1;d1=d_1;END PROCESS; END ARCHITECTURE ART
10、;2.3.2 计时模块JSQLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JSQ IS PORT(CLR,LDN,EN,CLK: IN STD_LOGIC; TA,TB: IN STD_LOGIC; QA: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); QB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); baoj:OUT STD_LOGIC);END ENTITY JSQ; ARCHITECTURE ART OF JSQ IS S
11、IGNAL DA: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DB: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Q : STD_LOGIC; BEGIN PROCESS(TA,TB,CLR) IS BEGIN IF CLR=1 THEN DA=0000; DB=0000; ELSEIF TA=1 THEN DA=DA+1 ; END IF; IF TB=1 THEN DB=DB+1; END IF; END IF; END PROCESS; PROCESS(CLK) VARIABLE TMPA: STD_LOGIC_VECTOR(
12、3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR=1 THEN TMPA:=0000; TMPB:=0110;baoj=0;Q=1; ELSIF CLKEVENT AND CLK=1 AND Q=1 THEN IF LDN=1 THEN TMPA:=DA; TMPB:=DB; ELSIF EN=1 THEN IF TMPA=0000 THEN TMPA:=1001; IF TMPB=0000 THEN TMPB:=0110; ELSE TMPB:=TMPB-1; END IF; ELSE TMPA:=T
13、MPA-1; END IF; IF TMPB=0000 AND TMPA=0000 THEN - baoj=1;Q=0; END IF; END IF; END IF; QA=TMPA; QB=TMPB; END PROCESS; END ART;2.3.3 记分模块JFQLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JFQ IS PORT (RST: IN STD_LOGIC; ADD: IN STD_LOGIC; SUB: IN STD_LOGIC; CHOS: IN ST
14、D_LOGIC_VECTOR (3 DOWNTO 0); AA2, AA1, AA0, BB2, BB1, BB0: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); CC2, CC1, CC0, DD2, DD1, DD0: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); END JFQ; ARCHITECTURE ART OF JFQ IS BEGIN PROCESS (RST, ADD, SUB,CHOS) VARIABLE POINTS_A2, POINTS_A1: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE
15、 POINTS_B2, POINTS_B1: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE POINTS_C2, POINTS_C1: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE POINTS_D2, POINTS_D1: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN IF RST=1 THEN POINTS_A2:=0001; POINTS_A1:=0000; POINTS_B2:=0001; POINTS_B1:=0000; POINTS_C2:=0001; POINTS_C1:=0000;
16、POINTS_D2:=0001; POINTS_D1:=0000; -END IF; ELSIF ADD=1 THEN IF CHOS=0001 THEN IF POINTS_A1=1001 THEN POINTS_A1:=0000; IF POINTS_A2=1001 THEN POINTS_A2:=0000; ELSE POINTS_A2:=POINTS_A2+0001; END IF; ELSE POINTS_A1:=POINTS_A1+0001; END IF; ELSIF CHOS=0010 THEN IF POINTS_B1=1001 THEN POINTS_B1:=0000; I
17、F POINTS_B2=1001 THEN POINTS_B2:=0000; ELSE POINTS_B2:=POINTS_B2+0001; END IF; ELSE POINTS_B1:=POINTS_B1+0001; END IF; ELSIF CHOS=0011 THEN IF POINTS_C1=1001 THEN POINTS_C1:=0000; IF POINTS_C2=1001 THEN POINTS_C2:=0000; ELSE POINTS_C2:=POINTS_C2+0001; END IF; ELSE POINTS_C1:=POINTS_C1+0001; END IF;
18、ELSIF CHOS=0100 THEN IF POINTS_D1=1001 THEN POINTS_D1:=0000; IF POINTS_D2=1001 THEN POINTS_D2:=0000; ELSE POINTS_D2:=POINTS_D2+0001; END IF; ELSE POINTS_D1:=POINTS_D1+0001; END IF; END IF; ELSIF (SUB=1) THEN IF CHOS=0001 THEN IF POINTS_A1=0000 THEN POINTS_A1:=1001; IF POINTS_A2=0000 THEN POINTS_A2:=
19、1001; ELSE POINTS_A2:=POINTS_A2+1111; END IF; ELSE POINTS_A1:=POINTS_A1+1111; END IF; ELSIF CHOS=0010 THEN IF POINTS_B1=0000 THEN POINTS_B1:=1001; IF POINTS_B2=0000 THEN POINTS_B2:=1001; ELSE POINTS_B2:=POINTS_B2+1111; END IF; ELSE POINTS_B1:=POINTS_B1+1111; END IF; ELSIF CHOS=0011 THEN IF POINTS_C1
20、=0000 THEN POINTS_C1:=1001; IF POINTS_C2=0000 THEN POINTS_C2:=1001; ELSE POINTS_C2:=POINTS_C2+1111; END IF; ELSE POINTS_C1:=POINTS_C1+1111; END IF; ELSIF CHOS=0100 THEN IF POINTS_D1=0000 THEN POINTS_D1:=1001; IF POINTS_D2=0000 THEN POINTS_D2:=1001; ELSE POINTS_D2:=POINTS_D2+1111; END IF; ELSE POINTS
21、_D1:=POINTS_D1+1111; END IF; END IF; END IF; 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; DD0DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7=0000000; END CASE; END PROCESS; END ART;2.3.5
22、顶层原理图文件图2.6 顶层原理图3 仿真波形3.1 仿真波形3.1.1 抢答鉴别模块QDJB图3.1 抢答鉴别模块QDJBCLR低电平有效,当其为高电平时,输出无效。当其为低电平时,A,B,C,D哪一个为高电平则输出哪个,对应的LED灯亮。3.1.2 计时模块JSQ图3.2 计时模块JSQCLR低电平有效,当CLR为高电平时,电路不工作。当CLR为低电平时开始计时。如没人抢答,时间到后发出提示音。如有人抢答,答题时间到后,发出提示音。输入:QA个位,QB十位,输出:TA个位,TB十位。3.1.3 记分模块JFQ 图3.3 记分模块JFQ初始分数为100分,当ADD经过第一个上升沿时,CHOS
23、【3】输出高电平则对应的给D加上10分表3.1 十进制数字对应的LED译码器表示十进制二进制LED共阴极译码器输出0000001111111000100001102001010110113001110011114010011001105010111011016011011111017011100001118100011111119100111011114 实习总结4.1 实习总结在这次设计中,我花了不少的时间,其中有苦也有泪。苦的是我付出了不少的汗水,乐的是在付出的过程中我得到了许多,也学会了许多。 因为一个人的能力毕竟有限,在设计方面难免会出现这样那样的错误,但正是这些错误促进了我的进步。根
24、据电路的特点,我用层次化结构化设计概念,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来联试,这培养了我们合作的精神,同时加深了层次化设计的概念。在这次课程设计中,我真正体会到了知识的重要性。在设计的过程中,遇到问题我会先独立思考,到自己不能解决的时候我就会和同学讨论,实在解决不了我就会向指导老师请教,应该说从功能的实现到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚着大家对我的帮助。 最后,在设计的过程中我进一步养成了软件设计的方法,完成一个项目的的程序,进一步了解了设计的步骤,进一步加深了对EDA技术实用教程这门课的理解,增强了以后学习的兴趣,为以后的工作积累了一定的经验。 参考文献(1)、EDA技术与VHDL 潘松 黄继业 2009.09 (2)、EDA技术课程设计 孙俊逸 刘江海 2009.05 (3)、EDA技术与VHDL电路开发应用实践 刘欲晓 方强 2009.04