基于vhdl的数字电压表设计大学学位论文.doc
沈阳理工大学学士学位论文摘 要VHDL(即超高速集成电路硬件描述语言)是随着可编程逻辑器件(PLD)的发展而发展起来的一种硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口,是电子设计自动化(EDA)的关键技术之一。它采用一种自上而下(top-down)的设计方法,即从系统总体要求出发,自上至下地逐步将设计内容细化,如划分为若干子模块,最后完成系统硬件的整体设计。它支持设计库和可重复使用的元件生成,支持阶层设计,提供模块设计的创建。VHDL设计技术对可编程专用集成电路(ASIC)的发展起着极为重要的作用。 本电压表的电路设计正是用VHDL语言完成的,完成电压数据的采集、转换、处理、显示。此次设计主要应用的软件是美国ALTERA公司自行设计的一种Quartus 。本次所设计的电压表的测量范围是05V,精度为0.02V。关键词:电子设计自动化;VHDL;A/D采集;数字电压表 AbstractVHDL (i.e., ultra high speed integrated circuit hardware description language) is with the development of programmable logic devices (PLD) and developed a kind of hardware description language, is mainly used to describe the structure of the digital system, behavior, function and interface of electronic design automation (EDA) is one of the key technologies. It uses a top-down design method, namely from the overall system requirements, from top to down gradually to refine design content, such as divided into sub modules, finally completed the overall design of the system hardware. It supports design library and reusable components to generate, support the class design, module design creation. VHDL design technology of programmable application-specific integrated circuit (ASIC) plays a very important role in the development. The circuit of the design that use VHDL language to complete ,the voltmeter can complete collection of voltage data,conversion,treatment and display.The this time design is primarily the applied software is Quartus . which is made by the United States ALTERA company.This systems range is -5v to +5v and precision is 0.02v.Keywords: Electronic Design Automation ;VHDL;A/D Acquisition digital voltage 目 录1 绪论11.1 课题背景和意义11.2 FPGA设计特点11.3 FPGA设计流程21.4 硬件描述语言VHDL31.4.1 VHDL的发展31.4.2 VHDL的特点41.5 VHDL语言的设计流程51.6 Quartus II开发平台简介51.6.1 Quartus 软件介绍51.6.2 Quartus 设计输入61.6.3 文本设计输入方式61.6.4 Quartus II设计仿真82 设计任务与要求123 设计方案134 各器件的选择154.1 A/D转换器ADC0809控制电路154.1.1 ADC0809的功能介绍154.1.2 ADC0809引脚介绍164.1.3 ADC0809芯片的控制方法及转换过程164.2 BCD码184.2.1 BCD码的介绍184.2.2 BCD码的运算194.3 译码,显示电路195 功能模块205.1 ADC0809(ad)205.2 Dataprocess235.3 Leddisplay275.4 顶层模块设计29结 论31致 谢32参考文献33附录A 英文原文34附录B 汉语翻译 45IV1 绪论1.1 课题背景和意义随着信息技术获得了突飞猛进的发展,信息技术渗透了我们生活的几乎全部领域,改变着人类的生存状态和思维模式。而我们的课题所涉及的电子设计自动化(EDA)技术就是在这种时代背景下产生的,并影响巨大1-3。FPGA是新型的可编程逻辑器件,与传统 ASIC 相比,具有设计开发周期短、设计制造成本低、开发工具先进 等优点,特别适合于产品的样品开发和小批量生产。传统的数字电压表多以单片机为控制核心,芯片集成度不高,系统连线复杂,难以小型化,尤其在产品需求发生变化时,不得不重新布版、调试,增加了投资风险和成本4。而采用 FPGA 进行产品开发,可以灵活地进行模块配置,大大缩短了开发周期,也有利于数字电压表向小型化、集成化的方向发展。 随着电子技术的发展,当前数字电子系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。推动该潮流发展的引擎就是日趋进步和完善的ASIC设计技术。目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能的要求,自上而下的完成相应的描述、综合、优化、仿真与验证,直接生成器件。上述设计过程除了系统行为和功能描述以外,其余所有的设计几乎都可以用计算机来自动完成,也就说做到了电子设计自动化(EDA)这样做可以大大的缩短系统的设计周期,以适应当今品种多、批量小的电子市场的需求5,6。伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,己经广泛应用于模拟与数子电路系统等许多领域。目前电子技术的发展主要体现在EDA领域,数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。电子设计自动化是近几年迅速发展起来的将计算机软件、硬件、微电子技术交叉运用的现代电子设计学科7,11。其中EDA设计语言中的VHDL语言是一种快速的电路设计工具,功能涵盖了电路描述、电路合成、电路仿真等三大电路设计工作。本电压表的电路设计正是用VHDL语言完成的。此次设计主要应用的软件是美国ALTERA公司自行设计的Quartus II8。1.2 FPGA设计特点 FPGA设计的特点如下:(1)硬件设计软件化这是FPGA开发的最大优势。传统硬件电路设计先要进行功能设计,然后进行电路板级设计并做称电路板后进行调试,如果电路中有什么错误,整个电路板都将作废,这是很不经济的。FPGA的开发在功能层面上可以完全脱离硬件而在EDA软件上做软仿真。当功能确定无误后可以进行硬件电路板的设计。最后将设计好的,由EDA软件生成的烧写文件下载到配置设备中去,进行在线调试,如果这时的结果与要求不一致,可以立即更改设计软件,并再次烧写到配置芯片中而不必改动外接硬件电路。(2)高度集成化,高工作频率一般的FPGA内部都集成有上百万的逻辑门,可以在其内部规划出多个与传统小规模集成器件功能相当的模块。这样将多个传统器件集成在同一芯片内部的方法不但可以改进电路板的规模,还可以减少PCB布线的工作。由于各个模块都是集成在FPGA芯片内部,这就很大程度地解决了信号的干扰问题,使得FPGA的工作频率可以大幅度的提高。另外,一般的FPGA内部都有PLL倍频的时钟,这进一步解决了电磁干扰和电磁兼容问题9,10。(3)支持多种接口 FPGA芯片可支持多种标准的接口电平,可通过EDA开发工具来选定采用什么样的接口标准,包括常用的TTL和差分输入等。这便于后端各种不同接口电路的匹配。1.3 FPGA设计流程 可编程逻辑器件的设计是利用EDA开发软件和编程土具对器件开发的过程。它包括设计准备、设计输入、功能仿真、设计处理、时序仿真和器件编程及测试等六个步骤。(1)设计准备 在系统设计之前,首先要进行方案论证、系统设计和器件选择等准备工作。一般采用自上而下的设计方法,也可采用传统的自下而上的设计方法。(2)设计输入设计输入将所设计的系统或电路以开发软件要求的某种形式表示出来,并送入计算机的过程称为设计输入。设计输入通常有以下集中形式: 1)原理图输入方式 2)硬件描述语言输入方式 3)波形输入方式(3)功能仿真功能仿真也叫做前仿真。用户所设计的电路必须在编译之前进行逻辑功能验证,此时的仿真没有延时信息,对于初步的功能检测非常方便。仿真中如发现错误,则返回设计输入中修改逻辑设计。(4)设计处理设计处理是器件设计中的核心环节。在设计处理过程中,编译软件将对设计输入文件进行逻辑化简、综合优化和适配,最后产生编程用的编程文件。主要有: 1) 语法检查和设计规则检查2)逻辑优化和综合3)适配和分割4)布局和布线(5)时序仿真时序仿真又称后仿真或延时仿真。由于不同器件的内部延时不一样,不同的布局布线方案也给延时造成不同的影响,因此在设计处理以后,对系统和各模块进行时序仿真,分析其时序关系,估计设计的性能,以及检查和消除竟争冒险等是非常有必要的。(6)器件编程测试时序仿真完成后,软件就可产生供器件编程使用的数据文件。1.4 硬件描述语言VHDL1.4.1 VHDL的发展VHDL的英文全名是VHSIC(Very High Speed Integrated Circuit)Hardware Description Language。VHDL是20世纪80年代中期,由美国国防部资助的VHSIC项目开发的产品。VHDL于1987年由国际标准化组织IEEE(IEEE STD 1076_1987)所确认。1993年,IEEE 1076标准被升级、更新,新的VHDL标准为IEEE STD 1076_1993。1996年,IEEE 1076.3 成为VHDL综合标准。VHDL的语法丰富、数据类型繁多,是描述能力很强的的一种硬件描述语言,能在高层次上以系统的行为进行描述和仿真。VHDL非常适用于可编程逻辑器件的应用设计,并正在得以普及。目前,几乎所有的EDA厂商出品的EDA软件都兼容这种标准。硬件描述语言(hardware description language,HDL)是电子系统硬件行为描述,结构描述,数据流描述的语言.目前,利用硬件描述语言可以进行数字电子系统的设计.随着研究的深入,利用硬件描述语言进行模拟电子系统设计或混合电子系统设计也正在探索中。国外硬件描述语言种类很多,有的从Pascal发展而来,也有一些从C语言发展而来.有些HDL成为IEEE标准,但大部分是企业标准.VHDL来源于美国军方,其他的硬件描述语言则多来源于民间公司.可谓百家争鸣,百花齐放.这些不同的语言传播到国内,同样也引起了不同的影响.在我国比较有影响的有两种硬件描述语言:VHDL语言和Verilog HDL语言.这两种语言已成为IEEE标准语言12,15。1.4.2 VHDL的特点VHDL描述能力非常强。它比其他的HDL有更高层次的描述。甚至在有时描述过程中中有算法的描述,而无硬件的痕迹。因此,VHDL 在CPLD/FPGA 的应用方面较为广泛;VHDL可以用比较少的篇幅将一个复杂的问题描述得很清楚。同时,VHDL指令代码多,数据类型丰富,既有可以用于仿真系统的指令,又有可用于综合的语句。因此VHDL使用起来非常灵活。可以说,在几种硬件描述语言中,VHDL是描述能力最强的一种语言。与其他硬件描述语言相比,VHDL具有以下特点:1) 功能强大:灵活性高:VHDL具有功能强大的语言结构,可以用简洁明确的源代码来进行复杂控制逻辑的设计。同时VHDL 还支持层次化的设计,支持系统元件库和用户设计的元件库。目前,VHDL已成为一种设计、仿真、综合的标准硬件描述语言。2) 器件无关性:VHDL允许使用者在进行设计时,不需要首先选择一个具体的器件。对于同一个设计描述,可以采用多种不同的器件结构来实现其功能。因此,在设计描述阶段,设计者可以集中精力于从事设计构思和优化。当设计、仿真通过后,在指定具体的器件综合、适配即可。3) 可移植性:VHDL是一种标准语言,故采用VHDL进行的设计可以被不同的EDA工具所支持。可以从一个仿真工具移植到另一个仿真工具,可以从一个综合工具移植到另一综合工具,也可以从一个工作平台移植到另一个工作平台。在一个EDA工具中采用的技术技巧在其他工具中同样可以采用。4) 自顶向下的设计方法:自顶向下的设计方法是将要设计的电路进行最顶层的描述,然后利用EDA软件进行顶层仿真,如果顶层设计的仿真以满足要求,则可以继续将顶层划分的模块进行低一级的划分并仿真,这样一级一级的设计最终将完成整个电路的设计。5) 数据类型丰富:作为硬件描述语言的一种,VHDL数据类型丰富。除了VHDL自身预定的10中数据类型外在VHDL程序设计中还可以由用户自定义数据类型。特别是std_logic数据类型的使用,使得VHDL能最真实地模拟电路中的复杂信号。6) 建模方便:由于VHDL中可综合的语句和用于仿真的语句齐备,行为描述能力强,因此VHDL特别适合信号建模。目前支持VHDL的综合器能对复杂的算数描述进行综合(如Quartus 2.0以上的版本都能对std_logic_vector类型的数据进行加、减、乘、除),因此对于复杂电路的建模,VHDL无论仿真还是综合都是非常合适的描述语言。7) 运行库和程序包丰富:目前支持VHDL的程序包很丰富,大多以库的形式存放在特定的目录下,用户可随时调用。在CPLD/FPGA综合时,还可以使用EDA软件商提供的各种库和程序包。而且用户利用VHDL编写的各种成果都可以以库的形式存放,在后续的设计中可以继续使用13,14。1.5 VHDL语言的设计流程采用VHDL语言设计硬件电路系统的设计流程一般可以分为以下几个步骤。硬件电路系统设计要求的定义。编写描述硬件电路系统功能的VHDL语言程序。VHDL语言程序的模拟。VHDL语言的综合、优化和布局布线。布局布线后的设计模拟。器件的编程。设计人员在从事硬件电路系统的合计过程中,编写VHDL语言程序之前必须对硬件电路系统的设计目的和设计要求有一个非常明确的认识才行17。1.6 Quartus II开发平台简介 1.6.1 Quartus 软件介绍 Quartus II是Altera提供的FPGA/CPLD开发集成环境,Altera是世界最大可编程逻辑器件供应商之一。Quartus II在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plus II的更新换代产品,其界面友好,使用便捷。在Quartus II上可以完成设计输入、HDL综合、布线布局(适配)、仿真和下载和硬件测试等流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。1.6.2 Quartus 设计输入Quartus II的设计过程主要由设计输入、设计编译、设计仿真和器件编程4部分组成。Quartus II软件的基本设计流程如图1.1所示。原理图设计输入新项目建立建立设计文件文本设计输入分析&综合布局布线时序分析修改错误编程下载仿真全程编译设计成功有错有错无错有错无错图1.1 Quartus 软件的基本设计流程 Quartus 软件的设计输入方式分多钟,主要包括文本输入方式、原理图设计输入方式、波形设计输入方式、EDIF输入文件方式、图形设计输入方式和轰功能模块输入方式等。设计人员可以根据自己的实际情况灵活选择使用16。1.6.3 文本设计输入方式Quartus 软件支持VHDL、VeriogHDL和AHDL等硬件描述语言。下面将介绍Quartus 8.1开发软件的文本设计输入的使用方法。1) 建立设计项目无论哪一种输入方式,首先必须建立一个项目。所建立的项目名称要保证和设计名称一致,以便于Quartus 软件的编译。打开 Quartus II,在File 菜单中选择New Project Wizard 项,将出现工程项目建立向导对话框,点击Next,然后会出现如图1.2所示的新建项目向导对话框,此次对话框用于登记项目所在文件夹、设计项目名称和项目顶层文件实体名。设计项目名称和顶层文件实体名可以相同,在多层次系统设计中,一般与设计项目同名的设计实体作为顶层文件。本例以shili为例。图1.2 建立新项目向导对话框 然后单机Finish按钮,完成设计项目的建立。2) 输入文本文件输入文本文件的操作步骤如下:选择菜单命令下的“FileNew”,弹出如图1.3所示的新建文件对话框。选中VHDL File,单击OK按钮,弹出一个无名称的文本编辑窗口,可以在此文本编辑窗口中输入VHDL文件。 图1.3 新建文佳对话框 输入完成后,选择菜单命令:“FileSave Project”,保存整个设计项目;或者选择菜单命令:“FileSave”,保存当前设计文件。注意保存文件名要和实体名一致。1.6.4 Quartus II设计仿真1) 创建波形文件 选择菜单命令“FileNewVector Waveform File”,如图1.4所示,然后单击OK按钮,就会出现一个无标题的波形编辑窗口,如图1.5所示。 图1.4 建立仿真波形文件对话框图1.5 新建仿真波形编辑窗口2) 创建输入输出向量创建输入输出向量操作步骤如下:依次选择菜单命令“EditInsertInsert Node or Bus”,或者在向量编辑窗口空白位置处(黑粗矩形框内空白位置)单击鼠标右键,在右键下拉菜单中选择“InsertInsert Node or Bus”,如图1.6所示。 图1.6 仿真波形编辑窗口Insert Node or Bus对话框中提供了被添加Node或Bus的名称、类型、数值类型、数制类型和总线宽度等属性。如图1.7所示 图1.7 添加Node或Bus 对话框在图1.7中单击”Node Found”按钮,就会弹出Node Found对话框,如图1.8所示。在“Filter”栏中选择“Pins:all”,单击“List”按钮,可以发现“Node Found”中列出了shili.vhd文件中所有的输入输出向量。可以通过“”、“>>”、“”及“<<”4个按钮将Node添加到“Selected Nodes”栏中或者从“Selectede Nodes”栏中删除,“”和“”按钮只能对单个操作有效,“>>”和“<<”按钮对所有Nodes有效。添加完成后,点击“OK”按钮,在设置输入完成后,就可以仿真波形了。图1.8 仿真波形编辑窗口2 设计任务与要求 要求利用FPGA控制模块数转换器对外部输入的模拟信号进行采样,获取当前电压值,并在数码管上显示。 传统的数字电压表设计通常以大规模ASIC(专用集成电路)为核心器件,辅以少量中规模集成电路及显示器件构成。ASIC完成从模拟量的输入到数字量的输出,是数字电压表的心脏,这种电压表的设计简单、精确度高,但是这种设计方法由于采用了ASIC器件使得的它欠缺灵活性,其系统功能固定,难以更新扩展。后来发展起来的微处理器(单片机)控制通用A/D转换器件的数字电压表的设计的灵活性有所提高,系统功能的扩展性变得简单,但是由于微处理机的引脚数量有限,其控制转换速度和灵活性还是不能满足日益发展的电子工业的需求。而应以EDA技术及FPGA,其集成度高、速度快、性能十分可靠、用户可自由编程且编程语言通俗易懂、系统工程扩展非常方便。采用FPGA芯片控制通用A/D转换器可是速度、灵活性大大优于微处理器和通用A/D转换器构成的数字电压表。1 能够实现一个通道的采样控制;2 产生ADC0809工作所需的各种控制信号;3 计算转换后的数字电压信号,并以BCD码方式表示。3 设计方案方案一:利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED进行数码显示,把读取的8位二进制数据转换成便利于输出3位十进制BCD码送给数码管。采用FPGA时钟信号start A/D转换器A/D转换控制模块数据转换 模 块译码模块aleaddoeeoc数据输入芯片作为系统的核心器件,负责ADC0809的A/D转换的启动、地址锁存、输入通道的选择、数据的读取。同时,把读取的8位二进制数据转换成便于输出3位十进制的BCD码送给数码管,以显示当前测量电压值。这些工作由ADC0809转换控制模块、数据转换模块、译码模块完成。 图3.1 数字电压表系统模块方案二:基于VHDL语言的系统设计是采用自顶向下的设计方法,将系统划分为多个功能模块,然后再逐个实现各个模块的功能,最终把他们组合在一起,形成一个大的系统。本系统共分为6个模块,分别为时钟分频(div_f)、数据采集控制(cs_control)、数据串转并(chuan2bing)、显示数值计算(data_calculate)、数码管扫描(led_select)、显示译码(led_translate)。在设计中,主要采用分模块的方式,先实现各个模块,然后组成整个系统。主要分为如下几个模块:时钟分频(div_f)、数据采集控制(cs_control)、数据串转并(chuan2bing)、显示数值计算(data_calculate)、数码管扫描(led_select)、显示译码(led_translate)。其中时钟分频主要用计数器实现,采样数据暂存于一寄存器。利用TLC549就可以采集外部模拟电压的大小并转换成数字信号,通过串行输入到控制器,经过控制器对数据处理如计算成实际电压、保留三位小数,再经过控制器设计的数码管控制模块控制四个数码管显示处理过后的数据,就实现了将外部电压值显示在数码管的功能,这样就实现了数字电压表的显示。 这里我们采用方案一。4 各器件的选择4.1 A/D转换器ADC0809控制电路4.1.1 ADC0809的功能介绍利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED进行数码显示,把读取的8位二进制数据转换成便于输出3位十进制BCD码送给数码管。由FPGA设计的ASIC芯片:一方面产生ADC0809的控制信号,控制ADC0809实现05v的模拟电压到8位数字量DB0DB7的变换;另一方面将读入的数字量转化成电压工程值,并转换为3位BCD码的七段数字显示字符码送到LED数码管进行显示。FPGA构成的ASIC芯片中包括三部分电路:(1) 用有限状态机设计的A/D转换控制电路;(2) 将8位数字量DB0DB7转换为3位BCD码的电压值的转换电路;EOC=1st0st1st2st3st40/00000/1100EOC=0EOC/ALE/START/OE/LOCK0/0000(3) 3位LED显示器的译码显示电路0/0011图4.1 ADC0809控制器的状态转换图 图4.2 ADC0809的引脚图 4.1.2 ADC0809引脚介绍 ADC0809芯片有28条引脚,采用双列直插式封装,下面说明各引脚功能。 IN0IN7:8路模拟量输入端。D0D7:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。ALE:地址锁存允许信号,输入,高电平有效。 START:AD转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 EOC: AD转换结束信号,输出,当AD转换结束时,此端输出一个高电平(转换期间一直为电平)。 OE:数据输出允许信号,输入,高电平有效。当AD转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一5V。 GND:地。4.1.3 ADC0809芯片的控制方法及转换过程控制ADC0809动作的信号有:ALE,START,OE,EOC。首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。 转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。(1)定时传送方式 对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128s,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。 (2)查询方式 A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。 (3) 中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受18。ADC0809的动作大致分为5个步骤区间:S0,S1,S2,S3,S4。每个步骤区间的动作方式如下:步骤S0:对ADC0809进行复位操作;步骤S1:由FPGA发出信号要求ADC0809进行A/D转换;步骤S2:转换后,转换完毕后的EOC将高电位降到低电位,而转换时间>100us;步骤S3:转换结束,有FPGA发出读命令;步骤S4:有FPGA读取DB0DB7上的数字转换资料,并锁存数据。4.2 BCD码4.2.1 BCD码的介绍8位数字量BD0BD7如何变成3位BCD码?用FPGA实现乘除法是很耗资源的,因而,下面采用查表方法求取BD0BD7与模拟输入电压05v的对应关系。编一个查表程序,对上述电压进行BCD编码,然后根据对应的4位BCD码相加的结果决定是否进位,从而得到待处理数据的BCD码。例如:从AD0809上取得的数据位“11011110”,“1101”对应的电压值位4.16v,其对应的BCD编码为“010000010110”,“1110”对应的电压值为0.28v,其对应的BCD编码为“000000101000”。低4位相加为“1110”,大于9,加6将其调整为BCD码,其值为0100,并且向前有一进位。四位相加的结果为0011,由于低位有进位,因此最终结果为0100,。高四位的结果为0100.三位合计值为4.44v,与4.16+0.28的结果一样。表中将8位数字量分为高4位HB和低4位LB,这样每个4位码的编程都是从00001111的16组码,由于5V被8位二进制码最大值除得到的结果是0.02v,即数字量每增大1对应模拟电压增大0.02v。 表4.1 模拟输入电压与输出电压的对应关系16进制2进制高4位电压低4位电压0 0000 0.00 0.001 0001 0.32 0.022 0010 0.64 0.04 3 0011 0.96 0.064 0100 1.28 0.085 0101 1.60 0.106 0110 1.92 0.127 0111 2.24 0.148 1000 2.56 0.16 9 1001 2.88 0.18A 1010 3.20 0.20B 1011 3.52 0.22C 1100 3.84 0.24D 1101 4.16 0.26E 1110 4.48 0.28F 1111 4.80 0.30 4.2.2 BCD码的运算 由于编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交计算机去运算,由于计算机总是把数当作二进制数来运算,所以结果可能会出错。 解决的办法是对二进制加法运算的结果采用"加6修正,这种修正称为BCD调整。即将二进制加法运算的结果修正为BCD码加法运算的结果,两个两位BCD数相加时,对二进制加法运算结果采用修正规则进行修正。修正规则: (1)如果任何两个对应位BCD数相加的结果向高一位无进位,若得到的结果小于或等于9,则该不需修正;若得到的结果大于9且小于16时,该位进行加6修正。 (2)如果任何两个对应位BCD数相加的结果向高一位有进位时(即结果大于或等于16),该位进行加6修正. (3)低位修正结果使高位大于9时,高位进行加6修正 从表中得到的模拟电压值必须用BCD码表示才能便于用LED数码管显示。例如,ADC0809的DB0DB7是89H(10001001B),高4位HB是1000,低4位LB是1001,表中查询到高四位1000对应的2.56v,写成BCD码是0010,0101,0110;低四位1001对应的是0.18v,写成BCD码是0000,0001,1000.其和是2.74v,求的BCD码的运算如下: HB 0010 0101 0110 LB 0000 0001 1000 +进位 1 0110 结果 0010 0111 01004.3 译码,显示电路 对多位数字显示采用扫描式显示可以节电,这一点在某些场合很重要。对于某些系统输出的的数据,应用扫描式译码显示,可使电路大为简化。有些系统,比如计算机,某些A/D转换器,是以这样的形式输出数据的:由选通信号控制多路开关,先后送出(由高位到低位或由低位到高位)一位十进制的BCD码选通信号可用节拍发生器产生。(1)译码、显示电路可以采用动态扫描显示和静态显示两种方法。这里采用动态显示。(2)动态显示的字位更新采用一个计数器频率约为125Hz的信号轮流接通各位数码管的位线,并对显示字符进行扫描,应保证显示不闪烁。5 功能模块5.1 ADC0809(ad)功能:利用ADC0809作为电压采样端口,进行A/D转换。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ad isport(clk:in std_logic; eoc:in std_logic; datain:in std_logic_vector(7 downto 0); dataout:out std_logic_vector(7 downto 0); oe:out std_logic; ale:out std_logic; start:out std_logic; add:out std_logic_vector(2 downto 0);end ad;architecture one of ad istype states is(st0,st1,st2,st3,st4); signal current_state,next_state:states:=st0;signal temp:std_logic_vector(7 downto 0);signal lock:std_logic;begin add<="001" dataout<=temp