搜索
您的当前位置:首页正文

基于FPGA通用数据采集测试系统的设计说明

来源:意榕旅游网
. . . .

1 绪论

1.1 课题的研究背景与意义

随着科学技术的迅猛发展,新技术革命将把人类由工业化社会推进到信息化社 储为主要容的数据采集测试技术,已形成了一门专门的技术科学。

数据采集系统是计算机、智能仪器与外界物理世界联系的桥梁,是获取信息的重要途径。数据采集技术是信息科学的重要分支,它不仅应用在智能仪器中,而且在现代工业生产、国防军事与科学研究等方面都得到广泛应用,无论是过程控制、状态监测,还是故障诊断、质量检测,都离不开数据采集系统[1]。

数据采集的任务,具体地说,就是采集传感器输出的模拟信号并转换为计算机能识别的数字信号,然后送入计算机或相应的信号处理系统,根据不同需要进行相应的计算和处理,得出所需要的数据。与此同时,将计算机得到的数据进行显示或打印,以便实现对某些物理量的监视,其中的一部分数据还将被控制生产过程中的计算机控制系统用来控制某些物理量。

存储测试系统是一种数据采集系统(DAS),包括数据采集记录硬件和计算机数据分析处理软件;一般情况下,将信息量化采集后先存入系统中的数据存储器,等任务执行完后再进行事后的数据读取和分析;数据采集记录硬件部分在工作完成后进行回收,以便进行数据回读[2]。

一个大型的数据采集系统由以下几个部分组成:数据采集、数据传输、数据存储、数据处理、分析和显示等。数据采集技术的发展离不开传感器和计算机控制技术。网络化测量、采集和控制是其发展的必然趋势。数据采集几乎无孔不入,它已渗透到了地质、医药器械、雷达、通讯、遥感遥测等各个领域,为我们更好的获取信息提供了良好的基础。

目前,数据采集测试技术已经在许多重大武器型号的研究、研制、生产、验收和使用中得到成功应用,并取得了一系列重要科研成果。在航空、航天、机械、电子等多个领域,解决了过去无法解决的重大测试难题,显示出了突出的优越性。 1.2 课题的研究现状与发展前景

近几年,Internet网络飞速发展,各式各样的网概念个技术不断涌现,如电子商务(B2B、B2C等)、对等网络(P2P)、Net、移动电子商务、无所不在的电子

1 / 45

. . . .

计算等等,他们改变着人们的生活和工作,同时也深刻的影响着工业领域的各种采集、控制、监控系统的结构和功能。数据采集系统(Date Acquisition System,简称DAS)目前在工业领域应用非常广泛,在工业领域存在大量远程数据采集系统,这些系统支持着工业领域,如电力、军事、通信等各种生产的正常运行。具体应用如水、电、煤气调度SCADA系统,电力变电站综合自动化系统等。在这些数据采集系统中访问装置数据源是必须的功能,数据采集系统是工业控制和监控系统的核心和基础。

数据采集技术是存储测试技术的一个重要组成部分,是以传感器、信号测量与处理、计算机等技术为基础而形成的一门综合应用技术。它研究信息数据的采集、存储、处理与控制等作业,具有很强的使用性。目前,数据采集技术已广泛应用于工业控制系统、数据采集系统、测自动试系统、智能仪器仪表、遥感遥测、通讯设备、机器人、高档家电等方面。可以预见,随着大规模集成电路技术与计算机技术的发展,数据采集技术将在雷达、通信、水声、遥感、地质勘探、无损监测、语音处理、智能仪器、工业自动控制以与生物医学工程众多领域发挥更大的作用。特别是计算机的发展,网络化可以更好地协调工作,增强系统的可靠性,势必推动数据采集在更加广阔的领域应用[3]。 1.3 课题的提出与要求

现在,以PC作为平台发展的数据采集系统已成为当前数据采集技术的重要发展方向。国外很多公司与厂商都投入巨资进行数据采集系统的研制开发与生产销售,其中比较著名的有NEFF、IOTECH、NI、HP、TEK、ZONIC和VMIC等。他们不断推出各种性能优异、种类齐全的产品。现在应用比较广泛的有这么几类采集系统,ISA数据采集系统、PCI数据采集系统、SCXI数据采集系统、便携式数据采集系统以与USB数据采集系统。

目前,虽然市场上有很多不同类型的数据采集产品,但这类产品还存在诸如功能单一、通用性差、操作复杂,并且对测试环境要求较高等问题,这些都限制了其具体应用的围,这也迫使我们必须从实际出发,设计一套高速的、较为通用的系统,本课题正是基于这一背景下提出来的。

本课题的主要目的就是,设计一个数据采集测试系统,对被测参数进行实时数据采集、存储。该系统完成以下几种信号的采集:

2 / 45

. . . .

1.六十四路模拟信号,电压围0~5V 2.八路无源开关量信号。

3.一路数字脉冲信号,信号形式为TTL电平信号或低电平0V、高电平12V的脉冲信号。

1.4 整体设计方案

根据被测参数要求,提出系统整体设计方案,其系统框图如图1. 1所示。

中 心 控 制 模 块 模拟量采集模块 存储器 数字量采集模块 接口电路 开关量采集模块 PC机

图 1.1 整体设计方案

整个系统由信号采集模块、存储器模块、中心控制模块、接口电路以与其他 的外围辅助电路组成。

信号采集模块是存储测试中的重要环节,关系着获取信息的质量和采集测试 的精度。模拟信号的采集电路通常由跟随器、模拟开关、A/D转换器、缓冲器等部分组成。被采集的信号经A/D转换成数字信号后存入存储器。电路的整个时序由逻辑控制模块协调控制。数字量和开关量的采集电路同样是在主控制模块的控制下进行的。

主控制模块由FPGA与其外围电路组成。FPGA是控制模块的核心部分。主要完 成A/D转换器的时钟选取、数据的存储计算以与相应的控制逻辑、实现与PC机的通信等控制任务。

微型计算机与I/O设备的接口按照传输数据方式的不同,可分为并行接口和

串行口两种。前者使传输数据的各位同时在总线上传输,后者则使数据一位一位的传输。并行传输又有字并行和字节并行之分,并行接口一般实现的是字节并行传输。本课题采用并口传输方式。

存储器模块在系统中主要完成数字信息的存储。

3 / 45

. . . .

2 系统硬件设计

2.1 系统的整体结构

系统的整体结构如图2.1所示:

64路模拟信号 1 路 数字信号 8 路开关信号 电压跟随器 模拟开关 A/D 转换器 FPGA 中 心 控 制 电 路 存 储 器 电平转换 隔离电路 驱动电路 接口电路 PC 机

图 2.1 系统的整体结构图

2.2 模拟信号采集通道的设计

存储测试系统常常需要多通道同时采集。在此情况下,若是在每个通道都设置一套模拟传输与量化器,是不经济的,有时也是不必要的,特别在有限的体积有时甚至是不可能的,因此,本系统要根据被测信号的特点与测试要求,模拟信号采集通道采用多路转换器,用最简单的硬件电路完成多路信号的存储测试。模拟信号采集通道的框图如图2.2所示:

