资源描述
摘 要随着计算机技术和电子技术的迅速发展,现在的抢答器的功能越来越强,准确性和可靠性也越来越高。大部分传统的抢答器都是基于数字电路构成的,不仅制作过程复杂,而且可靠性和准确性较低,还有成品面积大,安装、维护困难等问题。近年来电子技术得到迅速发展,使得电子系统的设计者利用EDA软件,就可以独立设计所需的专用集成电路(ASIC)器件,现在利用现场可编辑逻辑门阵列(简称FPGA)制作的抢答器,不仅制作过程简单,而且准确性也更高。本设计的主芯片是EP2C35F672C8,系统由组别判断电路、分频电路、倒计时电路、抢答判别电路、扫描信号产生电路、信号匹配电路和显示电路组成。该抢答器可以容纳四组八位选手同时参与抢答,系统具有清零功能和倒计时功能。经编译和仿真所设计的程序,并下载到开发系统上进行调试验证,最终完成抢答器的设计。 关键词: 电子设计自动化;可编程逻辑门阵列;抢答器 AbstractWith the development of electronic technology and electronic technology ,the Responder is now more powerful, more and more high reliability and accuracy. Most of the previous Responder composed of digital circuits based on the traditional. Complex production process, and the accuracy and reliability is not high, finished area, installation, maintenance difficulties. The rapid development of electronic technology in recent years, Electronic system designers use EDA software, it can be designed independently required special circuit (ASIC) devices. Now design and implementation of the multiplex responder based on FPGA, the production process is not only simple, but accuracy is also higher.The design of the main chip is EP2C35F672C8, the system judgment circuit by a group of the frequency divider circuit, the countdown circuit, answer determination circuit, the scanning signal generating circuit, a signal matching circuit and the display circuit. The Responder can accommodate four groups of eight players to participate simultaneously answer, the system has a clear function and countdown functions. The compilation and simulation of the design process, and downloaded to the development system to debug validation, the final completion Responder design. Key words: EDA;FPGA;Responder目录摘 要IAbstractII1 绪论11.1 前言11.2抢答器研究的背景与意义11.3 抢答器的研究现状11.4 系统设计要求22 抢答器总体设计方案32.1 系统总体方案设计32.2 FPGA的简介32.2.1 FPGA的结构与工作原理42.2.2 FPGA的特点42.3 FPGA的开发流程52.4 关于VHDL73 抢答器的系统设计方案和主要模块设计93.1 系统具体方案设计93.2 主要模块设计103.2.1 组别判断模块103.2.2 抢答判别模块103.2.3 倒计时模块113.2.4 扫描信号产生模块113.2.5 数码管位信号与段信号匹配模块123.2.6 显示模块123.2.7 分频模块134 抢答器的程序设计与实现144.1 组别判断模块程序设计与仿真144.2 抢答判别模块程序设计与仿真154.3 倒计时模块程序设计与仿真184.4 扫描信号产生模块程序设计与仿真204.5 数码管位信号与段信号匹配模块程序设计与仿真214.6 显示模块程序设计与仿真224.7 分频模块程序设计234.8 顶层电路的设计与仿真245 结论25致 谢26参考文献27附录 系统原理图28附录 源程序清单29IV1 绪论1.1 前言抢答器在各种智力竞赛中经常被使用到,也有些电视节目利用抢答器来提高节目的可看性,调动观众的参与热情。抢答器要求能准确判断和显示第一抢答信号并进行锁存,为了保证各种智力竞赛、比赛的准确性和公正性,对抢答器的研究有着其重要的意义。1.2抢答器研究的背景与意义 现在计算机技术和电子技术正在高速发展,而集成电路的生产工艺也不断提高,这使得电子产品的更新换代越来越快。其中以数字电路系统设计的电路规模更大,集成度更高,而且设计周期较短,灵活性也更强,面对不同的用户,能很方便地修改和迅速升级。现在,EDA(电子设计自动化)技术的广泛应用使得电路的设计者能在开发平台上使用HDL或画电路原理图的方式设计电路,这大大提高了电路设计的效率。因此,EDA技术已经成为现代电子设计工程师必须掌握的技术。通过查阅资料,理论设计,软件编程、调试等过程,了解和掌握利用FPGA芯片设计一个系统的一般方法。巩固和运用在电子技术基础等课程中所学理论知识,提高自己的自学能力和动手能力,为以后从事相关工作打下基础。随着现代科学技术的迅猛发展和经济全球化的的加强,EDA技术愈发重要。因此,研究基于FPGA的多路抢答器,有着非常现实的意义。1.3 抢答器的研究现状抢答器一直广泛应用于各种知识或智力竞赛场合。但目前所使用的抢答器实现方案主要有两种实现方案:一种是用单片机,单片机具有实现起来比较灵活的特点,但是如果抢答组数太多,会存在I/O口不足的问题;另一种是利用小规模数字逻辑芯片和触发器来实现,这种方法虽然设计思路相对简单,但是电路可靠性比较低,而且实现起来也比较复杂。随着电子技术和计算机技术的不断发展,EDA技术应运而生。它的出现使电子系统的设计更加方便,同时使应用系统向着更小型化,更快速,重量更轻的方向发展。 它的出现很大程度上减轻了设计者的工作强度,并且提高了电子系统的设计效率。1.4 系统设计要求本设计的主要任务是设计并实现基于FPGA的多路抢答器。该抢答器可以容纳四组八位参赛者同时抢答,每位参赛者设置一个按键以供使用。设置抢答使能信号,当此信号有效时,系统允许抢答。设置倒计时信号,当它为高电平时,系统进行20秒倒计时,当它为低电平时,倒计时停止。系统复位后,可以开始进行抢答并进行20秒倒计时,若有参赛者按下抢答开关,则抢答器能判断出第一抢答者并显示该组组号,同时使其他组参赛者的抢答按键无效。若倒计时时间为0时还是无人抢答,则会报警。系统具有清零复位功能。当清零复位信号有效时,抢答器对前一轮抢答的结果进行清零,恢复为初始状态。2 抢答器总体设计方案2.1 系统总体方案设计本设计主要实现判断第一抢答者,抢答倒计时和显示组号等功能。按系统需要实现的功能要求,系统总体框图如图2.1所示:1KHz扫描信号模块使能LED位信号清零抢答判别模块信号匹配模块组别判断模块译码显示模块按键键倒计时模块停止1Hz报警LED图2.1 系统总体设计框图软件部分则通过QuartusII9.1软件,用VHDL语言来实现多路抢答器的主要功能。2.2 FPGA的简介FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在20世纪80年代中期发展起来的一种可编程器件1。与PAL(Programmable Array Logic,可编程阵列逻辑)、GAL(Generic Array Logic,通用逻辑阵列)和CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)等器件相比,它具有最高的集成度,最丰富的特性和最高的性能。FPGA中可以包含几万至几百万的LUT和触发器,所以它能实现的系统功能更强也更复杂。FPGA的出现解决了以前那些可编程器件门电路数不足的缺点,同时它作为专用集成电路(Application Specific Integrated Circuit,ASIC)领域中的一种半定制电路,还很好的解决了定制电路不足的问题。通过开发设计,上至CPU,下至简单的门电路设计都可以使用FPGA来实现。FPGA作为一种新型的高密度可编程逻辑器件,它采用互补金属氧化物半导体CMOS(Complementary Metal Oxide Semiconductor)工艺制成,所以它的功耗很低。FPGA掉电后数据就会消失,所以每一片FPGA芯片都需要配置一片EPROM芯片,只要将程序下载到EPROM中,上电后会自动加载到FPGA芯片中,所以,FPGA无需专门的FPGA编程器,使用通用的EPROM编程器就行。当需要修改FPGA的功能时,只需更换一片EPROM即可,这样,FPGA芯片就能被反复使用,而且使用起来非常灵活。2.2.1 FPGA的结构与工作原理FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念2,它主要由可编程逻辑模块CLB(Configurable Logic Block)、可编程输入/输出模块IOB(Input Output Block)和可编程内部连线PI(Programmable Interconnect)这三部分组成。可编程逻辑块CLB是FPGA实现用户功能的基本逻辑单元。构成CLB的基础是逻辑单元LC(Logic Cell),一个LC中包括4个输入LUT、进位及控制逻辑和一个D触发器。可编程输入/输出模块IOB通常分布在器件的周围,是芯片与外界电路的接口部分,通过编程配置引脚功能为输入、输出或双向输入/输出功能,并为FPGA器件引脚与内部逻辑阵列之间提供连接资源。 可编程内部连线PI由可编程开关矩阵与各种长度的金属连线组成,可通过编程,将内部可编程逻辑块之间及可编程逻辑块与可编程输入/输出块之间相互连接起来,FPGA芯片内部有着丰富的布线资源, 可以满足各种复杂系统的需要。FPGA芯片的设计原理主要是采用查找表来实现逻辑函数。在FPGA中,LUT和数据选择器的主要作用是实现组合逻辑功能,而触发器是实现时序逻辑功能的基本电路。LUT的本质就是一个SRAM,用户在FPGA开发平台上采用原理图或硬件描述语言(HDL)来描述一个逻辑电路,然后通过FPGA芯片数据配置与调试接口将配置结果写入到SRAM中,这样,每输入一个信号进行逻辑运算就相当于输入一个地址进行查表,找出每个地址对应的内容,然后输出即可。2.2.2 FPGA的特点FPGA的基本特点有以下几个方面: (1)采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。(2)FPGA可做其它全定制或半定制ASIC电路的中试样片。(3)FPGA内部有丰富的触发器和IO引脚。 (4)FPGA是专用集成电路中设计周期最短、开发费用最低、风险最小的器件之一。(5) FPGA采用高速CMOS工艺,实现了功耗低的要求,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。采用FPGA技术可以降低开发成本、缩短开发周期、简化设计文档管理、提高电子系统设计的自动化程度,设计者拥有完全的自主权,设计的系统具有良好的可移植性与可测试性,为系统开发提供可靠保证。FPGA正是凭借这些众多优秀的特点,正迅速占领全球市场,从低成本产品的简单应用到复杂性的开发平台设计,都可以见到FPGA的身影。2.3 FPGA的开发流程FPGA的开发流程是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。通常,FPGA的设计方法有两种,包括自下向上设计和自上向下设计。对于较大规模的设计一般采用自上向下设计,这种方法是先定义顶层模块,接着定义顶层模块所需的子模块,直至最底层的模块。而自下向上设计是先分别设计底层模块,接着组成大的模块,最后完成顶层模块的设计。本次多路抢答器系统采用的是自下向上设计方法。FPGA的开发流程一般包括设计准备、设计输入、功能仿真、优化处理、时序仿真、器件编程和下载验证等步骤3。图2.2为FPGA的开发流程图。设计准备设计输入:1. 原理图2. 硬件描述语言3. 波形图功能仿真时序仿真优化处理下载验证器件编程图2.2 FPGA的开发流程图1.设计准备在使用FPGA芯片进行设计之前,需要根据任务要求确定设计方案,对设计方法和器件选择等进行准备,选择合适的设计方法和器件。2.设计输入设计输入是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入给开发工具4。最常用的方法有以下两种。(1) 原理图输入方式这是FPGA设计的基本方法之一,几乎所有的设计环境都提供使用原理图输入方式。这种输入方式是利用元器件库直接画出原理图。这种方法直观、易用,但移植性较差。(2) 硬件描述语言设计输入方式这种设计输入方式是大型或复杂设计工程中最常用的,现在最流行也是最常用的HDL有VHDL和Verilog HDL两种。这种输入方式通用性好,移植性强,同时语言的公开可利用性也便于大规模系统的设计,它还具有很强的逻辑描述和仿真功能,效率较高。3.功能仿真用户所设计的电路必须在编译之前逻辑功能验证,即功能仿真,也叫前仿真,此时的仿真是没有延时的,所以它仅是对初步的功能进行检测5。4.优化处理优化处理是FPGA开发设计中的核心环节。在设计的优化处理过程中,编译器对设计输入文件进行逻辑化简、综合优化、并适当地用一片或多片器件自动进行适配,最后产生编程用的编程文件。5.时序仿真时序仿真也叫后仿真,它是在选择了具体器件并完成布局、布线后进行的时序关系仿真。它不仅要保证逻辑上的正确,还要保证在加入了器件的物理时延特性下是正确的。6.器件编程与下载验证时序仿真之后,软件就可产生供器件编程使用的数据文件,然后可以下载到对应的FPGA器件内部进行实际测试,验证设计的正确性。2.4 关于VHDLVHDL是一种硬件描述语言,它的全名是Very-High-Speed Integrated Circuit Hardware Description Language,它起源于美国政府于1980年启动的超高速集成电路计划,1983年由美国国防部发起创建,后经美国电气和电子工程师协会进一步发展,目前,它已成为开发设计中使用最多的硬件描述语言之一,是电子工程领域中通用的硬件描述语言并广泛应用于电子设计领域。与其他硬件描述语言相比,VHDL具有以下优点:1. VHDL具有较强的行为描述能力VHDL可用于从门级、电路级、系统级的描述,支持层次化设计6。VHDL拥有丰富的数据类型,它支持标准定义的数据类型,同时也支持用户自定义的数据类型,这样使用户使用起来带来方便,也使设计更为灵活。2. VHDL的设计与具体器件无关设计者在使用VHDL设计硬件电路时,并不需要首先确定设计采用哪种器件,也不需要特别熟悉器件的内部结构,这样可以使设计者能集中精力进行系统设计,当设计完成后再来考虑选择合适的器件。3. VHDL具有很强的移植能力由于VHDL是使用最多的硬件描述语言之一,各大EDA公司研制的FPGA开发工具都支持VHDL,这样VHDL可以在不同综合工具、模拟工具和开发平台之间互相移植。4. VHDL具有丰富的仿真语句和库函数VHDL使得在系统设计的过程中,能实时的对系统进行仿真,这样就能很方便的随时检验系统的功能可行性。 3 抢答器的系统设计方案和主要模块设计3.1 系统具体方案设计根据设计要求,该系统的总体电路如图3.1所示。图3.1 系统总体电路图该系统主要由七个电路模块组成,分别为组别判断电路、分频电路、倒计时电路、抢答判别电路、扫描信号产生电路、数码管位信号与段信号匹配电路和译码显示电路。其中,组别判断电路是对每一位参赛者的组号进行判断,抢答判别电路主要完成对最快抢答者的判断功能;倒计时电路对抢答进行20秒倒计时;分频电路是为了得到1Hz的时钟信号;扫描信号产生电路产生的扫描信号除了能作为多位数码管显示的位选信号外还能作为多位数码管显示相应位的段码扫描信号;数码管位信号与段信号匹配电路是将多位七段数码管相应位位信号和段信号进行匹配以正确显示组号和倒计时时间信号;译码显示电路则是显示抢答器的状态。因此,电子抢答器的输入信号包括时钟信号CLK,复位信号CLR,抢答器使能信号EN,八个参赛者的抢答按钮A0、A1、B0、B1、C0、C1、D0、D1,报警信号M还有LED位信号和LED段信号。抢答器的工作流程如下:先将抢答使能信号EN和倒计时开关信号RST置于高电平,然后进行复位,此时参赛者可以开始进行抢答,同时倒计时数码管显示从19开始进行倒计时,A、B、C、D四组抢答者谁最先按下抢答按键,则该组抢答成功,该组所对应的显示灯被点亮,并通过译码显示电路模块显示其参赛编号Q6.0,同时主持人将倒计时开关信号置于低电平,以免报警。若倒计时结束时无人抢答,则系统报警。如果复位信号CLR有效,则会清除上一轮抢答的结果,使电路恢复到初始状态,以便重新开始新一轮抢答。 3.2 主要模块设计该系统主要由组别判断模块、倒计时模块、抢答判别模块、数码管位信号与段信号匹配模块、扫描信号产生模块、译码显示模块和分频模块组成。本设计使用VHDL语言编程。3.2.1 组别判断模块组别判断模块的主要作用是对每一位参赛者的组号进行判断。其模块符号如图3.2所示。该模块输入信号有时钟信号CLK(1KHz)、四组按键A1.0、B1.0、C1.0、D1.0,输出信号为每一组的抢答信号S0、S1、S2、S3。图3.2 组别判断模块的符号3.2.2 抢答判别模块 抢答判别模块具有第一抢答信号的鉴别和锁存功能,在进行锁存的同时,对抢答状态进行显示。其模块符号如图3.3所示。该模块的输入信号有四组的抢答信号、清零信号CLR、抢答使能信号EN,输出信号有各组抢答状态显示信号LEDA、LEDB、LEDC、LEDD和抢答成功组别编号信号Q3.0。系统复位后,当使能信号EN为高电平时,系统根据选手按下抢答按钮的先后顺序选择最先抢答信号,其对应的抢答状态显示信号LEDA-LEDD输出高电平,抢答成功组别编号由信号Q3.0输出,并锁存抢答器此时的状态,使其他选手的抢答按键无效直到清零信号有效为止。在每一轮抢答开始之前,都要使用复位清零信号CLR,使电路恢复初始状态。图3.3 抢答判别模块的符号3.2.3 倒计时模块 倒计时模块的主要作用是进行抢答倒计时。系统复位后,当倒计时开关信号为高电平时,倒计时数码管从19开始以秒为单位进行倒计时,当有选手抢答时,主持人给出停止计时信号;如果倒计时结束后还无人抢答,倒计时模块会输出一个高电平使LED灯亮。其模块符号如图3.4所示。该模块的输入信号有时钟信号CLK(1Hz)、清零信号CLR、倒计时停止信号RST,输出信号有计时器高位信号TH3.0、计时器低位信号TL3.0、LED灯提示信号M。图3.4 倒计时模块的符号3.2.4 扫描信号产生模块扫描信号产生模块的主要作用是产生扫描信号,它不仅能作为多位数码管显示的位选信号,还能作为数码管显示相应位的段码扫描信号。其模块符号如图3.5所示。该模块的输入信号为时钟信号CLK(1KHz),输出信号为产生的扫描信号Q2.0。图3.5 扫描信号产生模块的符号3.2.5 数码管位信号与段信号匹配模块由于该系统需要显示一位选手编号和两位倒计时时间信号,要正确显示这些数据,需要对多位七段数码管相应显示位的位信号与段信号进行匹配。其模块符号如图3.6所示。该模块的输入信号有扫描信号SEL2.0、抢答选手编号的BCD码D33.0、倒计时模块输出的时间信号的高位和低位的BCD码D13.0和D23.0;输出信号为显示信号Q3.0。图3.6 数码管位信号与段信号匹配模块的符号3.2.6 译码显示模块译码显示模块的实质是一个LED共阳极显示模块的译码器,其作用是将输入的BCD码转换成可供数码管直接显示用的七段码。其模块符号如图3.7所示。图3.7 译码显示模块的符号其中D3.0为输入的BCD码,Q6.0为输出的七段码,它将输入的BCD码译码显示为十进制数字的09。其真值表如表3.1所示。表3.1 七段LED真值表输入输出显示数字D3 D2 D1 D0a b c d e f g0 0 0 00 1 1 1 1 1 100 0 0 10 0 0 0 1 1 010 0 1 01 0 1 1 0 1 120 0 1 11 0 0 1 1 1 13 0 1 0 01 1 0 0 1 1 04 0 1 0 11 1 0 1 1 0 150 1 1 0 1 1 1 1 1 0 16 0 1 1 10 0 0 0 1 1 17 1 0 0 01 1 1 1 1 1 18 1 0 0 11 1 0 1 1 1 193.2.7 分频模块由于倒计时模块需要1Hz的时钟信号,而FPGA的时钟信号为50MHz,所以需要分频来得到1Hz的时钟信号。其模块符号如图3.8所示。图3.8 分频模块的符号4 抢答器的程序设计与实现4.1 组别判断模块程序设计与仿真组别判断模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ZBPD IS PORT(CLK:IN STD_LOGIC; A,B,C,D:IN STD_LOGIC_VECTOR(1 DOWNTO 0); S0,S1,S2,S3:OUT STD_LOGIC );END ZBPD;ARCHITECTURE ABV OF ZBPD IS BEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN S0=A(0) AND A(1) ; S1=B(0) AND B(1) ; S2=C(0) AND C(1) ; S3=D(0) AND D(1) ; END IF; END PROCESS; END ABV;其波形仿真如图4.1所示。图4.1 组别判断模块的仿真波形图抢答信号为低电平有效。图中只有当同组的两个参赛者都输出高电平时,该组的输出信号才为高电平。4.2 抢答判别模块程序设计与仿真抢答判别模块的程序流程图如图4.2所示。开始Y清零信号是否有效?系统复位N是否允许抢答?NY抢答无效若有小组抢答,显示最先抢答者组号锁存抢答状态,其它组抢答无效图4.2 抢答判别模块的程序流程图抢答判别模块的程序如下所示。LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY QDPB IS PORT ( CLR : IN STD_LOGIC; EN : IN STD_LOGIC; A,B,C,D : IN STD_LOGIC; LEDA : OUT STD_LOGIC; LEDB : OUT STD_LOGIC; LEDC : OUT STD_LOGIC; LEDD : OUT STD_LOGIC; Q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); END QDPB;ARCHITECTURE RTL OF QDPB IS SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TAG:STD_LOGIC; BEGIN TMP=A&B&C&D; PROCESS(CLR,EN,A,B,C,D,TMP) BEGIN IF CLR=0THEN Q=0000; LEDA=0; LEDB=0; LEDC=0; LEDD=0; TAG=0;ELSIF EN=1 THEN IF TAG=0THEN IF TMP=0111THEN LEDA=1; LEDB=0; LEDC=0; LEDD=0;Q=0001; TAG=1; ELSIFTMP=1011THEN LEDA=0; LEDB=1; LEDC=0; LEDD=0;Q=0010;TAG=1;ELSIF TMP=1101THEN LEDA=0; LEDB=0; LEDC=1; LEDD=0;Q=0011;TAG=1;ELSIF TMP=1110THEN LEDA=0; LEDB=0; LEDC=0; LEDD=1;Q=0100;TAG=1; END IF;END IF;END IF; END PROCESS;END RTL;其波形仿真如图4.3所示。图4.3 抢答判别模块的仿真波形图从图中可看出,A组最先抢答,LEDA输出高电平,同时输出信号为“001”。这说明该模块能对第一抢答信号进行鉴别并锁存该信号,同时与抢答成功者组号相对应的LED灯会被点亮以发出提示。4.3 倒计时模块程序设计与仿真倒计时模块的程序流程图如图4.4所示。开始Y清零信号是否有效?各信号复位N开关信号是否有效?YN开始倒计时停止倒计时图4.4 倒计时模块的程序流程图倒计时模块程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JS IS PORT ( CLK,CLR,RST : IN STD_LOGIC; TH,TL : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); M : OUT STD_LOGIC); END JS;ARCHITECTURE RTL OF JS IS SIGNAL HH:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL LL:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK,CLR,RST,HH,LL) BEGINIF CLR=0 THEN LL=1001;HH=0001;M=0; ELSIF CLKEVENT AND CLK=1 THEN IF RST=1 THEN LL=LL-1; IF LL=0000 THEN LL=1001;HH=HH-1; IF HH=0000 AND LL=0000 THEN M=1; HH=0000; LL=0000; END IF; END IF; END IF;END IF;TH=HH;TL=LL;END PROCESS;END RTL; 其波形仿真如图4.5所示。图4.5 倒计时模块的仿真波形图由图中可看出,当CLR信号无效和RST为高电平时,倒计时模块从19开始进行倒计时,倒计时为0时,发出一个高电平信号报警。4.4 扫描信号产生模块程序设计与仿真扫描信号产生模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY XHCS IS PORT (CLK:IN STD_LOGIC; Q:OUT INTEGER RANGE 0 TO 7);END XHCS;ARCHITECTURE XHCS_BEHAVE OF XHCS IS BEGIN PROCESS (CLK) VARIABLE TMP:INTEGER RANGE 0 TO 7; BEGIN IF CLKEVENT AND CLK=1 THEN TMP:=TMP+1; END IF; QQQQQQQQQQQQQQQNULL; END CASE; END PROCESS;END THREE;其波形仿真如图4.8所示。图4.8 译码显示模块的仿真波形图由图中可看出,该模块能正确显示09这十个数字。4.7 分频模块程序设计分频模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FP ISPORT( CLK : IN STD_LOGIC; CLK1:OUT STD_LOGIC);END FP;ARCHITECTURE MIX OF FP ISSIGNAL COUNT :INTEGER RANGE 0 TO 49999999;BEGIN FP_PROC:PROCESS(CLK) BEGIN IF RISING_EDGE(CLK) THEN IF COUNT=49999999 THEN COUNT=0; ELSE COUNT24999999 THENCLK1=1; ELSE CLK1=0; END IF; END IF; END PROCESS FP_PROC;END MIX;该模块作用是将50MHz的时钟信号转换为1Hz的时钟信号。4.8 顶层电路的设计与仿真系统顶层电路见附录,其波形仿真如图4.9所示。图4.9 系统总体仿真波形图从图中可看出,A组最先抢答,系统正确判断出了第一抢答者的组号,并显示A组的LED灯亮。5 结论此设计经下载到开发系统上调试,完全符合设计要求。经过两个多月时间的努力,我终于完成了基于FPGA的多路抢答器的设计。在这个过程中理论联系实践,把在学校四年所学知识连成一串,通过查资料和搜集有关的文献,培养了我的自学能力和动手能力。同时,我对一个产品也有了一个新的认识,从方案的选择、设计再到实现,每一步都需要认真研究,克服困难。在这次毕业设计之前,我对于FPGA只有一些最基本的认识,对VHDL语言更是没听说过。从设计开始,我查阅了很多资料,自学了关于FPGA和VHDL的相关知识,将QuartusII软件下载下来自己不断摸索,同时,遇到问题向老师和同学门请教,也让我受益匪浅。当然,在设计过程中由于时间仓促,还有一些地方难免存在不足之处,在设计中有些功能还不完善。但在以后的工作中,我会严格要求自己,追求完美,恳请老师批评指正。毕业设计是对我以前所学知识的一次很好的总结和实际应用,虽然结束了,但对我的影响是深刻的,它培养了我的自学能力和动手能力,同时我分析问题和解决问题的能力也得到了提高。本次毕业设计最主要的收获是让我掌握了使用VHDL语言编程和对QuartusII9.1软件的使用,让我对所学的一些专业知识有了更深的理解,使我的理论知识与实践充分地结合,为以后的工作做好准备。致 谢感谢我的母校对我四年来的大力栽培。本设计是在任堰牛老师的精心指导下完成的。任老师平日里工作繁多,但在我做毕业设计的每个阶段,从查阅资料,设计方案的确定和修改,程序的编写等过程中都给予了我悉心的指导。任老师有着深厚的理论水平,严谨的治学态度,和丰富的实践经验,最可贵的是他会不厌其烦的为我们解决他力所能及的问题。在此,我谨向任堰牛老师表示崇高的敬意和衷心的感谢!与此同时,还要感谢同学们的帮助,在整个毕业设计的过程中,不管遇到什么困难,同学们都积极给予帮助,为我解决了不少问题,从而使我更好更顺利的完成我的毕业设计,在此谢谢你们。 由于本人学识有限,加之时间仓促,文中不免有错误和待改进之处,真诚欢迎各位师长、同学提出宝贵意见。最后,我要向在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩的各位老师表示衷心的感谢!谢谢!参考文献1林灶生.Verilog FPGA芯片设计.北京:北京航空航天大学出版社,2005.2王振红.FPGA开发与应用.北京:清华大学出版社,2010.3王开军.姜宇柏.面向CPLD/FPGA的VHDL设计.北京:机械工业出版社,2006,28-65.4葛亚明,彭永丰,薛冰.零基础学FPGA.北京:机械工业出版社,2010.5陈忠平,高金定,高见芳.基于QuartusII的FPGA/CPLD设计与实践.北京:电子工业出版社,2010.6周淑阁. FPGA/CPLD系统设计与应用开发. 电子工业出版社,2011.7孟庆海,张洲.VHDL基础及经典实例开发.西安:西安交通大学出版社,2008.8康华先.电子技术基础(数字部分)第四版M.北京:高等教育出版社,2000. 213-224. 附录 系统原理图附录 源程序清单组别判断模块-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ZBPD IS PORT(CLK:IN STD_LOGIC; A,B,C,D:IN STD_LOGIC_VECTOR(1 DOWNTO 0); S0,S1,S2,S3:OUT STD_LOGIC );END ZBPD;ARCHITECTURE ABV OF ZBPD IS BEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN S0=A(0) AND A(1) ; S1=B(0) AND B(1) ; S2=C(0) AND C(1) ; S3=D(0) AND D(1) ; END IF; END PROCESS; END ABV;抢答判别模块-LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY QDPB IS PORT ( CLR : IN STD_LOGIC; EN : IN STD_LOGIC; A,B,C,D : IN STD_LOGIC; LEDA : OUT STD_LOGIC; LEDB : OUT STD_LOGIC; LEDC : OUT STD_LOGIC; LEDD : OUT STD_LOGIC; Q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); END QDPB;ARCHITECTURE RTL OF QDPB IS SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TAG:STD_LOGIC; BEGIN TMP=A&B&C&D; PROCESS(CLR,EN,A,B,C,D,TMP) BEGIN IF CLR=0THEN Q=0000; LEDA=0; LEDB=0; LEDC=0; LEDD=0; TAG=0;ELSIF EN=1 THEN IF TAG=0THEN
展开阅读全文