毕业设计(论文)基于FPGACPLD的数字电压采集.doc
2011 届毕业设计(论文)题 目:基于FPGA/CPLD的数字电压采集学 院:电子与信息工程学院专 业:班 级:姓 名:指导教师:起讫时间:2011-3-12011-6-18二一一 年 六 月基于FPGA/CPLD的电压数据采集摘 要基于FPGA/CPLD的数字电压表,它设计简单,且相对于用微处理器控制通用A/D转换期间的数字电压表的设计的灵活性明显提高,系统功能的扩展变得简单,在使用过程中得到了广泛的运用。因此,基于FPGA的数字电压表是一款具有一定研究价值和实用价值的产品。本次设计采用EDA技术和FPGA芯片设计数字电压表。在硬件方面,主要描述了ADC0809转换控制模块、数据转换模块、译码模块组成。在软件方面,在MAX+PLUSII下进行软件编程实现正确的工作时序后,将编译结果下载到GW48实验箱进行验证。本次设计已经成功完成了数字电压表的制作,在实验箱上通过旋转电位器的旋钮,数码管上的电压能够实时显示出来,并可通过按键保持当前值。关键词:数字电压表 FPGA MAX+PLUSII ADC0809 Based on FPGA / CPLD's Voltage Data AcquisitionAbstractBased on FPGA / CPLD digital voltage meter, it is simple, and compared with a microprocessor-controlled general-purpose A / D converter digital voltmeter during the design significantly improved the flexibility, easy expansion of system functions, in the course been a widely used. Therefore, based on FPGA is a digital voltmeter with a certain research value and practical value of the product. The design uses FPGA chip design EDA technology and digital voltmeter. On the hardware side, the main control module describes the ADC0809 conversion, data conversion module, decoding module. On the software side, under the MAX + PLUSII software programming work to achieve the correct timing, it will compile the results downloaded to GW48 test box for verification. This design has successfully completed the production of digital voltage meter, in the experimental tank by turning the potentiometer knob, the voltage on the LED display in real time, and through the button to keep the current value.Key Words: Digital voltmeter; FPGA; MAX+PLUSII; ADC0809目 录摘 要IAbstractII第一章 绪论11.1 设计背景和意义11.1.1 FPGA的发展11.1.2 FPGA芯片的介绍:21.2 EDA设计概述:31.2.1 VHDL语言介绍31.2.2 时序电路设计41.3 数字电压表的研究现状51.3.1 基于单片机的数字电压表实现方式51.3.2 基于FPGA的数字电压表实现方式51.4 论文章节介绍6第二章 基于FPGA的数字电压表设计72.1 基于FPGA的数字电压表72.1.1 基于FPGA的数字电压表实现方式72.1.2 各方案的比较:7第三章 数字电压表的硬件电路设计93.1硬件总体结构93.1.1 硬件框图:93.1.2 硬件原理图:103.2 转换模块的比较103.3 A/D转换模块113.3.1 A/D转换模块功能阐述113.3.2 模数转换芯片ADC0809介绍113.3 FPGA主控制模块133.3.1 主控制模块功能阐述133.3.2 主控制芯片的介绍143.3.3 芯片顶层引脚图:143.4 LED显示模块153.4.1 LED显示模块功能阐述:153.4.2 LED发光二极管选择及原理图:153.4.3 译码器的选择:163.5 输入电源模块163.6配置下载模块:173.7本章小结18第四章 数字电压表的软件设计及仿真194.1 ADC0809转换模块194.1.1 ADC0809状态转换:194.1.2 ADC时序图:204.1.3 ADC转换主程序204.1.3 程序仿真图:224.1.4 仿真图说明:234.2 控制转换模块的设计234.2.1 转换控制原理:234.2.2 转换主程序244.2.3 程序仿真图254.2.4 程序仿真图分析:264.3 显示原理及程序仿真264.3.1. 显示原理:264.3.2. 显示主程序:264.5 本章小结26第五章 系统调试与结果分析285.1 硬件调试285.1.1 MAX+PLUSII 10.0软件介绍285.2 仿真分析及程序优化285.2.1 功能仿真与时序仿真285.2.2 程序优化295.3 结果测评29第六章 总结与展望326.1 总结326.1.1 毕设问题:326.1.2 课题总结:326.2工作展望33参考文献35致谢37第一章 绪论1.1 设计背景和意义1.1.1 FPGA的发展FPGA是操控层次更低、自由度更大的芯片,对FPGA的编程在编译后是转化为FPGA内的连线表,相当于FPGA内提供了大量的与非门、或非门、触发器(可以用与非门形成吧)等基本数字器件,编程决定了有多少器件被使用以及它们之间的连接。只要FPGA规模够大,这些数字器件理论上能形成一切数字系统,包括单片机甚至CPU。FPGA在抗干扰,速度上有很大优势。目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。 系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。 FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。早在1980年代中期,FPGA已经在PLD设备中扎根。CPLD和FPGA包括了一些相对大数量的可以编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。一个因此有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。FPGA采用了逻辑单元阵列LCA这样一个概念,内部包括可配置逻辑模块CLB、输出输入模块IOB和内部连线三个部分。其特点如下:(1) 采用FPGA设计ASIC电路(特定用途集成电路),用户不需要投片生产,就能得到合用的芯片;(2) FPGA可做其它全定制或半定制ASIC电路的中试样片;(3) FPGA内部有丰富的触发器和IO引脚;(4) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容;(5) FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一;可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。应用EDA (电子设计自动化)技术及FPGA (现场可编程门阵列), 其集成度高、速度快、性能十分可靠,用户可自由编程且编程语言通俗易懂、系统功能扩展非常方便 。采用FPGA芯片控制通用A /D 转换器可使速度、灵活性大大优于由微处理器和通用A /D 转换器构成的数字电压表本文将在后面章节详细介绍基于FPGA的数字电压表的原理、制作流程和所涉及到的软硬件设计。1.1.2 FPGA芯片的介绍:FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件。与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了即可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及个模块之间或模块与I/O间的连接方式,并最终决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能, FPGA允许无限次的编程。FPGA的广泛运用在于它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计。目前,许多公司都开发出了FPGA可编程逻辑器件,比较典型的就是Altera、Lattice、Xilinx世界三大权威公司的产品。1.2 EDA设计概述:1.2.1 VHDL语言介绍VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Language,诞生于 1982 年。1987 年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。 其基本特点:(1) VHDL 语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路;(2) VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;(3) VHDL 语言很强的移植能力主要体现在:对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行;(4) 采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件;(5) 设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。1.2.2 时序电路设计1. FPGA开发流程FPGA的设计流程就是利用EDA开发工具对FPGA芯片进行开发的过程。FPGA开发流程一般分为以下几个阶段:电路功能设计、设计输入、功能仿真、硬件验证。这是一种自顶向下的层次化设计方法,并且是面向硬件的设计思维,具体指的是如何将具体功能形成硬件的RTL级模型,然后用合适的硬件电路去实现,而不是凭空写代码。由于这种面向硬件的电路设计必然需要考虑硬件时钟问题,在硬件电路时钟实现方式上有两种:一种是同步设计方式,另一种是异步设计方式。下面将具体介绍这两种方式。2. 同步设计法和异步设计法FPGA开发过程中电路的时序问题是一个重要的问题,它贯穿整个系统。因此,时序的选择相当重要。一般有两种电路设计思路:同步电路设计、异步电路设计。同步电路设计:同步电路设计是一种工程上应用较多的设计思路,总的来说就是整个系统从始至终只用一个时钟,时序电路只有唯一的时钟,并且在电路中只能用到时钟上升沿或者时钟下降沿。同步设计对于中小规模集成电路设计来说是很有必要的,它的优点主要有如下三个方面:1. 可以简化程序分析过程。程序分析对系统的速度影响很大,而时序电路可有效的缓解这一问题。2. 可减少工作环境对设计的影响。异步电路受工作温度、电压等影响,器件延时变化较大。同步电路只要求时钟和数据沿相对稳定,时序要求较为宽松,因此环境依赖性小。3可以有效避免毛刺影响,提高设计可靠性。毛刺对数字电路有很大的影响,只要有逻辑电路就会有毛刺的产生,是永远存在的。同步设计是避免毛刺影响最简单最有效的方法。异步电路设计与同步电路设计在电路特性上有很大的差异,是一种还没被广泛接受与应用的设计方法。简单来说异步电路就是在一个系统中有多个时钟源,对时钟电路进行控制。异步电路设计对工作环境的要求很高,受电路工作温度、电压等影响,器件延时变化较大。异步电路会产生毛刺,对频率较高的时钟电路会产生致命的影响。因此,异步电路设计需要对时钟信号进行严格处理、控制,较同步电路来说比较复杂,但异步电路功耗比同步电路相比较低。1.3 数字电压表的研究现状传统的数字电压表设计通常以大规模ASIC(专用集成电路)为核心器件,并辅以少量中规模集成电路及显示器件构成。ASIC 完成从模拟量的输入到数字量的输出,是数字电压表的心脏。这种电压表的设计简单、精确度高,但是这种设计方法由于采用了ASIC器件使得它欠缺灵活性,其系统功能固定,难以更新扩展。后来发展起来的用微处理器(单片机) 控制通用A /D转换器件的数字电压表的设计的灵活性明显提高,系统功能的扩展变得简单, 但是由于微处理器的引脚数量有限,其控制转换速度和灵活性还是不能满足日益发展的电子工业的需求,而采用FPGA芯片控制通用A /D 转换器可使速度、灵活性大大优于由微处理器和通用A /D 转换器构成的数字电压表。数字电压表的实现方式有多种,下面将重点介绍基于单片机的数字电压表实现方式和基于FPGA的数字电压表实现方式。1.3.1 基于单片机的数字电压表实现方式基于单片机的数字电压表实现方式比较简单,总的来说就是以单片机为核心控制模块,控制LED显示模块,控制A/D模数转换模块。具体实现过程如下:首先,由A/D模数转换模块将模拟信号采集,并将其转换为8位的二进制码输出。再由单片机对其进行简单的处理后输入到LED显示模块。一般来说整个系统可分为三个主要模块:单片机控制模块,A/D模数转换和输出显示模块。基于单片机的数字电压表实现方式是目前应用最广的一种方式。它性能稳定,制作简单。和其它实现方式相比较,使用单片机控制的优点主要有如下几个方面:(1)单片机主芯片成本较低;(2)采用单片机实现较为简单;(3)整体硬件结构比较简单;(4)实现程序比较简单。1.3.2 基于FPGA的数字电压表实现方式 基于FPGA的数字电压表,通过ADC0809模数转换芯片将模拟信号采集并将模拟信号转换为8位的二进制码。并将其输入到FPGA控制芯片,通过对其进行VHDL的转换程序的编写,将8位的二进制码转换为12位的BCD码输出。12位的BCD码分为3段,分别为高四位、中四位、低四位,分别对应为电压的个位、十分位、百分位,并通过按键可以使其进入到保持状态。1.4 论文章节介绍本文主要介绍基于FPGA的数字电压表。全文分六个章节,第一章绪论部分主要介绍数字电压表的背景知识及研究现状。第二章主要介绍本次设计所选择实现方式及一些背景知识。第三章从硬件方面介绍了数字电压表的硬件架构,第四章从软件方面介绍数字电压表的软件实现。第五章则介绍软硬件调试、分析等后期工作。最后一章是本次设计的总结和展望。第二章 基于FPGA的数字电压表设计2.1 基于FPGA的数字电压表2.1.1 基于FPGA的数字电压表实现方式数字电压表的实现方案有多种,如前面所说的基于单片机的数字电压表的设计,基于FPGA的数字电压表设计。本次设计采用基于FPGA的数字电压表的设计方式。尽管基于单片机的数字电压表从成本及控制上来说,都优于使用基于FPGA的实现方式。但是,采用单片机控制比较简单,研究价值远不如FPGA,FPGA在逻辑控制、频率较高的数字时序电路实现等方面是单片机无法比拟的,且FPGA集成度高、速度快、性能十分可靠、用户可自由编程且编程语言通俗易懂、系统功能扩展非常方便。因此本次设计采用FPGA的数字电压表。基于FPGA的数字电压表是以FPGA芯片为核心,通过FPGA对ADC转换芯片进行采集处理,并控制LED数码管,以显示当前的实时电压,并可以通过改变电位器当前的电阻值来改变实时电压。最后在LED数码管上显示出来。2.1.2 各方案的比较:方案一:采用3位半数字电压表。 采用此方案电路结构简单,易于实现且易于维护。它的核心器件是一个双积分式A/D转换,双积分式DVM属于VT变换式,其基本原理是在一个测量周期内,首先将被测电压UX加到积分器的输入端,在确定的时间内进行积分,也称定时积分;然后切断UX,在积分器的输入端加与UX极性相反的电压UR,由于UR一定,所以称为定值积分,但积分方向相反,直到积分输出达到起始电平为止,从而将UX转换成时间间隔进行测量。只要用计数器累计时间间隔内的脉冲数,即为UX之值。其原理方框图如图2.1.1所示。图2-1 3位半电压表原理图方案二:采用单片机为控制核心。目前单片机技术比较成熟,功能也比较强大,配合一定的外围电路可实现数字电压表,原理图如图2.1.2所示。输入信号经AD转换器转换后送到单片机进行数据处理,系统根据不同电压信号计算出不同的数值,并将其显示出来。采用这种方案优点是呆以依赖地成熟的单片机技术、运算功能较强、软件编程灵活、自由度大、设计成本也较低,能较准确地测量输入电压。缺点是在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,因此整个系统显得十分复杂,不易于实现。图2-2 单片机控制的数字电压表原理图方案三:采用FPGA作为系统控制的核心。现场可编程门阵列(FPGA)将所有器件集成在一块芯片上,体积大大减小、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规模的集成电路,而且编程灵活、调试方便。综合上述分析,采用FPGA芯片控制通用A /D 转换器可使速度、灵活性大大优于由微处理器和通用A /D 转换器构成的数字电压表。本文下面两章将分别从硬件和软件角度来介绍基于FPGA的数字电压表的实现。第三章 数字电压表的硬件电路设计3.1硬件总体结构3.1.1 硬件框图:在确定了以FPGA作为数字电压表控制芯片的基础上,本章节将重点介绍基于FPGA的数字电压表的各个硬件模块。本次设计以FPGA芯片(EPF10K10LC8484-PIN PLCC)为核心控制器件,配合外围的LED显示模块,通过控制ADC0809模数转换显示出当前的电压值整个数字电压表硬件系统由FPGA核心控制模块、ADC0809模数转换模块、LED数码管显示模块、译码模块等组成,如图3-1所示。图3-1 数字电压表主要模块框图该系统工作流程如下:给FPGA芯片供电,FPGA芯片控制ADC0809将采集模拟信号进来,并将模拟信号转换为8位的二进制码,再将其转换为12位的BCD码并将该码送到3个数码管中显示出来当前的实时电压。下文将依次对本次设计的A/D转换模块、FPGA控制模块、LED数码管显示模块等几个重要的模块进行介绍。 3.1.2 硬件原理图:图3-2 硬件原理图3.2 转换模块的比较方案一:采用双积分型AD转换器。双积分型A/D转换器的原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值,积分时间常数较大,具有滤波作用,消除了干扰,故双积分A/D转换具有较强的抗干扰能力。缺点是由于积分过程是个缓慢的过程,转换速度慢。方案二:采用逐次比较型AD转换。这是目前应用十分广泛的集成ADC,逐次比较型AD转换内部电路由一个比较器、DA转换器、时钟、逐次比较寄存器SAR、输出寄存器和控制逻辑电路等部分组成。具有速度高、功耗低。输出位数多等特点,其原理图如下图所示。表3-3 逐次比较ADC原理图经比较,采用逐次比较的A/D转换器;3.3 A/D转换模块3.3.1 A/D转换模块功能阐述主要完成以下功能:(1)将外接的模拟信号采集进来;(2)并将模拟信号转换为8位的二进制码输出;3.3.2 模数转换芯片ADC0809介绍ADC0809数据采集器是一个单片CMOS器件内含一个8bit的模数转换器,8通道的多路复用器以及微控制兼容的控制逻辑,这种8bit 的A/D转换器采用逐次逼近作为转换技术。该转换器的功能是高阻抗的载波比较,256R的分压器具有模拟树状开关、逐次逼近的寄存器。8位的多路复用器能够直接访问任何8路单端模拟信号该器件无需外部零以及全面的外部调整,其地址锁存和解码复用器输入和锁存TTL三态输出使其轻松的连接微处理器。该ADC0808的设计,ADC0809进行了优化通过合并A/D转换技术的几个最合理的方面,ADC0808,ADC0809提供高速的、高精度的、最低温度依赖、优良的长期精度以及可重复性、最低功耗。这些特点是的该设备非常适合应用从工艺、机器控制到消费和汽车。其主要特性:(1)连接到所有的微处理器;(2)自动工作或者是5V的直流电或模拟跨度调整电压基准;(3)无需外部0或外部全面调整;(4)带有地址逻辑的8通道多路复用器;(5)输入电压信号的范围0V-5V;其主要技术指标:(1)分辨率 8位;(2)总调整误差 ±12 LSB and ±1 LSB;(3)信号电源 5Vcc;(4)功耗 15mw;(5)转换时间 100us; 表3-4 ADC0809其工作原理:它由逐次逼近寄存器、D/ A 转换器、比较器和缓冲寄存器等组成。当启动信号由高电平变为低电平时,逐次逼近寄存器清0 ,这时,D/ A 转换器输出电压Vo 也为0 ,当启动信号变为高电平时,转换开始,同时,逐次逼近寄存器进行计数。ADC0809 带有8 位转换器、8 位多路切换开关以及与微处理机兼容的控制逻辑的CMOS 组件。它的8 位A/ D 转换器转换方法为逐次逼近法。在A/ D 转换器的内部,含有一个高阻抗斩波稳定比较器,一个带有模拟开关树组的256R 分压器,以及一个逐次逼近的寄存器。8 路的模拟开关由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号转换原理如图所示: 图3-5 ADC0809工作框图IN0-IN7为ADC0809的模拟输入通道,ADDA、ADDB、ADDC为3位地址锁存信号,决定模拟信号从哪个模拟输入端口。其对应关系如下图: 图3-6 输入通道选择图 其输出端口为2-1至2-8,用来输出其8位的二进制码;3.3 FPGA主控制模块3.3.1 主控制模块功能阐述主要功能:(1)控制模数转换芯片ADC0809完成模数转换;(2)将ADC0809输出的8位二进制码转换为12位的BCD码;(3)控制12位BCD码得输出;(4)控制按键模块是信号得到保持;(5)控制3个LED数码管的显示; 3.3.2 主控制芯片的介绍本次设计采用的主控制芯片为ALTERA公司生产的EPF10K10LC8484-PIN PLCC,该主控制芯片具有84个管脚。该系列为ALTERA公司研制的第一个嵌入式的PLD可编程逻辑器件系列。它具有高密度、低成本、低功率等特点。利用FLEX10K系列的FPGA可编程逻辑器件的EAB可在系统中实现逻辑功能和存储功能,是当今应用前景最好的器件系列之一。它采用了可重复可狗仔的CMOS SRAM工艺,并把连续的快速通道互联与独特的嵌入式整列结构相结合,同时可结合众多可编程器件来完成普通的门阵列。FLEX10K中的嵌入式阵列由一系列的具有实现逻辑功能和存储功能的FAB组成。EBA是在输入输出口上带有寄存器的RAM块,利用它可以非常方便的实现一些规模不太大的ROM、RAM/双端口RAM和FIFO等功能。3.3.3 芯片顶层引脚图: 图3-6 EPF10K10-PC84 顶视引脚图 该模块负责控制ADC0809将模拟信号输入,并将8位的二进制码转换为12位的BCD码。并控制将12位的BCD码输出到3个数码管上。3.4 LED显示模块3.4.1 LED显示模块功能阐述:本模块由3个LED数码管组成,用来显示当前的电压值。3.4.2 LED发光二极管选择及原理图:本次设计中的LED数码管显示模块由24个发光二极管构成。发光二极管的种类有多种,按照其亮度来分可分为:普通发光二极管和高亮发光二极管。单色高亮发光二极管所使用的半导体材料和普通发光二极管所使用的材料不同,所发光的强度也不同。而高亮发光二极管发光强度要高于普通发光二极管。考虑到实验演示效果,故本次设计所选用的发光二极管为单色高亮发光二极管。图3-7 7段数码管驱动原理图3.4.3 译码器的选择: 由于设计最终演示时选择的是GW48实验箱,故选择静态显示,为了加强硬件适用性。故译码器选择的是16进制7段全译码器,它有7位输出,分别接7段数码管的7个显示输入端:a、b、c、d、e、f、g。图3-8 显示原理图 显示模块通过译码器将核心控制模块输出的BCD码转换为可供数码管识别的7段码;3.5 输入电源模块 图3-9 输入电源图图中S1为选择开关配合地址锁存信号控制模拟输入,而D1与D2两个二极管为电压保护装置(因为ADC0809的输入电压上限为5V),电阻R1为滑动变阻器控制ADC0809的输入电压。3.6配置下载模块: 图3-10 配置下载图 该模块为ALTERA公司为的EPF10K10LC8484-PIN PLCC的专用下载模块。 3.7本章小结本章主要介绍了数字电压表的硬件模块,重点介绍了ADC模数转换模块、FPGA控制模块、LED显示模块、配置下载模块、输入电源模块这五个模块。第四章 数字电压表的软件设计及仿真从本章节开始,将要详细介绍运用各种EDA工具进行基于FPGA的数字电压表设计具体过程。包括软件功能分析、软件仿真验证及系统分析优化。4.1 ADC0809转换模块4.1.1 ADC0809状态转换:本模块完成ADC0809 的初始化、A /D 转换的启动、地址锁存、通道选择、状态读取及数据读取、数据锁存等功能。此模块的软件设计主要采用VHDL 的多进程状态机完成。 工作时序如下: (1) 上电瞬间, FPGA 初始化, ADD 置成 1,状态机处于第0个状态;(2) 当ALE到达上升沿时,其余信号均为0,状态机由0状态转变到状态1;(3) 当ATART到达上升沿,其余信号均为0,状态机由1状态转变到状态2;(4) 此时START、ALE均为0,其余信号(除EOC)均为0,状态机由状态2转变为状态3,此时检测EOC是否为1。若是,怎保持状态3;若不是则转换到下一状态4;(5) 当状态机处于状态4时,检测EOC是否为0,若是,怎保持状态4;若不是则转换到下一状态5;(6) 当状态机到达状态5时,CEN即为1。表示可以将A/D输出的8位二进制码转换为12位的BCD码;(7) 当下个上升沿到来时转换到状态6,OE为高电平,表示允许输出信号;(8) 上升沿再次到来, 则状态机返回状态0。控制器在时钟信号控制下完成状态转换, 实现对ADC0809的控制。其状态转换图及转换主程序如下: 图4-1 状态转换图4.1.2 ADC时序图: 图中:(1)START 转换开始信号且高电平有效;(2)ALE 地址锁存信号且高电平有效;(3)EOC 转换结束信号且高电平有效;(4)OE 允许输出信号且高电平有效;(5)D7.0 8位输出信号; 图4-2 ADC0809工作时序图4.1.3 ADC转换主程序 STATESYSTEM: BLOCK IS BEGIN ADDA<='1' -状态转换控制进程 PRO: PROCESS(CURRENT_STATE,EOC) IS BEGIN CASE CURRENT_STATE IS WHEN ST0=>ALE0<='0' START0<='0' OE0<='0' -状态0 此时ale=0,start=0,oe=0,lock0=0。并转到下一个状态1LOCK0<='0' NEXT_STATE<=ST1; CEN<='0' WHEN ST1=>ALE0<='1' START0<='0' OE0<='0' LOCK0<='0' -状态1 此时ale=1,确定是那个通道输入模拟量。并转到下一个状态2 NEXT_STATE<=ST2; CEN<='0' WHEN ST2=>ALE0<='0' START0<='1' OE0<='0' LOCK0<='0' -状态2 此时start=1,开始转换。 并转到下一个状态3NEXT_STATE<=ST3; CEN<='0' WHEN ST3=>ALE0<='0' START0<='0' OE0<='0' -状态3 此时start=0,保持转换。LOCK0<='0' CEN<='0' IF EOC='1' THEN -测试EOC的下降沿,若是在提电平则是在转换可以转到下一状态4 NEXT_STATE<=ST3; ELSE NEXT_STATE<=ST4; END IF; WHEN ST4=>ALE0<='0' START0<='0' OE0<='0' LOCK0<='0' CEN<='0' IF EOC='0' THEN NEXT_STATE<=ST4; -测试EOC的上升沿,若eoc=1表明转换结束,状态转换到状态5 ELSE NEXT_STATE<=ST5; END IF; WHEN ST5=>ALE0<='0' START0<='0' OE0<='1' LOCK0<='0' -状态5 此时oe=1,此时转换结束的8位数据可以输出且cen=1转到状态6NEXT_STATE<=ST6; CEN<='1' WHEN ST6=>ALE0<='0' START0<='0' OE0<