64路 模拟 信号 缓冲器 模拟 开关 A/D 转换器 图 2.2 模拟信号采集通道图

4 / 45

. . . .

在本系统中,模拟输入信号的电压围是0~5V。本课题采用LM324运算放大器作为电压跟随器,用来稳定输入信号,增加AD9221的输入阻抗。

LM324是四运放集成电路,它采用14脚双列直插塑料封装。部包含四组形式完全一样的运算放大器,除电源共用外,四组运放相互独立。LM324四运放电路具有电源电压围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路中。

在本系统中,考虑到模拟输入信号有64路,所以采用模拟开关来实现数据的传输是很有必要的。

2.3 数字信号采集通道的设计

1路数字信号,由于输入是TTL电平信号或低电平0V、高电平12V的脉冲信号。所以数字信号必须经过电平调整处理,才能够存入存储器(存储器输入电压为3.3V,后面会有介绍)。下面是一个调压电路:

D1是一个3.3V的稳压管,如果输入电压大于3.3V,则将AS1输出电压钳制在3.3V,起到了调压的作用。如果是低于3.3V,那么电压将不改变。

图2.3 调压电路

2.4 开关量采集通道的设计

开关信号分为有源和无源两种,开关信号需要经过隔离和驱动才能与执行机构 相连接。造成执行机构的误动作。开关量隔离的目的在于直接电气联系,以防地电位差、外界电磁场等干扰因素。在本设计中,采用光电耦合器件作为隔离器件,74HC14作为驱动器件

2.4.1 开关量隔离电路的设计

光电耦合器件是以光为媒介传输信号的电路,如图2.4所示。发光二极管和光敏三极管封装在同一个管壳,发光二极管的作用是将电信号转变为光信号,光敏三极管接受光信号再将它转变为电信号。

光电耦合器件的特点是:输出信号与输入信号在电气上完全隔离,抗干扰能

5 / 45

. . . .

力强,隔离电压可达千伏以上。无触点,寿命长,可靠性高。响应速度快,易于TTL电路配合使用。

图2.4 开关量隔离电路

图2.4电路的工作过程如下:当输入为低电平时,流过发光二极管的电流为零,光敏三极管截止,输出为高电平。当输入为高电平时,电流经R71流经发光二极管使其发光,光信号的作用于光敏三极管,使其饱和导通,输出为低电平。所以光电耦合器件兼有反相与电平转换的作用。R71为限流电阻,其阻值决定了发光二极管的导通电流,此电流一般选为数毫安。R72的取值要保证输出的高、低电平要求。光电耦合器件的一个重要参数是电流传输比CTR,当输入为高电平时,须使R72>+V/(CTR*输入电流)才能保证输出为低电平。如果R72选的太大,则输出电压带动拉电流负载的能力减弱,光敏三极管的暗电流也会对输出高电平造成不利影响。因此,需要综合各方面的因素来确定R72的阻值。 2.4.2 开关量驱动电路的设计

开关量驱动电路采用TTL三态门缓冲器,本设计采用74HC14,它的驱动能力要高于一般的TTL电路,如图2.5所示。74HC14是六芯片集成电路,部包含六组形式完全一样的反相器,除电源共用外,六组反相器相互独立。

74HC14 是施密特输入反相器芯片, 输入电平从低到高的翻转电平高于从高到低的翻转电平, 使输入缓慢变化或不太规则变化的边沿整形成陡峭的边沿. 施密特输入只是使得上跳沿和下降沿变得比原始输入信号的上升和下降更加陡峭一些,也就是在数字电路起整形作用。

图2.5 开关量驱动电路

6 / 45

. . . .

2.5 模拟开关的选择

模拟开关是数据采集系统中的主要器件之一,它的作用是切换各路输入信号。在测控系统中,被测物理量通常是几个或几十个。为了降低成本和减小体积,系统常使用公共的采样保持器、放大器与A/D转换等器件,因此需要使用多路开关轮流把各路被测信号分时地与这些公用器件接通。

多路开关有机械触点式开关和半导体模拟开关。机械触点式开关中最常用的是干簧继电器,它的导通电阻小,但切换速度慢。集成模拟电子开关的体积小,切换速率快,无抖动,耗电小,工作可靠,容易控制。它的缺点是导通电阻较大,输入电压电流容量有限,动态围小。在较低频段上(f<10MHz)的集成模拟电子开关,通常采用CMOS工艺制成;而在较高频段上(f>10MHz)则采用双极型晶体管工艺技术。集成模拟电子开关在测控技术中得到广泛应用。

在设计中往往要用到模拟开关,对于不同的用途需要选择不同的模拟开关。在选择时要考虑以下参数:

1、通道数量

通道数量对传输的被测信号的精度和切换速度有直接的影响,因为通道数目越多,寄生电容和泄露电流通常也越大,特别是在使用集成模拟开关时,虽然只有其中一路导通,但由于其他模拟开关断开时(此时处于高阻状态)仍存在漏电流,从而也要对导通的那一路开关产生影响:通道越多,漏电流越大,通道间的干扰也越多。

2、导通电阻

理想的多路开关其导通电阻应为零,断开电阻应为无穷大,但是实际中的模拟开关无法达到这个要求。模拟开关的导通电阻会使信号电压产生跌落,尤其是和低阻抗器件串联使用的时候,因此需要考虑开关电阻。希望导通电阻尽量小。

3、开关时间

由于模拟开关器件中有导通电阻并有寄生电容,这样就会产生一定的导通和关断时间,通常希望器件具有短的开关时间。

4、泄漏电流

指开关断开时的泄漏电流。如果信号源阻很大,传输的是电流量,此时就更需要考虑它的泄漏电流,一般希望泄漏电流越小越好。另外根据系统实际需要,还要

7 / 45

. . . .

考虑开关的数量、种类(几选一、逻辑控制等)。

5、切换速度

对于传输快速变化的场合,就要求多路开关的切换速度高,当然也要考虑后一段的采样保持和A/D的速度,从而以最优的性价比来选取多路开关的切换速度[4]。

作为多路选择开关,需要多通道快速循环采集。本系统选择了开关速度比较快、泄漏比较小、16选1的模拟选择开关ADG506。 AD0506电压围宽、功耗低、泄漏小。其主要的参数为:

低泄漏:20pA(典型值) 较低的导通电阻:200

较高的开关速度: 导通200ns、关闭200ns

图2.6为ADG508在系统中的应用。当A6=1时,ADG506开始工作,随着A1、A2、A3和A4的变化,16个通道轮流进行数据采集。A1、A2、A3、A4、A6由FPGA提供。当A6=1时,ADG506停止工作,数据采集结束。

图 2.6 ADG506在系统中的应用

2.6 A/D转换器的选择

随着超大规模集成电路技术的飞速发展和计算技术在工业领域的广泛用,A/D 转换器的新设计思想和制造技术层出不穷。为满足各种不同的检测和控制任务的需要,大量结构不同、性能各异的A/D转换电路应运而生。有传统的并行型、逐次逼

8 / 45

. . . .

