数字逻辑系统设计.doc
数字逻辑系统设计课程设计报告题 目 智力竞赛抢答器设计 学 院 电子信息工程学院 专 业 电子工程学院 学生姓名 万海堂 班 级 A1122 学 号 指导教师 盛老师 二一三年十二月目 录 摘要:21EDA技术的发展3一、设计内容及要求41、设计内容42、设计要求4二、抢答器设计方案51、设计方案5三、主要VHDL源程序与系统模块51. 抢答鉴别电路QDJB的VHDL源程序和模块52分器电路JFQ的VHDL源程序63计时器电路JSQ的VHDL源程序84数码管显示电路的VHDL源程序95力抢答器在QUARTUS II中所用的引脚分配框图11四、路抢答器总电路图及系统仿真11五、设计技巧分析13心得体会14六、参考文献14摘要:智力抢答器是“快乐学习”这一教育模式的典范,它采用在规一段时间内抢答与必答等方式,在给人们的生活带来乐趣的同时,也使参与与观众在愉悦的气氛中学到一些科学知识与生活知识,因此很受大家的喜欢。但是,在这类比赛中,对于水先抢答后抢答,在何时抢答,如何计算答题时间等等问题,我们需要一种具备自动锁存,置位,清零等功能智能抢答器来解决这些问题。 关键字:FPGA,VHDL,波形图,引脚分配1EDA技术的发展人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管;后者的核心就是EDA技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作:IC设计,电子电路设计以及PCB设计。没有EDA技术的支持,想要完成上述超大规模集成电路的设计制造是不可想象的,但是面对当今飞速发展的电子产品市场,设计师需要更加实用、快捷的EDA工具,使用统一的集体化设计黄精,改变传统的设计思路,将精力集中到设计构想、方案比较和寻找优化设计等方面,需要以最快的速度,开发出性能优良、质量一流的电子产品,对EDA技术提出了更高的要求。未来的EDA技术将在仿真、时序分析、集成电路自动测试、高速印刷版设计及开发操作平台的扩展等方面取得新的突破,向着功能强大、简单易学、使用方便的方向发展。2. EDA技术的设计优势传统的设计方法采用自底向上的设计方法,一般先按电子系统的具体功能要求进行功能划分,然后对每个子模块画出真值表,用卡诺图进行手工逻辑简化,写出布尔表达式,画出相应的逻辑线路图,再据此选择元器件,设计电路板,最后进行实测与调试,由于无法进行硬件系统功能仿真,如果某一过程存在错误,查找和修改十分不便,所以这是一种费时、费力的设计方法,而现代电子设计技术(EDA)是自顶向下且先进高效的。在电子产品的设计理念、设计方式、系统硬件构成、设计的重用性、知识产权、设计周期等方面,EDA技术具有一定的优势。所以本次设计的抢答器抛弃了传统的设计方法,选择了采用主流的EDA技术进行设计。 智力抢答器设计一、设计内容及要求 1、设计内容 在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。同时,还可以设置计分、犯规及奖惩计录等多种功能。 2、设计要求 ((1) 设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。 (2) 电路具有第一抢答信号的鉴别和锁存功能。 (3) 设置计分电路。 (4) 设置犯规电路。二、抢答器设计方案1、设计方案 抢根据系统设计要求可知,系统的输入信号有:各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:四个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。 三、主要VHDL源程序与系统模块1. 抢答鉴别电路QDJB的VHDL源程序和模块-QDJB.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB IS PORT(CLR: IN STD_LOGIC; A, B, C, D: IN STD_LOGIC; A1,B1,C1,D1: OUT STD_LOGIC; STATES: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END ENTITY QDJB; ARCHITECTURE ART OF QDJB IS CONSTANT W1: STD_LOGIC_VECTOR: ="0001" CONSTANT W2: STD_LOGIC_VECTOR: ="0010" CONSTANT W3: STD_LOGIC_VECTOR: ="0100" CONSTANT W4: STD_LOGIC_VECTOR: ="1000" BEGIN PROCESS(CLR,A,B,C,D) IS BEGINIF CLR='1' THEN STATES<="0000" ELSIF (A='1'AND B='0'AND C='0'AND D='0') THEN A1<='1' B1<='0' C1<='0' D1<='0' STATES<=W1; ELSIF (A='0'AND B='1'AND C='0'AND D='0') THEN A1<='0' B1<='1' C1<='0' D1<='0' STATES<=W2; ELSIF (A='0'AND B='0'AND C='1'AND D='0') THEN A1<='1' B1<='0' C1<='1' D1<='0' STATES<=W3; ELSIF (A='0'AND B='0'AND C='0'AND D='1') THEN A1<='0' B1<='0' C1<='0' D1<='1' STATES<=W4; END IF; END PROCESS; END ARCHITECTURE ART; 2分器电路JFQ的VHDL源程序 计分器电路按一定数制的加减即可,但随着计数数目的增加会变得很复杂。我们可以将一个大的进制数分解为数个十进制以下,并将计数器级联。LIBRARY 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; CHOS: IN STD_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 ENTITY JFQ ; ARCHITECTURE ART OF JFQ IS BEGIN PROCESS(RST,ADD,CHOS) IS VARIABLE POINTS_A2,POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE 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 (ADD'EVENT AND ADD='1') THEN IF RST='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" ELSIF CHOS="0001" THENIF POINTS_A1="1001" THEN POINTS_A1: ="0000" IF POINTS_A2="1001" THEN POINTS_A2: ="0000" ELSE POINTS_A2: =POINTS_A2+'1' END IF; ELSE POINTS_A1: =POINTS_A1+'1' END IF; ELSIF CHOS="0010" THENIF POINTS_B1="1001" THEN POINTS_B1: ="0000" IF POINTS_B2="1001" THEN POINTS_B2: ="0000" ELSE POINTS_B2: =POINTS_B2+'1' END IF; ELSE POINTS_B1: =POINTS_B1+'1' END IF; ELSIF CHOS="0100" THEN IF POINTS_C1="1001" THEN POINTS_C1: ="0000" IF POINTS_C2="1001" THEN POINTS_C2: ="0000" ELSE POINTS_C2: =POINTS_C2+'1' END IF; ELSE POINTS_C1: =POINTS_C1+'1' END IF; ELSIF CHOS="1000" THEN IF POINTS_D1="1001" THEN POINTS_D1: ="0000" IF POINTS_D2="1001" THEN POINTS_D2: ="0000" ELSE POINTS_D2: =POINTS_D2+'1' END IF; ELSE POINTS_D1: =POINTS_D1+'1' 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; DD0<="0000" END PROCESS; END ARCHITECTURE ART; 3计时器电路JSQ的VHDL源程序 计时器电路即有计时初始值的预置功能,又有减计数功能。其中,初始值的预置功能是将两位数分别进行预置。LIBRARY 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); END ENTITY JSQ; ARCHITECTURE ART OF JSQ IS SIGNAL DA: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DB: STD_LOGIC_VECTOR(3 DOWNTO 0); 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) IS VARIABLE TMPA: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR='1' THEN TMPA: ="0000" TMPB: ="0110" ELSIF CLK'EVENT AND CLK='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: =TMPA-1; END IF; END IF; END IF; QA<=TMPA; QB<=TMPB; END PROCESS; END ARCHITECTURE ART; 4数码管显示电路的VHDL源程序 数码管显示电路需要将数码管的位码和段码进行选定,本实验需用6个数码管,我们需要将6个动态数码管进行编译,进行位码选定,段码编译。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xiaoshi ISPORT(CLK1:IN STD_LOGIC;QA,QB,STATES,AA2,AA1,AA0: in STD_LOGIC_VECTOR(3 DOWNTO 0);led7: out STD_LOGIC_VECTOR(6 DOWNTO 0);wei:out std_logic_vector(7 downto 0);END xiaoshi;ARCHITECTURE three OF xiaoshi ISsignal aa:std_logic_vector(2 downto 0);signal ss2:std_logic_vector(3 downto 0);BEGINPROCESS(CLK1)BEGINIF CLK1'EVENT AND CLK1='1' THEN case aa iswhen "000" =>ss2<=QA;aa<="001"wei<=""when "001" =>ss2<=QB;aa<="010"wei<=""when "010" =>ss2<=STATES;aa<="011"wei<=""when "011" =>ss2<=AA2;aa<="100"wei<=""when "100" =>ss2<=AA1;aa<="101"wei<=""when "101" =>ss2<=AA0;aa<="000"wei<=""when others=>null;end case;case ss2 iswhen "0000"=> led7<=""when "0001"=> led7<=""when "0010"=> led7<=""when "0011"=> led7<=""when "0100"=> led7<=""when "0101"=> led7<=""when "0110"=> led7<=""when "0111"=> led7<=""when "1000"=> led7<=""when "1001"=> led7<=""when others=> led7<=""end case;end if;end process;end three;5力抢答器在QUARTUS II中所用的引脚分配框图图6 智力抢答器在设计中所用的框图注:图中的引脚号是本次在QUARTUS II中所用的引脚接口四、路抢答器总电路图及系统仿真(1)系统仿真抢答鉴别电路仿真图计分器电路仿真图 计时器电路仿真图多选一译码显示电路仿真图五、设计技巧分析1.在抢答鉴别电路设计中,A,B,C,D,八组抢答,理论上应该有256种可能情况,但实际上由于芯片反应速度快到一定程度时,两组以上同时抢答成功的可能性非常不,因此我们可设计成只有四种情况,这大大简化了电路的设计复杂性。2.在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,要将计数数目分解成十进制并进行译码显示分变得越来越麻烦。因此为了减少译码显示的麻烦,一般是将一个大的进制数分解成数个十进制以内的时制数,计数器串级连接。但随着位数的增加,电路的接口增加因此本设计采用IF语句从低往高判断是否有进位,以采取相应的操作,既减少了接口,又大大地简化了设计。3.本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。其中初始值的预置功能是将两位数分解成两个数分别进行预置,每个数的预置则采用高电平计数的方式进行。减计数的功能与上述的加法计数类似,非常简洁。 心得体会 经过一星期的EDA实习,我们组的两位成员通过不懈努力,成功地设计出了数字式四路竞赛抢答器。回首这两周,虽然因为初次涉及EDA技术及quartus软件,对相关知识知之甚少,我们也遇到了很多困难,但是我们在这次实习的过程中都受益匪浅。 此次实习前我们对于数字电子技术这门课程的学习仅是纸上谈兵,在头脑中抽象地记忆、理解那些课本上的理论知识,有些理论知识晦涩难懂,甚至要靠自己死记硬背。而这次的实习就提供机会让我们在实践中灵活运用知识。我们通过在实践中发现问题,进而去书本中找相关的知识去解决问题,从而巩固了理论知识,同时也增强了我们以后的学习兴趣,为以后的工作积累了一定的经验。经过这次实习,我们有了很深刻的体会。首先,要学好书本上的基本知识,掌握常用编程语句,这样在设计中才会游刃有余,得心应手。其次,在遇到困难时要勇于面对,其实只要有耐心,再加上试验中的细心操作,一切困难都将迎刃而解。 六、参考文献 1 谭会生, 电子技术实验与课程设计2 高吉祥,电子技术基础实验与课程设计.电子工业出版社3 吕思忠,数子电路实验与课程设计.哈尔滨工业大学出版社4 郑家龙,集成电子技术基础教程北京:高等教育出版社