近型、积分型,也有近年来新发展起来的∑一△型和流水线型等,各种类型的ADC各有其优缺点,可满足不同的要求。 2.6.1 模数转换器的分类与其特点

目前,模数转换集成电路主要有以下几种类型: 1、并行比较ADC

并行比较ADC是现今速度最快的模/数转换器,通常称为“闪烁式\"ADC。它由电阻分压器、比较器、缓冲器与编码器四部分组成。这种结构ADC的所有位同时转换,其转换时间主要取决于比较器的开关逮度、编码器的传输时间延迟等。增加输出位数对转换时间的影响较小,但随着分辨率的提高,需要高密度的模拟设计,以实现转换所需的大量精密分压电阻和比较器电路。例如,N位ADC需要2n个精密电阻和2(n-1)个并联比较器。这类ADC的优点是:模数转换速度高;缺点是分辨率不高,功耗大,成本高。

2、逐次逼近型

逐次逼近型ADC是应用非常广泛的模/数转换方法,它由比较器、DIA转换器、比较寄存器、时钟发生器以与控制逻辑电路组成。它将采样输入信号与已知电压不断进行比较,然后转换成二进制数。主要通过二分探索法求得一数字码,使其对应的电压最接近于输入电压。这一类型ADC的优点:转换速率比较高,采样速率可达1 MSPS;与其它ADC相比,功耗相当低;转换精度也比较高。在高精度、快速A/D变换中应用最为广泛。

3、积分型ADC

前面所讲到的并行比较ADC和逐次逼近型ADC均属于直接转换ADC,而积分型和后面所讲的压频变换型ADC则属于间接ADC。积分型ADC又称为双斜式ADC。它的基本原理是通过两次积分将输入的模拟电压转换成与其平均值成正比的时间间隔。与此同时,在此时间间隔利用计数器对时钟脉冲进行计数,根据时间间隔的值计算出模拟电压的值,从而实现A/D转换。积分型ADC的转换精度只取决于参考电压,因此容易提高它的精度。这类ADC主要应用于低速、精密测量等领域。其优点是:分辨率高、功耗低、成本低。缺点是:转换速率低,转换速率在12位时为100~300SPS.

4、压频变换型ADC

9 / 45

. . . .

压频变换型ADC是先将输入模拟信号的电压转换成频率与其成正比的脉冲信号,然后在固定的时间间隔对此脉冲信号进行计数,计数结果正比于输入模拟电压信号的数字量。从理论上讲,这种ADC的分辨率可以无限增加,只要采样时间足够长,即满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是:精度高、价格低、功耗低。缺点是:类似于积分型ADC,其转换速率受到限制,12位时为100~300SPS。

5、∑--△型ADC

与一般的ADC不同,∑--△型ADC不是直接根据抽样数据的每一个样值的大小进行量化编码,而是根据前一量值与后一量值的差值即所谓的增量的大小来进行量化编码。∑--△型ADC由两部分组成,第一部分为模拟∑--△调制器,第二部分为数字抽取滤波器。由于∑--△具有极高的抽样速率,通常比奈奎斯特抽样频率高出许多倍,因此∑--△转换器又称为过抽样转换器A/D。这一技术的优点:分辨率可高达24位,比积分型与压频变换型ADC的转换速率高,可实现低价格、高分辨率的数据采集。缺点:当高速转换时,需要高阶调制器,在转换速率一样的条件下,比积分型和逐次逼近型ADC的功耗高。

6、流水线型ADC

流水线型ADC (pipeline)又称为子区式ADC,它由若干级级联电路组成,每一级包括一个采样/保持放大器、一个低分辨率的ADC和DAC以与一个求和电路,其中求和电路还包括可提供增益的级间放大器。快速精确的n位转换器分成两段以上的子区(流水线)来完成。流水线ADC不但简化了电路设计,还具有如下优点:每一级的冗余位优化了重叠误差的纠正,具有良好的线性和低失调性;每一级具有独立的采样/保持放大器,前一级电路的采样/保持可以释放出来用于处理下一次采样,因此允许流水线各级同时对多个采样进行处理,从而提高了信号的处理速度,多级转换提高了ADC的分辨率。由此可见这种类型的ADC不仅转换速度较高,而且分辨率也比较高[5]。

2.6.2 模数转换器的主要参数

无论我们选择那种A/D转换器,都必须考虑以下几个主要性能指标: 1、分辨率(resolution):

分辨率表示A/D转换器输出数字量变化一个相邻数码,所需输入模拟电压的变

10 / 45

. . . .

化量。其值定义为满刻度电压与2N之比,其中N为ADC的位数。例如设A/D转换器的位数为n,满量程电压为FSR,则A/D转换器的分辨率定义为:分辨率=FSR/2N。另外可以用百分数来表示分辨率,此时的分辨率成为相对分辨率。公式为: 相对分辨率=分辨率/FSR·100%。例如一个满量程电压为10V的12位A/D转换器,能够分辨模拟输入电压变化的最小值为2.44mV,相对分辨率为:0.0244%.

2、量程:量程就是指转换器所能转换模拟信号的电压围。 3、绝对误差:

绝对误差定义为对应于输出数码的实际模拟输入电压与理想模拟输入电压之差。绝对误差一般在±1/2LSB围。绝对误差包括增益误差、偏移误差、非线性误差,也包括量化误差。

4、量化误差:

量化误差是由ADC的有限分辨率引起的误差。在ADC的转移特性曲线中,不计其它误差的情况下,一个分辨率有限的ADC的阶梯状转移特性曲线与具有无限分辨率的ADC转移特性曲线最大偏差,称之为量化误差。

5、偏移误差:

偏移误差是指最低有效位为“1”状态时的实际输入电压与理论输入电压之差,这一差值电压称作偏移电压,一般以满量程电压值的百分数表示。

6、转换速率:

转换速率是指能够重复进行数据转换的速度,即每秒钟转换的次数。[11] 本系统中,A/D转换器选用了AD9221。 AD9221是一种低功耗、12位分辨率、1.5M最高转换速率的A/D转换器。该转换器部包含有12位的量化器、宽带采样保持电路、可编程电压基准源,采用单电源+5V供电,可以根据用户配置,信号以单端方式输入或是以差分方式输入。输出为并行接口,兼容TTL电平。由图2.5可以看出,AD9220属于子区式模/数转换器结构,并且采用了数字校正技术,AD公司称之为多级差分管线结构(Multistagedifferential pipeline architecture)。由于采用了这样的结构,AD9220可以在1.5Msps时提供11.3为有效位数(ENOBS),信号/(噪声+失真)比为70dB[6]。

11 / 45

. . . .

图2.7 AD9221部结构图

2.6.3 AD9221在系统中的应用

模拟信号从数据输入端VINA输入,经过模数转换,输出12位的数字信号。 图2.6为AD9221的通用接法。图中AIN是经调整过的模拟信号,AD9221采用单通道输入,信号从VINA端输入。AD9221的时钟端CLK由FPGA控制提供。

图2.8 AD9221在系统中的应用

2.7 中心控制模块的设计

中心控制模块由FPGA与其外围电路组成,主要用来对整个电路的时钟信号进行控制,保证数据的正确存入与读出。其结构框图如图2.7所示

晶 振 F P G A 图2.9 中心控制模块的结构框图

12 / 45

EPROM FPGA 供电

. . . .

现场可编程门阵列(FPGA)是近十年加入到用户可编程技术行列中的器件。它由逻辑功能块排列成阵列组成,并由可编程的部连线连接这些逻辑功能块来实现不同的设计,可编程门阵列在器件的选择和部的互连上提供了更大的自由度。FPGA 可以达到比PLD 更高的集成度,但具有更复杂的布线结构和逻辑实现。PLD 与FPGA 之间的主要差别是PLD 通过修改具有固定连电路的逻辑功能来进行编程,而FPGA 是通过修改一根或多根分隔宏单元的基本功能块的连线的布线来进行编程。因此,FPGA 既有门阵列的高逻辑密度和通用性,又有可编程逻辑器件的用户可编程特性,而且它更接近PCB 的设计模式。采用FPGA 的优点是:在实现系统小型化、集成化和高可靠性的同时,减少了风险,降低了成本,缩短了周期[7]。

FPGA 的开发可以用硬件描述语言(HDL)编程,然后在开发平台上进行验证,最后由EDA 工具自动实现设计;也可以在开发平台中用原理图的设计方式,像PCB 设计方式一样的设计FPGA 芯片中的硬件电路。

本设计中,采用Xilinx 公司生产的Spartan XCS05系列的芯片XC2S50作为CPU,XC18V01_PC20 作为EPROM,TPS70358作为供电芯片,详细介绍见第三章。 2.8 存储器模块的设计

FLASH MEMORY(闪速存储器)是一类非易失性存储器NVM(Non Volatile Memory)即使在供电电源关闭后仍能保持片信息;而诸如DRAM、SRAM 这类易失性存储器,当供电电源关闭时片信息随即丢失。FLASH MEMORY集其它类非易失性存储器的特点:与EPROM相比较,闪速存储器具有明显的优势—在系统电可擦除和可重复编程而不需要特殊的高电压(某些第一代闪速存储器也要求高电压来完成擦除或编程操作);与EEPROM相比较,闪速存储器具有成本低密度大的特点。其独特的性能使其广泛的运用与各个领域,包括嵌入式系统,如PC与外设、电信交换机、蜂窝、网络互连设备、仪器仪表和汽车器件,同时还包括新兴的语音、图像、数据存储类产品,如数字相机、数字录音机和个人数字助理(PDA)[8]。

本系统采用存储芯片K9F1G08来进行数据的存储。K9F1G08是一种容量为128M×8Bit的FLASH存储器,采用NAND闪存技术工艺完成。具有不挥发、低功耗、擦写速度快等特点,并且在掉电后信息不丢失,采用单电源3.3V供电。 2.8.1FLASH MEMORY的分类与比较

在1984年,东芝公司的发明人Fujio Masuoka 首先提出了快速闪存存储器(此

13 / 45

. . . .

处简称闪存)的概念。与传统电脑存不同,闪存的特点是非易失性(也就是所存储的数据在主机掉电后不会丢失),其记录速度也非常快。目前市场上的flash从结构上大体可以分为AND、NAND、NOR等几种。

Intel是世界上第一个生产闪存并将其投放市场的公司。1988年,公司推出了一款256K bit闪存芯片。它如同鞋盒一样大小,并被嵌于一个录音机里。后来,Intel发明的这类闪存被统称为NOR闪存。它结合EPROM(可擦除可编程只读存储器)和EEPROM(电可擦除可编程只读存储器)两项技术,并拥有一个SRAM接口。

第二种闪存称为NAND闪存。它由日立公司于1989年研制,并被认为是NOR闪存的理想替代者。NAND闪存的写周期比NOR闪存短十倍,它的保存与删除处理的速度也相对较快。NAND的存储单元只有NOR的一半,在更小的存储空间中NAND获得了更好的性能。鉴于NAND出色的表现,它常常被应用于诸如CompactFlash、SmartMedia、 SD、 MMC、XD、 and PC cards、USB sticks等存储卡上。二十多年的发展过程中,Flash Memory技术经过了多次变革和发展。但其变化的总体趋势一直都是:存储容量越来越大、数据读写速度越来越快、性能价格比越来越高。

第三种是AND 闪存。AND 技术是Hitachi 公司的专利技术。Hitachi和 Mitsubishi共同支持AND技术的FLASH MEMORY。AND技术与NAND 一样采用“大多数完好的存储器”概念,目前,在数据和文档存储领域中是另一种占重要地位的闪速存储器技术。该公司生产的芯片尺寸更小、存储容量更大、功耗更低,一般用于智能、个人数字助理、掌上电脑、数字相机、便携式摄像机、便携式音乐播放机等。

NOR结构的特点为相对电压低、随机读取快、功耗低、稳定性高,而NAND和AND的特点为容量大、回写速度快、芯片面积小,且可在芯片执行(XIP,eXecute In Place),这样应该程序可以直接在flash存运行,不必再把代码读到系统RAM中。现在,NOR和NAND FLASH的应用最为广泛,在CompactFlash、Secure Digital、PC Cards、MMC存储卡以与USB闪盘存储器市场都占用较大的份额。

NAND结构能提供极高的单元密度,并且写入和擦除的速度也很快,是高数据存储密度的最佳选择。

NOR和NAND两种结构性能上的异同步如下:

● NOR

的读速度比NAND稍快一些。 的写入速度比NOR快很多。

14 / 45

● NAND

. . . .

● NAND● NAND● NAND

的擦除速度远比NOR快。

的擦除单元更小,相应的擦除电路也更加简单。

闪存中每个块的最大擦写次数量约万次,而NOR的擦写次数是十万次。

此外,NAND的实际应用方式要比NOR复杂得多。NOR可以直接使用,并在上面直接运行代码。而NAND需要I/O接口,因此使用时需要驱动程序。不过当今流行的操作系统对NAND Flash都有支持,如风河(拥有VxWorks系统)、微软(拥有WinCE系统)等公司都采用了TrueFFS驱动,此外,Linux核也提供了对NAND Flash的支持[9]。

2.8.2K9F1G08管脚描述

CLE:命令锁存使能。其为高时,命令通过I/O口线在WE信号的上升沿被锁入命令寄存器。

ALE:地址锁存使能。当其为高时,地址在WE信号的上升沿被锁入地址寄存器;当其为低时,锁定输入数据。

CE:片使能。读操作期间,CE变高,器件转入standby模式;编程或擦除期间,器件处于忙状态时,CE高将被忽略。

WE:写使能。命令、地址和数据在WE信号的上升沿被锁定。

RE:读使能。下降沿有效。WP:写保护。在电源电压过渡期间,使WP为低电平时,可产生写/擦除保护。

R/B:操作状态指示。为低电平时,指示正在编程或读操作中,操作结束后变成高,开路输出。

I/O口:(I/O0~I/O7)三态。输入命令、地址和数据以与读操作时输出数据。 2.8.3K9F1G08部结构描述

K9F1G08有65536行(页)乘以2112×8列阵列一共组成1056M存储器,多余的64列位于列地址2048~2111。一个2112字节的高速缓冲存储器彼此间是连续相接的,这些存储器被连接到记忆单元阵列,在页读取和编程运行的过程中,为I/O缓冲器和记忆单元之间的数据转移提供中间机构。记忆阵列由32个单元组成,这些连续的单元组成了NAND结构,每32个单元属于不同的的页。一块由2个NAND结构链组成,而一个NAND由32个单元组成,总共1081344个NAND单元组成了一块。编程和独操作是以页为基础进行,而块擦除是以块为基础进行。这些记忆阵列由1024个分别

15 / 45

. . . .

有128K字节的块组成,它表明,在K9F1G08逐个位的擦除操作是被禁止的。[10]组织结构如图2.11所示:

图 2.11 K9F1G08组织结构图

K9F1GO8已经形成多元的8个I/O端口,这样的安排极减少了管脚数,并且允许系统升级为了将来操作一致性的扩展。在WE和CE处于低电平期间,指令、地址、数据被写通过I/O端口,它们都在WE的上升沿到来时被锁存。通过I/O管脚,CLE和ALE常用来实现各自的指令和地址功能。有一些要求一个总线周期,例如,重设指令读指令等仅要求一个总线周期。而另一些指令,像页读取和编程与块擦除要求两个周期,一个周期为了建立而另一个周期是执行操作。128字节的物理空间要求28个地址,因此,要求4个周期为地址的建立,两个周期是列地址,两个周期是行地址。页读取和编程同样需要四个地址周期跟随指令要求输入。然而,在块擦除操作中,仅仅两个行地址周期被使用,依靠写入特殊的指令进入指令寄存器,器件操作才被选中。

2.8.4K9F1G08在系统中的应用

在FPGA的控制作用下,数据存入FLASH中。对于模拟信号,由传感器采集到的信号经A/D转换后,暂存于FLASH部的FIFO中,再送入FLASH存储器中。对于数字量和开关量,经信号调理后,经FPGA部编程串并转换后,暂存于FPGA部的FIFO中,再送入FLASH存储器中。如图2.10所示:

16 / 45

. . . .

图 2.10 K9F1G08在系统中的应用

2.9 本章小结

本章主要讲述了所设计的通用数据采集系统的硬件电路的设计,整个系统由四个部分组成,分别是采集部分、控制部分、存储部分、接口部分。采集到的信号形式有模拟量、数字量、开关量三种,每种信号都有其对应的信号处理电路。模拟量要经过A/D转换为数字量后才能存入FLASH存储器中。数字量要经过电平转换和FPGA部串并编程后才能存入FLASH存储器中。开关量要经过隔离、驱动和FPGA部串并编程后才能存入FLASH存储器中。其中,模拟通道的选择、A/D转换、FLASH存储器的读、写、擦除都是在FPGA控制下完成的。

17 / 45

. . . .

3 FPGA 可编程逻辑器件

本设计由于需要用到大量的控制信号,而且又是以计算机为平台,所以系统中有大量的数字逻辑电路。如果采用传统的数字逻辑芯片来设计电路的话,既增加了电路板的面积,而且也增加了电路的不可靠性,另外调试也不方便。为了解决这些问题,可以借助于近年来迅速发展的大规模可编程专用集成电路----现场可编程门阵列(FPGA )。用一片FPGA就可以代替许多分立器件,从而大大简化了电路板的复杂程度。下面介绍一下它的结构、特点以与设计方法。 3.1 FPGA简介

在可编程逻辑器件芯片部,按一定的排列方式集成了大量的门和触发器等基本逻辑元件。使用者可利用特定的计算机开发工具(软件包和硬件电路、编程电缆)对其进行加工,即按设计要求将这些芯片部的元件连接起来(此过程称为编程或设置),使之实现完成某个数字逻辑电路或系统的功能,成为一个可在实际电子系统中使用的专用集成电路(ASIC)随着集成电路工艺的日臻完善,集成度急剧攀升,功能日益强大。可编程逻辑器件广阔的应用前景备受业人士的瞩目。由于其部结构的不同,目前应用较广泛的有CPLD和FPGA。

目前,很多学校和公司都开发了可编程逻辑器件实验板,这些实验板上采用了如下几个公司的产品:Xilinx 公司 主要产品为FPGA和CPLD,目前各学校和公司制做实验板的常用芯片为FPGA 4000系列,Spartan XCS05和XC95108系列CPLD。

Lattice 公司 该公司已经和AMD公司合并,该公司生产GAL和CPLD产品,目前各学校和各公司制作实验板的常用芯片为ISP1016和可编程开关GDS14.。

AMD 公司 该公司生产MACH系列产品,常用芯片为MACH4-128和MACH211SP-15JC。

Altera 公司 该公司生产FPGA和EPLD,常用芯片为EPLD7000系列产品7128和FPGA10K系列产品10K10

Lattice公司介绍:Lattice是ISP(在线可编程)技术的发明者,ISP技术极大的促进了PLD产品的发展,80年代和90年代初是其黄金时期,但很快被Xilinx,Altera超过。与ALTERA和XILINX相比,其开发工具比略逊一筹。中小规模PLD比较有特色,种类齐全。99年收购Vantis(原AMD子公司),2001年收购Lucent

18 / 45

. . . .

微电子的FPGA部门,是世界第三大可编程逻辑器件供应商。目前Lattice公司在设有研发部门[13]。

3.2 FPGA基本部构造与功能分析

FPGA是可编程逻辑器件,属于特殊ASIC芯片的一类,是在PAL、 GAL等可编程逻辑器件基础上发展起来的。同以往的PAL、GAL等相比较:FPGA的规模比较大,适合于时序、组合逻辑等电路应用场合,可以替代几十块甚至上百块通用分立IC芯片,尽管FPGA以与其它类型的PLD器件的结构各有其特点和处,但是概括起来它都是由三大部分组成的:

 一个二维的逻辑块阵列,构成

CPLD器件的逻辑组成核心.  输入/输出块.

 连接逻辑块的互联资源,连线资源

由各种长度的线段组成,也包括用于连接逻辑块之间,逻辑块与输入输出部分的可编程连接开关。

图 3.1 FPGA部结构图

同样,还有一个时钟电路用于驱动时钟信号到每一个逻辑模块中的每一个触发器。另外,还可能有额外的逻辑资源,像ALU、存储器和译码器[14]。 3.2.1可编程逻辑块阵列

可配置逻辑模块(CLB)包含了FPGA的可编程逻辑。典型的CLB,它包含了用于任意组合逻辑函数的RAM;还包含了用于钟控存储单元的触发器和多路选择器,这样就便于在模块中为逻辑电路布线以与模块部的逻辑电路与外部资源之间的布线连接。这些多路选择器还允许极性的选择、复位输入和清除输入选择。

注意,逻辑输出不需要通过触发器。设计者可以利用一个CLB产生简单的组合逻辑。正因为如此,多个CLB能够,而且经常被连接在一起,以实现复杂的布尔逻辑。FPGA的这种优于CPLD的优点,意味着设计者能够用几个CLB串联在一起来实现非常复杂的逻辑。不幸的是,在一个FPGA中传递时是全部延时的总量。因此这个优点也导致了所做的设计在速度方面的全面下降[15]。

19 / 45

. . . .

3.2.2可编程输入/输出块

可配置I/O模块适用于将信号传送到芯片上,然后再将信号传出芯片。输出缓冲器B1有可编程的控制器,它们可以是缓冲器成为三态或集电极开路状态,并且可控制缓冲器的输出摆率。这些控制端允许FPGA输出到大多数标准的TTL或CMOS器件。输入缓冲器B2能够被编程为不同的输出阈值电压。典型的阈值电压为TTL或CMOS电平,以便于和TTL或CMOS器件相接口。在每一个引脚上的输入和输出缓冲器的组合以 与它们的可编程性,意味着每一个I/O模块都可以被用于一个输入信号、一个输出信号或者一个双向信号。 3.2.3互连资源

FPGA的互连电路与CPLD的完全不同,但它却非常类似于一个门阵列ASIC的互连电路。图3.2示出了互连资源的可配置逻辑模块(CLB)结构。每一个CLB都被连接到与它紧挨着的其他CLB上,如图中左上角所示CLB。这些连线有时被称作短线(注意,为简单起见,图中只画出了左上角CLB的连线,实际上,所有四个CLB都有连线分别与最靠近它们的其他CLB相连。这些连线使得那些因过于复杂而无法装入某个单一CLB的逻辑能够被分开装入多个CLB)[16]。

图 3.2 互连资源

其他的路径资源由经纬连线所组成。这些连线在到达开关矩阵之前经过许多CLB。这些开关矩阵允许信号从一个开关矩阵传递到另一个开关矩阵,再传递到下一个开关矩阵,最后连接到CLB。这些CLB可能彼此相互关联,但又互相原理。这种传递新好方法的缺点是每一条通过某个开关矩阵的路径都会导致一个显著的延时。经常的情况是,为了通过芯片传递信号,路径的延时变得比逻辑门的延时还要

20 / 45

. . . .

大[17]。

第三种类型的路径资源是长线,设计者可以用它去连接某些条件苛刻的CLB,即这些CLB在芯片上的物理位置彼此相连“甚远”,而它们之间的连接又不会产生太大的延时。这些长线通常是从一个CLB模块的末端一直通向另一个CLB模块,而中间并不与某个开关矩阵相连。对于条件苛刻的路径逻辑,长线确保不会产生显著的延时。长线还可以在芯片当中被用作总线。 3.2.4时钟电路

特殊的I/O模块被分布在芯片的周围。它具有特殊的高驱动能力的时钟缓冲器——时钟驱动器。这些缓冲器被连接到芯片的时钟输入引脚,它们驱动时钟信号到全局时钟线上。这些全局时钟线以一种被称之为时钟树的结构形式遍布整个器件。这些时钟显示为了较小的时钟上升时间和快速的时钟传播时间而设计的,正如以后要讨论的那样,用FPGA设计电路必须是同步的,因为利用FPGA的路径资源不能保证信号的军队上升时间和延迟时间。只有当使用从时钟缓冲器而来的时钟信号时,相关的延迟和上升时间才能使微小的和可预测的[18]。 3.3 系统中FPGA的设计 3.3.1 FPGA的通用设计过程

●文本编辑:用任何文本编辑器都可以进行,也可以用专用的

HDL编辑环境。

通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件。

●功能仿真:将文件调入

HDL仿真软件进行功能仿真,检查逻辑功能是否正确。

●逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布

尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。

●布局布线:将.edf

文件调入PLD厂家提供的软件中进行布线,即把设计好的

逻辑安放到PLD/FPGA。

●时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的

时序。

●编程下载:确认仿真无误后,将文件下载到芯片中

[19]

3.3.2 FPGA时序仿真

在本系统中,设有FPGA的启动模块。图3.3为此模块是时序图:

21 / 45

. . . .

图3.3 时序图

当glrn信号是低电平时,系统清零,输出start为高电平,计数器start_count 置零。当glrn信号为高电平时,输入上升沿有效的时钟信号 fosc,当输入bstart为低电平时,计数器最高位为低电平时,开始计数。反之,将计数器置零。当输入bstart为高电平时,计数器最高位为低电平时,开始计数。反之,将计数器置零。

在本系统中,采用三个手动开关来控制采集信号的种类,当开关men接通时,系统开始采集模拟量;当开关sen接通时,系统开始采集数字量;当开关 ken接通时,系统开始采集开关量。图3.4所示为此模块的时序图:

图3.4 时序图

3.3.3模拟量采集模块的时序仿真

在本系统中,采用手动开关来控制模拟量的采集。当采集开始时,闭合开关men ,表示此时系统正在进行模拟量的采集。在控制作用下,将采集到的信号暂存

22 / 45

. . . .

入FPGA部的fifo中,然后再存入flash芯片中。图3.5所示为此模块的时序图:

图 3.5 时序图

当glrn为低电平,计数器置零。反之,当glrn为高电平且时钟信号fosc有输入时,计数器开始计数。当10<count<30时,启动A/D转换,此时clk输出为低电平。当count=35时,进行通道选择。图中所示channela1为高电平,其他为低电平时,选通通道a1,对其通道进行循环选择。当count=41时,开始数据转换,产生12位的数字信号。当41<count<45和81<count<85时,选通FPGA置FIFO,当count=46时,将12位数字信号中的高八位存入FIFO中;当count=86时,将12位数字信号中的低四位和通道选择的四位地址存入FIFO中。数据经FIFO再存入FLASH存储器K9F1G08中。 3.3.4 数字量采集模块的时序仿真

在本系统中,采用手动开关来控制数字量的采集。当采集开始时,闭合开关sen ,表示此时系统正在进行数字量的采集。在控制作用下,将采集到的信号经串并转换后暂存入FPGA部的fifo中,然后再存入flash芯片中。图3.6所示为此模块的时序图:

23 / 45

. . . .

图 3.6 时序图

当glrn为高电平且时钟信号fosc有输入时,计数器开始计数。当10<count

<30时,启动串并转换,此时clk输出为低电平。当30<count<40时时,进行串

并转换,产生0.1us的延时。图中所示当count=40时,转换结束,产生8位的并行数据。当41<count<45时,选通FPGA置FIFO,当count=46时,将8位数字信号存入FIFO中。数据经FIFO再存入FLASH存储器K9F1G08中。 3.3.5 开关量采集模块的时序仿真

在本系统中,采用手动开关来控制开关量量的采集。当采集开始时,闭合开关ken ,表示此时系统正在进行开关量的采集。在控制作用下,将采集到的信号经串并转换后暂存入FPGA部的fifo中,然后再存入flash芯片中。串并转换时序图如图3.6所示。图3.7所示为此模块通道选择的时序图:

图 3.7 时序仿真图

24 / 45

. . . .

3.3.6存储器模块的时序仿真

在本系统中,采用FLASH来进行数据的存储。FLASH部有置fifo.采集到的数据先暂存fifo中,然后再存入FLASH芯片中。图3.8所示为此模块的逻辑符号;图3.9所示为次模块的时序图:

图3.8 逻辑符号图

图 3.9 时序仿真图

FPGA部编程结构图见附录B。

25 / 45

. . . .

3.4 本章小结

本章主要讲述了所设计的由XC2S50与其外围电路组成的中心控制模块的设计,简单的对FPGA的结构与功能进行分析后,重点介绍了本设计中所采用的XC2S50的部编程结构,并对其进行了时序仿真。

26 / 45

. . . .

4 结论

本文就73路数据采集系统的组成原理、单元电路设计、接口电路设计和系统控

制信号的设计做出了详细的说明,设计出了符合课题要求的通用数据采集测试系统。

本文首先介绍了数据采集系统的特点与发展情况,并根据本课题的实际要求提出了整体的设计方案和原理框图。接着从硬件设计方面对系统的设计做出了详细的说明。

本系统包括64路模拟信号、8路无源开关量信号、1路数字脉冲信号,采样精度12位。A/D转换模块,系统选用了AD公司的12位高精度A/D转换器AD9221,保证了输出电压的精度;系统时钟信号与控制信号由可编程逻辑器件FPGA来实现,提高了系统的可靠性。通讯接口采用计算机的增强型并口(EPP),EPP是一种高性能的并行端口连接方式,可以通过硬件自动握手,传输速度能达到500KB/s~2MB/s,非常适合本系统;由于数据采集测试系统通过并行口与计算机进行通信,避免了计算机硬件电子器件对数据采集部分的电磁干扰,具有良好的抗干扰性。

27 / 45

. . . .

附录A 电路原理图

采集部分

28 / 45

. . . .

控制部分

29 / 45

. . . .

附录B FPGA部结构图

30 / 45

. . . .

附录C VHDL程序

模拟量采集 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity advhd is

port(

glrn

: in std_logic; : in std_logic; : in std_logic;

: out std_logic;

: out std_logic;

: out std_logic_vector(3 downto 0);

fosc start clk

wrfifo channel

channela1 channela6 channela7 channela8 addra fifod

: out std_logic; : out std_logic; : out std_logic; : out std_logic;

: out std_logic_vector(9 downto 0); : out std_logic_vector(7 downto 0) ;

data : in std_logic_vector(11 downto 0) );

end advhd;

architecture Behavioral of advhd is

signal count

: std_logic_vector(6 downto 0);

signal d_channel : std_logic_vector(3 downto 0); signal mark : std_logic_vector(3 downto 0); signal d_wrfifo : std_logic; signal d_addra

: std_logic_vector(9 downto 0);

31 / 45

. . . .

signal f_data : std_logic_vector(11 downto 0);

: std_logic; : std_logic; : std_logic; : std_logic;

signal d_channela1 signal d_channela6 signal d_channela7 signal d_channela8

begin

f_data<=data;

addra<=d_addra; wrfifo<=d_wrfifo;

------------------clk=fosc/125=320KHz---------------------------------

p1: process(fosc, glrn, start) begin

if glrn='0' or start='1' then

count<=\"0000000\";

elsif fosc ' event and fosc='1' then

if count=124 then --7CH

count<=\"0000000\";

else

count<=count+1;

end if;

end if;

end process p1;

---------------------produce AD start---------------------------------

p2: process(fosc, glrn) begin

if glrn='0' then

clk<='1';

elsif fosc ' event and fosc='1' then

32 / 45

. . . .

if (count>=10) and (count<=30) then --startad time pulse t=1us

--0AH,1EH

clk<='0'; -- 0BH,1FH(simulation) 33.35us

else

clk<='1';

end if;

end if;

end process p2;

------------------produce channel convert-------------------------------

channel<=d_channel;

channela1<=d_channela1; channela6<=d_channela6;

channela7<=d_channela7; channela8<=d_channela8; p3: process(fosc, glrn) begin

if glrn='0' then

d_channel<=\"0000\"; d_channela1<='1'; d_channela6<='0'; d_channela7<='0'; d_channela8<='0';

elsif fosc ' event and fosc='1' then

if count=35 then --23H,24H(simulation)

if d_channela1='1' and d_channela6='0' and d_channela7='0' and

d_channela8='0' then

if d_channel<\"1111\" then

d_channel<=d_channel+1;

elsif d_channel=\"1111\" then

33 / 45

. . . .

d_channel<=\"0000\";

d_channela1<='0';

d_channela6<='1';

d_channela7<='0'; d_channela8<='0';

end if;

elsif d_channela1='0' and d_channela6='1' and d_channela7='0' and d_channela8='0' then

if d_channel<\"1111\" then d_channel<=d_channel+1;

elsif d_channel=\"1111\" then d_channel<=\"0000\";

d_channela1<='0';

d_channela6<='0';

d_channela7<='1';

d_channela8<='0';

end if;

elsif d_channela1='0' and d_channela6='0' and d_channela7='1'

and d_channela8='0' then

if d_channel<\"1111\" then d_channel<=d_channel+1;

elsif d_channel=\"1111\" then d_channel<=\"0000\";

d_channela1<='0';

d_channela6<='0';

d_channela7<='0';

d_channela8<='1';

end if;

elsif d_channela1='0' and d_channela6='0' and d_channela7='0'

34 / 45

. . . .

and d_channela8='1' then

if d_channel<\"1111\" then d_channel<=d_channel+1;

elsif d_channel=\"1111\" then d_channel<=\"0000\";

d_channela1<='1';

d_channela6<='0';

d_channela7<='0';

d_channela8<='0';

end if;

end if;

end if;

end if;

end process p3;

-------------------AD data sample--------------------------------------

elsif count=80 then

fifod(7 downto 4)<=f_data(3 downto 0);

elsif fosc ' event and fosc='1' then

if count=40 then

fifod<=f_data(11 downto 4);

p5: process(fosc,glrn) begin

if glrn='0' then

mark<=\"0000\";

fifod(3 downto 0)<=mark;

-- mark<=mark+1;

35 / 45

end if;

. . . .

end if;

end process p5;

-----------------------write fifo data----------------------------------

p6: process(fosc, glrn) begin

if glrn='0' then

d_wrfifo<='1';

elsif fosc ' event and fosc='1' then

if (count>41) and (count<45) then

d_wrfifo<='0';

elsif (count>81) and (count<85) then

d_wrfifo<='0';

else

d_wrfifo<='1';

end if;

end if;

end process p6;

-----------------write fifo data----------------------------------

p7: process(fosc, glrn) begin

if glrn='0' then

d_addra<=\"0000000000 \";

elsif fosc ' event and fosc='1' then

if count=46 then

d_addra<=d_addra+1;

elsif count=86 then

d_addra<=d_addra+1;

end if;

end if;

36 / 45

. . . .

end process p7;

end Behavioral; 数字量采集 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sipo is

Port(

glrn

: in std_logic; : in std_logic; : in std_logic;

fosc start

fifod_IN : in std_logic;

addra : out std_logic_vector(9 downto 0); clk : out std_logic; wrfifo );

End ENTITY;

Architecture Behavioral of sipo is

signal count

: std_logic_vector(6 downto 0);

: out std_logic;

: out std_logic_vector(7 downto 0)

fifod_out

signal d_wrfifo : std_logic;

signal Q : std_logic_vector(7 downto 0);

signal d_addra : std_logic_vector(9 downto 0); Begin

wrfifo<=d_wrfifo;

addra<=d_addra; process(fosc, glrn, start)

begin

37 / 45

. . . .

if glrn='0' or start='1' then

count<=\"0000000\";

elsif fosc ' event and fosc='1' then

if count=124 then --7CH

count<=\"0000000\";

else

count<=count+1;

end if;

end if;

end process ;

---------------------produce SIPO start---------------------------------

process(fosc, glrn) begin

if glrn='0' then

clk<='1';

elsif fosc ' event and fosc='1' then

if (count>=10) and (count<=30) then --started time pulse t=1us

--0AH,1EH

clk<='0'; -- 0BH,1FH(simulation) 33.35us

else

clk<='1';

end if;

end if;

end process ;

---------------------------SIPO --------------------------------------- process(fosc, glrn) begin if glrn='0' then

elsif fosc ' event and fosc='1' then if(count>30)and(count<40) then

38 / 45

. . . .

Q(0)<=fifod_IN; For I IN 1 TO 7 LOOP Q(I)<= Q(I-1); END LOOP; else Null; END if; end if; fifod_OUT<=Q; END Process ;

--------------------write fifo data-------------------------------- process(fosc, glrn)

begin

if glrn='0' then

d_wrfifo<='1';

elsif fosc ' event and fosc='1' then

if (count>41) and (count<45) then

d_wrfifo<='0';

elsif (count>81) and (count<85) then

d_wrfifo<='0';

else

d_wrfifo<='1';

end if;

end if;

end process ;

----------------------write fifo data---------------------------------- process(fosc, glrn)

begin

if glrn='0' then

d_addra<=\"0000000000\";

39 / 45

. . . .

elsif fosc'event and fosc='1' then

if count=46 then

d_addra<=d_addra+1; elsif count=86 then d_addra<=d_addra+1; end if; end if; end process ; end Behavioral; 开关量采集 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY kaiguanliang2 IS

PORT(

: in std_logic;

a9

a : in std_logic_vector(2 downto 0);

ak0 : in std_logic; ak1 : in std_logic; ak2 : in std_logic; ak3 : in std_logic; ak4 : in std_logic; ak5 : in std_logic; ak6 : in std_logic; ak7 : in std_logic; fosc : in std_logic; data : out std_logic

);

end kaiguanliang2;

40 / 45

. . . .

architecture behavior of kaiguanliang2 is begin process(fosc) begin

if a9='0' then data<='0';

elsif fosc' event and fosc='1' then if a=0 then data<=ak0; elsif a=1 then data<=ak1;

elsif a=2 then data<=ak2;

elsif a=3 then data<=ak3; elsif a=4 then data<=ak4; elsif a=5 then data<=ak5; elsif a=6 then data<=ak6; elsif a=7 then data<=ak7; end if; end if; end process; end behavior; 控制开关 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY kaiguan IS

PORT(

s men

: in std_logic_vector(2 downto 0); : out std_logic;

: out std_logic;

41 / 45

sen

. . . .

ken );

: out std_logic

end kaiguan;

architecture behavior of kaiguan is begin process(s) begin case s is when \"001\"=> men<='1'; sen<='0';

ken<='0';

when \"010\"=> men<='0'; sen<='1';

ken<='0';

when \"100\"=> men<='0'; sen<='0';

ken<='1';

when others => men<='0'; sen<='0';

ken<='0';

end case;

end process; end behavior;

42 / 45

. . . .

参 考 文 献

[1]晓泉. 高速数据采集系统. 硕士学位论文. 西北工业大学, 2003 [2].文栋.存储测试系统的设计理论与其应用,高等教育,2002年

[3] 王天明. 多通道通用数据采集系统的设计与实现. 硕士学位论文. :工程大学,2003

[4] 蒲竞春. 多通道数据采集系统和网络实时监控系统的设计与实现. 硕士学位论文. :电子科技大学,2004

[5]晖,风言. 大规模可编程逻辑器件与数字系统设计. :航空航天大学,1998 [6] 广英. 实时监控技术的发展历程和发展趋势. 电视技术学报,2000,No.220: [7] 楮振勇,翁木云. FPGA设计与应用.:电子科技大学,2002. 4

[8] 涛,吴顺君. 高性能数字信号处理器与高速实时信号处理.:电子科技大学,1999. 5

[9] 曙光,郭万有.可编程逻辑器件原理、开发与应用. :电子科技大学,2000. 32 [10] 黄均,俞承芳 可编程逻辑器件设计 复旦大学 1997

[11] 徐志军,徐光辉. 大规模可编程逻辑器件与其应用. :电子科技大学,2000 .12

[12] 松,王国栋.VHDL实用教程. :电子科技大学,2003 . 18

[13] 胡建军. 基于对等网络的数字监控系统的设计. 硕士学位论文. 西北工业大学, 2003

[14]晖,风言. 大规模可编程逻辑器件与数字系统设计. :航空航天大学,1998 [15] 松强. 数字信号处理系统与其应用. :清华大学,1965. 24 [16] 阎石. 模拟电子技术基础. :高等教育. 1989. 212

[17] 乐善,欧阳星明.微型计算机接口技术与应用. :华中科技大学.2002.1 [18] 康华光. 电子技术基础模拟部分. :高等教育.1988.23-25

[19] 侯伯享,顾新.VHDL硬件描述语言与数字逻辑电路设计. :电子科技大学,1999 . 12

[20] Interfacing the Enhanced Parallel Port,.beyondlogic.org

[21] Larry Gaddy Selecting an A/D Converter Application Bulletin of Burr-borwn,1995

43 / 45

. . . .

值此论文完成之际,首先我要感我的导师三民老师。在将近4个月的毕业设

44 / 45

. . . .

计过程中,得到了老师精心指导和淳淳教诲。他严谨的治学态度和对工作的敬业精神深深的激励了我,使我获益良多、终生难忘。让我不仅学到了很多专业上的相关知识,还掌握了平时无法锻炼到的技能。

同时,我还要感科研楼403的研究生静、朴现磊,我的同学琳、周姝。他们在我电路设计、硬件描述语言的设计、对FPGA的时序仿真和毕业论文完成的过程中,给予了我很多的指导和帮助,在此一并向他们表示衷心的感。

求学的十几年里,自始至终得到了亲人和朋友的支持、鼓励和帮助。特别要感我尊敬和爱戴的父母,他们的无私奉献是激励我不断前进的动力!感生活在这人生的宝贵时光里给了我这样一段难忘的经历。

最后,感所有关心和帮助过我的师长、同学和家人。

45 / 45

因篇幅问题不能全部显示,请点此查看更多更全内容

Top