欢迎光临散文网 会员登陆 & 注册

基于FPGA多通道采样系统设计资料

2023-01-26 21:06 作者:乌拉大喵喵  | 我要投稿


1.5TB“电子工程师资料”详细介绍

摘  要


本论文介绍了基于FPGA的多通道采样系统的设计。用FPGA设计一个多通道采样控制器,利用VHDL语言设计有限状态机来实现对AD7892的控制。由于FPGA器件的特性是可以实现高速工作,为此模拟信号选用音频信号。由于音频信号的频率是20Hz-20KHz,这样就对AD转换的速率有很高的要求.因为FPGA的功能很强大,所以我们把系统的许多功能都集成到FPGA器件中,例如AD通道选择部分,串并输出控制模块,这样使得整个系统的外围电路简单、系统的稳定性强。FPGA的配置模式选用被动串行模式,这样就增强了系统的可扩展性。输出模式可选择性使得系统的应用相当广泛,串行输出可以用于通信信号的采集,方便调制后发射到远程接受端,远程接收端对采集的数据进行解调;而并行输出模式则可以通过高速存储器将采集的信号放到微机或者其他的处理器上,根据采集的数据进行相应的控制。此系统的缺点是由于FPGA器件配置是基于SRAM查找表单元,编程的信息是保持在SRAM中,但SRAM在掉电后编程信息立即丢失,所以每次系统上电都需要重新配置芯片,这对在野外作业的工作人员很不方便,解决的方法是专用的配置器件来配置FPGA,在每次系统上电的时候会自动把编程信息配置到FPGA芯片中。但设计中没有采用到这种配置方案主要是考虑到专用配置器件的价格问题。

本文开始介绍了多通道系统的组成部分,然后分别介绍了各个组成部分的原理和设计方法,其中重点介绍了FPGA软件设计部分。还对当前十分流行的基于FPGA的设计技术作了简单的阐述,最后对系统的调试和应用作了简短的说明。

引言

FPGA(Field-Programmable Gate Array 现场可编程门阵列)是近年来广泛应用的超大规模、超高速的可编程逻辑器件,由于其具有高集成度(单片集成的系统门数达上千万门)、高速(200MHz以上)、在线系统可编程等优点,为数字系统的设计带来了突破性变革,大大推动了数字系统设计的单片化、自动化,提高了单片数字系统的设计周期、设计灵活性和可靠性。在超高速信号处理和实时测控方面有非常广泛的应用。

硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言。VHDL是硬件描述语言的几种代表性语言的一种。VHDL(Very High Speed Integrated Circuit Hardware Description Language 即超高速集成电路硬件描述语言)主要用于描述数字系统的结构、行为、功能和接口,与其它的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。用VHDL设计的程序,通过综合工具产生网表文件,下载到目标器件,从而生成硬件电路。VHDL还是一种仿真语言,包括行为仿真、功能仿真和时序仿真,给系统设计各个阶段的可行性做出了决策。

目前,这种高层次(high-level-design)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。

数据采集在现代工业生产以及科学研究中的重要地位日益突出,并且实时高速数据采集的要求也不断提高,在信号测量、图像处理,音频信号处理等一些高速、高精度的测量中,都需要进行高速数据采集。本次设计就是用FPGA实现采样系统,来实现音频信号的数据采集。

1  FPGA和VHDL概述

1.1 FPGA发展历程

当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断地进行更新换代。它由早期的电子管、晶体管、小中规模集成电路、发展到超大规模集成电路(VLSIC,几万门以上)以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)

早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(EEPROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。其后,出现了一类结构上较复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与一或”表达式来描述,所以, PLD能以乘积和的形式完成大量的组合逻辑功能。

这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和EEPROM技术。还有一类结构更为灵活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。PLA器件既有现场可编程的,也有掩膜可编程的。在PAL的基础上,又发展了一种通用阵列逻辑GAL (Generic Array Logic),如GAL16V8,GAL22V10 等。它采用了EEPROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。

为了弥补这一缺陷,20世纪80年代中期。Altera和Xilinx分别推出了类似于PAL结构的扩展型 CPLD(Complex Programmab1e Logic Device)和与标准门阵列类似的FPGA(Field Programmable Gate Array),它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围广等特点。这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。与门阵列等其它ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。

FPGA(现场可编程门阵列)与 CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,它们是在PAL,GAL等逻辑器件的基础之上发展起来的。同以往的PAL,GAL等相比较,FPGA的规模比较大,它可以替代几十甚至几千块通用IC芯片。这样的FPGA实际上就是一个子系统部件。这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。

尽管FPGA和其它类型PLD的结构各有其特点和长处,但概括起来,它们是由三大部分组成的:

一个二维的逻辑块阵列,构成了PLD器件的逻辑组成核心

输入/输出块

连线资源:由各种长度的连线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间、逻辑块与输入/输出块之间的连接。

FPGA芯片都是特殊的ASIC芯片,它们除了具有ASIC的特点之外,还具有以下几个优点:

(1)随着VLSI(Very Large Scale IC,超大规模集成电路)工艺的不断提高单一芯片内部可以容纳上百万个晶体管,FPGA芯片的规模也越来越大,其单片逻辑门数已达到上百万门,它所能实现的功能也越来越强,同时也可以实现系统集成。

(2)FPGA芯片在出厂之前都做过百分之百的测试,不需要设计人员承担投资的风险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片的最终功能设计。所以,FPGA的资金投入小,节省了许多潜在的花费。

(3)用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。

所以,用FPGA 试制样片,能以最快的速度占领市场。FPGA软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直至最后芯片的制作。当电路有少量改动时,更能显示出FPGA的优势。电路设计人员使用FPGA进行电路设计时,不需要具备专门的IC(集成电路)深层次的知识, FPGA软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。

1.2 VHDL语言介绍

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。

(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统设计,高速的完成必须有多人甚至多个开发组共同并行工作才能实现的工程。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。

2  多通道采样系统的组成

本系统硬件电路包括FPGA设计的多通道采样控制器和相应的通道选择电路,A/D转换电路,由于采样音频信号,所以需要设计音频的放大和滤波电路。系统组成部分如图2.1所示:




图2.1 多通道系统的组成

3 总体方案设计与论证

3.1 方案设计

3.1.1方案一

用FPGA实现一个3位8进制的计数器,记数脉冲是FPGA锁存AD转换数据的锁存信号,计数器的输出作为数据开关CD4051的地址。利用进程的并行操作来实现AD574来实现AD转换,这个方案的优点是节省了FPGA芯片的资源,但数字电路较为复杂,而且AD574的转换速率最高达到50KHz,不能达到8通道的高速音频采集。

3.1.2方案二

用FPGA实现一个3位8进制的计数器,记数脉冲是FPGA锁存AD转换数据的锁存信号,计数器的输出作为数据开关CD4051的地址。用有限状态机来实现对AD7892的控制,用外部RAM实现采样数据的存储,这样电路实现比较简单,而且AD7892的采样速率可以达到500KHz,可以实现8个通道同时8路音频信号采集。但需要外接RAM芯片,成本比较高,而且外部RAM的读写速度达不到高速数据采集的要求。

3.1.3方案三

用FPGA实现一个3位8进制的计数器,记数脉冲是FPGA锁存AD转换数据的锁存信号,计数器的输出作为数据开关CD4051的地址。用有限状态机来实现对AD7892的控制,这样电路实现比较简单,而且AD7892的采样速率可以达到500KHz,可以实现8个通道同时8路音频信号采集。同时采用FIFO模块,让数字数据先存到队列中,一边往队列中写数据,一边从队列中读数据,这样就对数字数据起了一个高速缓存的作用,更加快了整个系统的运行速度。

3.2 方案比较

为获得更佳的系统功能,使系统资源能得到充分地利用,我们采用第三种方案。主要是因为状态机容易构成性能良好的同步时序逻辑模块,为了消除电路中的毛刺现象,在状态机设计中有很多种设计方案可供选择。FIFO队列的读写操作只需要一个周期就可以完成,起到高速缓存的作用,这样更加快了整个系统的运行速度,解决了采样和存储的“瓶颈问题”,更加有效地利用FPGA芯片的资源。

4  单元电路的设计

由图2.1可以看出,系统可以分为4个大部分,分别是音频放大、滤波部分,FPGA控制部分,AD采样电路,FPGA硬件电路的设计。其中以FPGA控制部分为主体部分,它涉及到AD采样控制,通道选择控制,串并输出模式选择模块,延时模块以及FIFO模块介绍。这些模块的实现是系统实现的关键。下面分别对系统的这些单元电路做详细的阐述。

4.1 音频放大、滤波部分

人的耳朵可以辨别到的声音频率范围是:20Hz-20KHz,所以对音频放大部分的放大器有带宽要求,要求放大器是宽频带的。所以本次设计选用专门用于音频放大的高速低噪声运放NE5532作为放大部分的放大器。滤波部分是一个有源带通滤波器,滤掉电路的20Hz以下的低频和20KHz以上的高频干扰。

4.1.1音频放大部分

音源采用普通CD输出的音频信号,它产生输出的信号的幅度约有300mV左右,根据设计AD7892的输入电压是±10V,选择放大器的放大倍数在10-30之间,通过一个精密可调电阻来调节放大倍数。音频放大芯片NE5532特性是双运放、宽频带、低噪声、转换速率大、电源范围广。

NE5532的管脚结构及其功能:

(1脚)输出信号                  (2脚)反相端输入

   (3脚)同相端输入                (4脚)负电源

   (5脚)同相端输入                (6脚)反相端输入

   (7脚)输出信号                  (8脚)正电源

NE5532技术参数

    参数名称      单位      数据值

    输入失调电压   mV        ±0.5 

    温漂          μV/℃        5

    增益带宽积     MHz         10

    转换速率       V/us         9

    谐波失真        %         0.001

    工作电流        mA          8

工作电压        V         ±3-±22

设计中因为采用反相端输入音频信号,为了在输出端得到正向的音频信号,所以放大部分采用两级放大,前级放大10倍,后级放大通过可调电阻设计在1-3倍,这样得到的正向音频信号就方便了AD采样。

4.1.2有源滤波器的设计

在一个实际的电子系统中,输入信号往往因受干扰等原因而含有一些不必要的成份,应设法将干扰衰减到足够小的程度。在其他一些情况,我们需要的信号和干扰信号混在一起,如果这两个信号在频率成分上有较大的差别,就可以用滤波的方法将所需要的信号滤出。为了解决上述问题,可采用滤波电路。滤波器包括电抗性元件LC构成的无源滤波器、由集成运算放大器组成的有源滤波器、以及晶体滤波器等。本次设计需要的通带频率范围是20Hz-20KHz,如果用有源带通滤波器来实现,考虑到该带通滤波器的上下截止频率之比20000/20=1000,大于一个倍频程,为一个宽带滤波器,所以采用一个低通滤波器和一个高通滤波器级联来实现带通滤波。

(1)设计步骤

有源滤波器的设计,就是根据所给定的指标要求,确定滤波器的阶数n,选择具体的电路形式,算出电路中各元件的具体数值,安装电路和调试,使设计的滤波器满足指标要求,具体步骤如下:

根据阻带衰减速率要求,确定滤波器的阶数n

选择具体的电路形式。

根据电路的传递函数和附录中表1归一化滤波器传递函数的分母多项式,建立起系数的方程组。

解方程组求出电路中元件的具体数值。

将设计好的电路,在EWB上进行仿真。

按照所设计的电路,将元件安装在实验板上。

安装电路并进行调试,使电路的性能满足指标要求。

(2)对安装好的电路按以下方法进行调整和测试

① 仔细检查安装好的电路,确定元件与导线连接无误后,接通电源。

② 在电路的输入端输入Ui=10mv的正弦信号,慢慢改变输入信号的频率(注意保持Ui的值不变),用示波器观察波形的变化,在滤波器的截止频率附近,观察电路是否具有滤波特性,若没有滤波特性,应检查电路,找出故障原因并排除之。

③ 若电路具有滤波特性,可进一步进行调试。对于低通和高通滤波器应观测其截止频率是否满足设计要求,若不满足设计要求,应根据有关的公式,确定应调整哪一个元件才能使截止频率既能达到设计要求又不会对其它的指标参数产生影响。然后观测电压放大倍数是否满足设计要求,若达不到要求,应根据相关的公式调整有关的元件,使其达到设计要求。最后设计的有源带通滤波器在EWB上的仿真图如图4.1所示:

图4.1 有源带通滤波器的仿真图

有源带通滤波电路分成两个部分,高通部分和低通部分,图4.2是20HZ的高通滤波器,图4.3是20KHZ的低通滤波器。


图4.2 低通滤波器电路图


图4.3 高通滤波器电路图

音频信号经过音频放大电路放大后就进入了上图的电路。经过20HZ-20KHZ的带通滤波电路进行滤波。

4.2 AD采样电路

由于人的耳朵能识别的音频的频率范围是20Hz-20KHz,根据奈魁斯特(NYQUIST)采样定理知道,要使采样后的数字信号能恢复成模拟信号,采样的频率必须是模拟信号的频率的两倍,即本次采样系统的采样频率最低要设计在40KHz,而一般CD格式的音频信号的采样频率是44.1KHz,由于是8路通道的采样,所以AD芯片的最低采样频率应该是44.1KHz*8=352.8KHz,所以选择采样频率为500KHz的AD7892。这样我们每个通道的采样频率就是500KHz/8=62.5KHz。

4.2.1芯片介绍

AD7892是美国ANALOG DEVICE公司生产的具有采样保护功能的逐次逼近式12位高速ADC,根据输入模拟信号范围的不同可分为AD7892-1,AD7892-2,AD7892-3三种类型。其中,AD7892-1输入信号范围为±10V或者±5V(可设置),AD7892-2输入信号范围为0+2.5V,这两种的采样转换速率均为500kSPS,AD7892-3的输入信号范围为±2.5V,采样转换速率为600kSPS,AD7892-1和AD7892-3的输入信号过压保护电压分别为±17V和±7V。本次设计选用的是AD7892AN-1,因为其采样速率已符合8路的音频采集速率。

AD7892模数转换器具有如下特点:

单电源工作(+5V);

内含采样保持放大器

具有高速串、并行接口。

AD7892的内部框图如图4.5所示,它内含模拟信号换算电路、采样保持电路、A/D转换的基准电源(+2.5V)、时钟电路、12位逐次逼近式ADC电路和控制电路,转换的结果可以并行输出,也可以串行输出,非常容易和微处理器或DSP(数字信号处理器)接口。AD7892共有两种封装,一种是24脚双列直插式DIP封装,另一种为贴面式SOIC封装,AD7892的引脚排列如图4.4所示。各引脚的功能说明如表4.1所列

  

图4.4 AD7892引脚排列图 

         

图4.5 AD7892功能框图

表4.1 AD7892的管脚名称及功能说明

(1) AD7892的并行输出时序

当MODE脚接高电平时,AD7892为并行输出方式,其时序如图4.6所示。CONVST信号t1应大于35ns,在上升沿,采样保护器进入保持状态,并开始A/D转换,转换时间tCONV为1.47μs(AD7892-3)或1.6μs(AD7892-1,AD7892-2),转换结束后EOC脚输出t2=60ns的负脉冲以进行中断或数据锁存,并在EOC下降沿开始下次采样,也就是转换一结束就开始下次采样,采样时间tACQ要大于等于200ns(AD7892-3)或400ns(AD7892-1,AD7892-2),当转换结束后(EOC的下降沿),只要CS和RD有效,经过t6=40ns的时间,即可在DB0DB11上获得转换后的12位数据,CS和一般片选信号相同,可一直有效,外加RD的时间t5亦应大于35ns。下次采样和本次的输出可同时进行,所以最小的一次采样转换输出时间对于AD7892-3来说为1.47+0.2=1.67μs(600kSPS),而对于AD7892-1和AD7892-2来说为1.6+0.4=2μs (即500kSPS),图6中t9=

200ns,t7=5ns,t3、t4、t8可为零(此时t9=tACQ)。


图4.6 AD7892的并行输出时序

(2) 转换后的二进制代码

由于三种类型的模拟输入范围不同,因而其转换输出的二进代码码也不同,表3所列为AD7892-1和AD7892-3的输入输出代码

表4.2 AD7892-1,AD7892-3理想的输入输出表

对于AD7892-1和AD7892-3,FSR为满度范围,如输入为±10V,则FSR=20V,输入为±5V,FSR=10V,输入为±2.5V,FSR=5V.模拟信号从-FSR/2→GND→+FSR/2变化,输出则从100…000→111…111→000…000→011…111变化。而对于AD7892-2,在输入从0→+2.5V变化时,输出则从全0→全1。

4.2.2芯片应用

4.7所示为AD7892应用于采样系统。目的是把音频输入模拟信号转换为12位数字信号,该电路采用的是AD7892AN-1的并行输出模式,其采集速度设计为500kSPS。

在此应用中,将IN2接到AGND,IN1接音频输入信号,其输入范围为±10V,音频信号经过放大、滤波和AD7892的输出信号为100…000~111…111,即从2048→4095,在D11反相后,在状态机的第5个状态锁存器锁存的数据为000…000→011…111,即从0→2047。由P/S选择相应的输出模式输出。

图4.7 AD7892采样系统

    电路中的CONV,EOC,CS,RD控制信号均由有限状态机提供,D[0]到D[11]数字信号是经过AD采样后的数字信号。

4.3 FPGA控制部分

4.3.1通道选择模块

通道选择部分是一个二进制模8的计数器,计数器的时钟是AD数字信号的锁存信号,每次锁存数据后,计数器就会一次进行加一操作,CD4051选择下一个通道的音频信号进行采集。在MAX+PlusⅡ中用VHDL语言设计图形如下图4.8所示:


图4.8 通道选择部分

通过CNT[0]到CNT[2]来选择相应的通道,CD4051的输出就是最后要进行AD采样的音频信号。例如:若CNT[0]CNT[1]CNT[2]=“000”,则选择第一通道音频信号进行AD采样。这个部分实现的重点是对数字锁存信号记数,计数器的输出作为CD4051的通道选择地址。

通道选择部分的主体程序如下:

二进制模8计数器

signal q:std_logic_vector(2 downto 0);

 begin

 counter:process(clk)

   begin

      if(clk'event and clk='1') then

         if q="111" then

            q<="000";

         else

            q<=q+1;

      end if;

end if;

cnt<=q;         

process;


通道选择模块的仿真图如图4.9所示:

图4.9 通道模块仿真图

4.3.2AD7892控制部分

这个部分的主要工作是对AD7892的控制,使得AD7892可以工作。对AD7892的控制部分主要是通过一个有限状态机来实现的,通过对AD7892的工作时序观察,用有限状态机对AD的控制信号做出描述,从而让AD芯片能工作起来,这就是有限状态机的主题任务,当然还有一些其他的功能,将在后序的部分介绍,这里先对有限状态机作个阐述。

(1)有限状态机的介绍

AD采样的控制部分主要是设计一个有限状态机来实现,利用VHDL设计的使用逻辑系统中,有许多是可以利用有限状态机的设计方案来描述和实现的,无论与基于VHDL的其他设计方案相比,还是与完成相似功能的CPU相比,状态机都有其难以超越的优越性,它主要表现在以下几个方面:

有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的工作方式是根据控制信号按照预先设定的状态进行顺序运行的,状态机是纯硬件数字系统中的顺序控制电路,因此状态机在其运行方式上类似于控制灵活和方便的CPU,而在运行速度和工作可靠方面都优于CPU。

由于状态机的结果模式相对简单,设计方案相对固定,特别是可以定义符号化枚举类型的状态,这一切都为VHDL综合器尽可能发挥其强大的优化功能提供了有利条件。而且,性能良好的综合器都具备许多可控或自动的专门用于优化状态机的功能。

状态机容易构成性能良好的同步时序逻辑模块,这对于对付大规模逻辑电路设计中令人深感棘手的竞争冒险现象无疑是一个上佳的选择。为了消除电路中的毛刺现象,在状态机设计中有很多种设计方案可供选择。

与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、程序层次分明,结构清晰,易懂易读;在排错、修改和模块移植方面也有其独特的特点。

在高速运算和控制方面,状态机就更有其巨大的优势。由于在VHDL中,一个状态机可以由多个进程构成,一个结构体可以包括多个状态机,而一个单独的状态机(或多个并行进程的状态机)以顺序方式所能完成的运算和控制方面的工作与一个CPU的功能类似。因此,一个设计实体的功能便类似于一个含有并行运行的CPU的高性能微处理器的功能。事实上,多CPU的微处理早已在通信、工控和军事等领域有了十分广泛的应用。

就可靠性而言,状态机的优势也是十分明显的。CPU本身的结构特点与执行软件指令的工作方式决定了任何CPU都不可能获得圆满的容错保障,这已是不争的事实了。因此,用于要求高可靠性的特殊环境中的电子系统中,如果以CPU作为主控部件,应是一项错误的决策。然而,在状态机系统就不同了,首先它是由纯硬件电路构成,不存在CPU运行软件过程中固有的缺陷;其次是由于状态机的设计中能使用各种完整的容错技术;再次是当状态机进入非法状态并从中跳出,进入正常状态所耗的时间十分短暂,通常只有2、3个时钟周期,约十个ns,尚不足对系统的运行构成损害;而CPU通过复位方式从非法运行方式中恢复过来,耗时达到十ms,这对于高速高可靠系统显然是无法容忍,特别是本次设计的采集音频信号,十ms的就会丢失很多的模拟数据,这样就会让音频信号的不完整,所以采用有限状态机是一个很好的选择。

(2)有限状态机的设计

根据AD7892的时序图设计的状态转换图如图4.10所示:


图4.10  AD采样的状态转移图

(由于FPGA芯片时钟定在20MHZ,故一个周期是0.05us,完成一次AD采样,AD7982AN-1大约需要2us,40个时钟周期)

ST1:对AD7892的初始化,此时conv<='1'cs<='1'rd<='1';lock<='0'wr_en='0'rd_en='0'

ST2:启动AD7892输入端,使采样保持器保持开始转换,此时conv<='0'cs<='1'rd<='1'lock<='0'wr_en='0'rd_en='0'

ST3:开始进行模数转换,此时conv<='1'cs<='1'rd<='1'lock<='0'wr_en='0'rd_en='0'

ST4:采样周期等待,等待EOC跳变低电平,此时conv<='1'cs<='1'rd<='1'lock<='0'wr_en='0'rd_en='0'

ST5:判断EOC是否跳变高电平,若跳变,则开始读数据,此时conv<='1'cs<='1'rd<='1'lock<='0'wr_en='0'rd_en='0'

ST6:锁存信号有效,锁存转换后的数据到12位并行输出口,FIFO的写信号有效,此时conv<='1'cs<='0'rd<='0'lock<='1'wr_en='1'rd_en='0'

ST7:从FIFO中读出写入的数据,此时conv<='1'cs<='1'rd<='1'lock<='0'wr_en='0'rd_en='1'

ST8:等待状态,准备下次的采样,此时conv<='1'cs<='1'rd<='1'lock<='0'wr_en='0'rd_en='0'

程序的主体如下:

com1:process(current_state,eoc)

   begin

      case current_state is

           when st1 => next_state <= st2;

         when st2 => next_state <= st3;

          when st3 => next_state <= st4;

           

           when st4 => if (eoc='1') then next_state <= st4;

                   else next_state <= st5;

                       end if;

           when st5 => if (eoc='0') then next_state <= st5;

                        else next_state <=st6;

                       end if;

           when st6 => next_state <= st7;

           when st7 => next_state <= st8;

           when st8 => next_state <= st1;

           when others => next_state<=st1;

           end case;

     end process com1;

com2:process(current_state)

     begin

      case current_state is

           when st1 => conv<='1'cs<='1'rd<='1'lock<='0'wr_en<='0'rd_en<='0'

           when st2 => conv<='0'cs<='1'rd<='1'lock<='0'wr_en<='0'rd_en<='0'

           when st3 => conv<='1'cs<='1'rd<='1'lock<='0'wr_en<='0'rd_en<='0'

           when st4 => conv<='1'cs<='1'rd<='1'lock<='0'wr_en<='0'rd_en<='0'

           when st5 => conv<='1'cs<='1'rd<='1'lock<='0' wr_en<='0'rd_en<='0'

       when st6 => conv<='1'cs<='0'rd<='0'lock<='1' wr_en<='1'rd_en<='0'

           when st7 => conv<='1'cs<='1'rd<='1'lock<='0' wr_en<='0'rd_en<='1'

           when st8 => conv<='1'cs<='1'rd<='1'lock<='0'wr_en<='0'rd_en<='0'

           when others => conv<='1'cs<='1'rd<='1'lock<='0'wr_en<='0'rd_en<='0';

      end case;

     end process com2;

com3:process(clk)

variable dog_count:integer range 0 to 64;

variable com3_num_count:integer range 0 to 16553500;

     begin

      if(clk'event and clk='1') then

      current_state<=next_state;

      --看门狗

      if(current_state=st4) then

      m_watchdog <= s0;

       end if;

       if(current_state=st6) then

      m_watchdog <= s1;

      dog_count:=0;

       end if;      

   if(m_watchdog=s0) then

       dog_count:=dog_count+1;

     if(dog_count>40) then

        current_state<=st1;

        dog_count:=0;

     end if;

   end if;

      --看门狗

      end if;

    end process com3;

latch1:process(lock)

        begin

         if lock='1' and lock'event then regl1<=D;

         end if; 

       end process latch1;

regl<='0'&b2&b1&b0®l1;

Q<=regl1;

由程序三个主控进程可以知道,此状态机属于Moore机,外加一个辅助进程,即锁存器进程LATCH1,层次清晰,各进程分工明确。在一个完整的采样周期中,状态机中最先被启动的是以CLK为敏感信号的时序进程,接着两个组合进程COM1和COM2被同时启动,因为他们以同一信号current_state为敏感信号。最后被启动的是锁存进程,它是在状态机进入ST6后被启动的,即此时LOCK产生了一个上升沿信号,从而启动进程LATCH1,将AD7892在本次采样周期的12位数据和通道选择的3位数据锁存到寄存器中,同时FIFO存储器从Q端读到稳定正确的数据,进入下一个状态后FIFO又把数据读出到q端,这样一个采样周期就完成。在MAX PlusⅡ仿真的波形如下图4.11所示:

图4.11 AD采样控制仿真波形

从仿真波形可以看出, 控制信号符合AD7892的时序,可以对AD进行采样控制,同时数据的锁存信号也符合题目设计要求。但从仿真图中可以看到,这些信号都很多毛刺,由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间,这对整个系统的影响不会很大,所以就没有对这些毛刺进行处理。

4.3.3延时模块的设计

在采样控制部分的状态机中也加入了输出数据编码部分,因为是循环采集8路的模拟信号,而输出为一路输出,这样就需要对输出信号进行标志,方法就是把12位数据转换为16位数据,第一位是0,第二位到第四位是标志位,标志是哪一通道数字信号,如果是串行输出的时候可以让接受方知道是第几通道的数据。又因为数字信号数据锁存信号是比通道选择信号早一个周期,所以要加一个延时模块,这样就可以实现每次锁存了通道的标志位和采样的数据。通过程序来实现对通道选择信号的延时。如果当前选择第3个通道采样,那么通道选择信号就是“011”,在这个通道信号采集完毕后锁存信号就会使计数器进行加1操作,这样通道选择信号就是“100”,而这个时候锁存的数据需要“011”,所以将标志位信号通过“100”的延时一个时钟周期变成“011”即可。VHDL完成可以胜任。

延时模块程序主体部分

process(in1,in2,in3)

begin

comin<=in3&in2&in1;

case comin is

          when "000"=> comout<="111";

          when "001"=> comout<="000";

          when "010"=> comout<="001";

          when "011"=> comout<="010";

          when "100"=> comout<="011";

          when "101"=> comout<="100";

          when "110"=> comout<="101";

          when "111"=> comout<="110";

          when others=>comout<="ZZZ";

        end case;

out1<=comout(0);out2<=comout(1);out3<=comout(2);

  end process;

4.3.4串并输出选择控制

从AD控制模块输出的数据是并行16位数据。串行输出的原理是:通过一个16选1的数据选择器连续选择输出的并行16位数据,数据选择器的选择信号是一个对系统时钟记数的二进制模16的计数器输出,这样就可以实现将并行16位数据转换为串行数据。通过外部输入信号P/S可以实现是串行输出还是并行输出,如果P/S是低电平,就选通16选1的选择器,禁止16个与门的输出,此时为串行输出;如果P/S为高电平,则禁止16选1的选择器,同时打开16个与门,此时为并行16位输出。输出模式可选择性使得系统的应用相当广泛,串行输出可以用于通信信号的采集,方便调制后发射到远程接受端,远程接收端对采集的数据进行解调;而并行输出模式则可以通过高速存储器将采集的信号放到微机或者其他的处理器上,根据采集的数据进行相应的控制。

4.3.5 FIFO模块

本设计项目是利用FPGA直接控制AD7892来实现对音频信号的高速信号采集,在完成对一个周期的采样后,将数据存储到存储器中,然后从存储器中读出数据并显示出来,采样存储器可以有多种方式实现:

(1)外部随机存储器RAM,其优点是存储量大,缺点是需要外接芯片,且常用的RAM读写速度较低;与FPGA间的连接线过长;特别是在存储数据时需要对地址进行加一操作,影响读写速度。

(2)内部随机存储器RAM,在Altera的大部分FPGA器件中都含有EAB模块,由此可配置成不同类型的内部高速RAM。与外部RAM相比,尽管内部RAM有更大的优势,但使用中仍然存在需要对地址加一的操作,而影响数据读写速度的缺点。

(3)内部FIFO,相比之下,FIFO更适合与用做高速AD采样的数据存储器,因为FIFO的写入时间只有一个时钟周期,因此决定使用LPM_FIFO作为采样存储器。

由计算公式:数据量(字节) =(采样频率×量化精度×声道数)/8×时间(秒)以及本次设计的采样频率为62.5KHz,量化精度为12位,声道是单声道,可以计算出一分种采样所需要的存储空间是5625000个字节,而FPGA芯片的内部RAM最多只有49152位(每个EAB有4096位),不足以存储一分种需要的存储容量,所以我们选择FIFO作为暂存器,设计FIFO的容量是512×16=8192位,每次锁存数字数据后,状态机在下一个状态(状态6)进入写指令,将锁存的数据写入FIFO队列中,由于FIFO的读写操作都只需要一个时钟周期,所以在状态机再下一个状态(状态7)进入读操作,从FIFO队列中读出数据,将数据送到输出端口,其实FIFO队列只需要16位的存储容量就足够了,但设计让整个EAB块都用来储存,这也是为了存储中有多余空间。采用FIFO队列就不需要存储容量为5626000个字节的存储器了,更有效得利用了FPGA芯片资源。

如果采样先将256个数据存到FIFO队列中,由于从FIFO队列中读数据只需要一个时钟,而在串行输出的模式下,在进行串并转换的时候,需要最少16个时钟周期,而FIFO端口的数据只出现一个周期就会发生改变,这样就体现出FIFO的高速特性,而在一个AD采样周期中完成一次串并转换时间是足够的。

本次设计是通过调用MAX+PlusⅡ的参数可设置LPM兆功能块来实现FIFO队列的。LPM是参数可设置模块库的英文缩写(Library of Parameterized Modules),这些可以以图形或硬件描述语言模块形式方便调用的兆功能块,使得基于EDA技术的电子设计的效率和可靠性有了很大的提高。设计者可以根据实际电路的设计需要,选择LPM库中的适当模块,并为其设定适当的参数,就能满足自己的设计需要。从而在自己的项目中十分方便调用了优秀电子工程技术人员的硬件设计成果。在MAX+PlusⅡ中,进入LPM元件定制器界面,按照电路需要设计各个参数,最后完成FIFO的设计,通过调用生成的图形来调用FIFO队列模块。

4.3.6AD采样系统顶层电路设计

通道选择模块、AD采样控制模块、延时模块、串并输出控制模块以及FIFO模块设计完毕以后,我们就可以将设计的各个模块连接起来,可以得到整个系统的顶层电路。顶层电路见附录。

4.4 FPGA的硬件设计

本次毕业设计选用的FPGA芯片是ALTERA公司的ACEX1K系列的EP1K30TC144-3。由于它的高密度和易于在设计中实现复杂宏函数和存储器,因此可以把一个子系统集成在单一芯片上,EP1K30包括一个嵌入式阵列,这为设计人员提供了有效的嵌入式门阵列和灵活的可编程逻辑。嵌入式阵列是由一系列嵌入式阵列块(EAB)组成的,它能够用来实现各种存储器和复杂逻辑功能;该器件也提供多电压I/O接口操作。它允许器件桥架在不同电压工作的系统中。比如本次系统设计器件的I/O输出就是2.5V,这样不但使FPGA芯片工作安全,也可以让AD7892能工作安全状态。

4.4.1EP1K30TC144-3芯片介绍

EP1K30TC144-3芯片特性:

有30000个典型门,最大的系统门可达119000个;

1728个逻辑单元(LE);

6个嵌入式阵列块(EAB);

具有实现宏函数的嵌入式阵列和普通功能的逻辑器件;

高达49152位的内部RAM(每个EAB有4096位),使得RAM并不影响或减少其他逻辑功能;

支持多电压I/O接口,低功耗(维持状态小于0.5mA);

器件可在2.5V和3.3V电源电压下工作;

多种系统配置方式;

时钟锁定和时钟自举选项有助于减少时钟延迟/变形和对时钟进行倍频;

快速、可预测连线延时的快速通道(Fast Track)连续式布线结构;

实现快速加法器、计数器和比较器的专用进位链;

每个引脚都有一个独立的三态输出使能控制;

每个引脚都有漏极开路选择;

具有快速建立时间的寄存器;

提供多种其他EDA产品的设计文件输出;

4.4.2芯片组成描述

ACEX1K系列的EP1K30主要有嵌入式阵列块,逻辑阵列块,Fast Track和I/O单元四部分组成。

(1)嵌入式阵列

嵌入式阵列是由一系列嵌入式阵列块(EAB)构成的。当要实现有关存储器功能时,每个EAB提供2048位用来构造RAM,ROM,FIFO或者双口RAM等功能。当EAB用来实现乘法器、微控制器、状态机以及DSP等复杂逻辑时,每个EAB可贡献出100-600个门。EAB可以单独使用,也可以组合起来使用。

  (2)逻辑阵列

逻辑阵列是由一系列逻辑阵列块(LAB)构成的,每个LAB包括8个LE和一些连接线,每个LE含有一个4输入查找表(LUT)、一个可编程触发器、进位链和级联链、LE的结构能有效实现各种逻辑。每个LAB是一个独立的结构,它具有共同的输入,互连与控制信号,LAB的这种“粗粒度”结构有利于布线和实现器件的高性能,例如8位计数器、地址译码器或者状态机。多个LAB组合起来也可以构成更大的逻辑块,每个LAB代表大约96个可用逻辑门。

 3快速通道Fast Track

器件内部信号的互连和器件引脚之间的信号互连是由快速通道连线提供的,它是贯通器件长、宽的快速连续通道。

 (4) I/O单元

EP1K30器件的I/O引脚是有一些I/O单元(IOE)驱动的,IOE位于快速通道的行和列的末端,每个IOE有一个双向I/O缓冲器和一个既可作输入寄存器也可作输出寄存器的触发器。当IOE作为专用时钟引脚时,这些寄存器提供了特殊的性能。当它作为输入时,可提供少于4.2ns的建立时间和0ns的保持时间;而作为输出时,这些寄存器可提供少于5.7ns的“时钟到输出”的时间。

EP1K30还提供了6个专用输入引脚,这些引脚用来驱动触发器的控制端,以确保控制信号高速、低偏移(1.2ns)地有效分配。这些信号使用了专用的布线支路,以便具有比快速通道更短的延时和更小的偏移。专用输入中的4个输入引脚可用来驱动全局信号,这4个全局信号也能由内部逻辑驱动,它为时钟分配或产生用以清除器件内部多个寄存器的异步清除信号提供了一个理想的方法。

4.4.3芯片工作电压设计

由于芯片对工作电压有很高的要求,所以选择三端稳压器LM317,LM317是美国国家半导体公司的三端可调稳压器集成电路,它的使用非常简单,仅需要两个外接电阻来设置输出电压。此外它的线性调整率和负载调整率也比标准的固定稳压器要好,它还内置有过载保护、安全区保护和多种保护电路。由于设计FPGA芯片的I/O口的引脚电压设为2.5V,所以把LM317的电压设计为2.5V为整个FPGA芯片提供工作电压。LM317的典型应用电路如图4.12所示:

图4.12 三端稳压器LM317的典型应用

下面对三端稳压器LM317的特性做简单的介绍。

保证1%的输出电压误差;

保证最大0.01%的线性调整率;

保证0.1%的负载调整率;

保证1.5A的输出电流;

可调整电压输出最低1.2V,最高可以调到37V;

输出短路保护,过流、过热保护;

80db的纹波抑制;

标准三端晶体管封装;

三端稳压器LM317在输出和稳压器的末端提供一个内部参考电压1.25V,这样就可以过两个电阻的比例关系来决定的输出的电压,输出电压和参考电压的关系如下式


器件设计Iadj的最大值为100mA,这个值是不随负载的变化而变化的,所以通常Iadj*R2可以忽略的。

由于本设计需要2.5V的稳定电压,而Vref是1.25V,所以R2/R1=1,让R2=R1=240。即可达到输出2.5V的电压。


4.4.4芯片配置介绍

目前常见的大规模可编程逻辑器件的编程工艺有三种

① 基于电可擦除存储单元的EEPROM或FLASH技术,CPLD一般使用此技术进行编程。CPLD被编程后改变了电可擦除存储单元的信息,掉电后可保持。

② 基于SRAM查找表的编程单元,对该类器件,编程信息是保持在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。因此该类器件的编程一般称为配置,大部分FPGA采用该种编程工艺。

③ 基于反熔断丝编程单元。Actel的FPGA;Xilinx部分早期的FPGA采用此种结构,现在Xilinx已不采用。反熔断技术编程方法是一次性可编程性。

相比之下,电可擦除编程工艺的优点是编程后信息不会因掉电而丢失,但编程次数有限,编程的速度不快。对于SRAM型的FPGA来说,配置次数为无限,在加电时可随时更改逻辑,但掉电后芯片中的信息即丢失,每次上电时必须重新载入信息,下载信息的保密性不如前者。

FPGA配置可以用专门的编程设备,也可以使用下载电缆。如Altera的ByteBlaster(MV)并行下载电缆,连接PC机的并行打印口和需要编程或配置的器件。并与MAX PlusⅡ配合可以对Altera 公司的多种CPLD、FPGA进行编程或编程。由于实验台上有一个FPGA的配置端口,所以在本次毕业设计中选用ByteBlaster(MV)配置方法。ByteBlaster(MV)下载电缆与Altera器件的接口一般都是10芯的,引脚对应关系如下表4.3所示,FPGA上配置引脚功能说明如表4.4所示。

编程配置电路的设计图入图4.13所示:


图4.13 编程配置电路图

Altera的SRAM  LUT结构的器件中,FPGA可使用6中配置模式,这些模式通过FPGA上的两个模式选择引脚MSEL1和MSEL0上设定的电平来决定;

1.配置器件,如用EPC器件进行配置;

2.PS(Passive Serial 被动串行)模式:MSEL1=0,MSEL0=0;

3.PPS(Passive Parallel Synchronous 被动并行同步)模式:MSEL1=1,MSEL0=0;

4.PPA(Passive Parallel Asynchronous 被动并行异步)模式:MSEL1=1,MSEL0=1;

5.PSA(Passive Serial Asynchronous 被动串行异步)模式:MSEL1=1,MSEL0=0;

6.JTAG模式:MESL1=0,MESL0=0;

这6种配置模式中,PS模式可以利用PC机通过ByteBlaster(MV)下载电缆Altera器件应用ICR(电路可重配置)。在本次毕业设计中,选用第二种配置模式,即被动串行模式,配置时序如图4.14所示:


图4.14 PS配置时序图

由时序图可用看出PS配置工作过程:当nCONFIG产生下降沿脉冲时启动配置过程,在DCLK上升沿,将数据移入目标芯片。在配置过程中,系统需要实时监测,一旦出现错误,nSTATUS将被拉低,系统识别到这个信号后,立即重新启动配置过程。配置数据全部正确地移入目标芯片内部后,CONF_DONE信号跳变为高,此后,DCLK必须提供几个周期的时钟(具体周期数与DCLK的频率有关),确保目标芯片被正确初始化,进入用户工作模式。由时序图可以看出,在芯片配置之前和配置之后,nCONFIG,nSTATUS,CONF_DONE都是高电平,所以需要注意的是在配置电路的设计中需要在每个配置引脚上都需要加一个上拉电阻。

4.4.5电路设计注意事项

本次设计采用的EP1K30TC144-3是贴片式的封装,引脚共有144个,所以对电路的设计有很大的要求,在设计电路中遇到很多麻烦,比如开始设计想通过布双面板,但Protel的双面板布线是以工业制板作为标准的,在自动布线的时候,在芯片中间设计了许多过孔,这在手工制板中是很难实现的,所以采用手动布线来实现电路,把要用到的引脚通过插针引出来,这样就可以拓宽布线的空间,使得可以用单面板来实现FPGA硬件电路,这次布线的不足之处是在电源和地线上没有处理好,本来可以把地线布在芯片里面,而把电源放到外面,而我把电源和地都放在外面,这样就有很多跳线,让电路板很不美观。

本次设计中的外部时钟采用有源晶振,因为有源晶振可以提供稳定时钟增强线路板抗干扰性能,所以选用20M的有源晶振,在布线的过程中,有源晶振离FPGA芯片距离尽量小一点,这样是为了防止走线过长,导致电路干扰太大。

在对FPGA芯片没有用到的引脚的处理要特别注意,因为有些引脚在不使用状态下是应该接地的。这一点要特别注意。比如此芯片上的CEn(106脚)是应该接地。

4.4.6硬件电路设计技巧

本次设计中采用的FPGA芯片由于有144个引脚,所以对电路的设计有很高的要求,如果是工业制板,那也就没什么问题,用Protel的自动布线就可以画出电路PCB图了,但如果是手工制板,那就在布线和I/O口的使用有很大的要求,特别是在本设计中,输入信号和输出信号都比较多,在I/O的使用上就应该把相同类型的数据信号引脚尽量锁定在一起,这样就方便制板。还有对地线的处理也很重要,因为在芯片的周围都有电源和地线,这些都是芯片已定好的,不能更改的。技巧就是把地线全部放中间,然后把中间的地线拉出来,和芯片外面的地连在一起。

5  软件介绍

在实验中主要使用了MAX+PlusⅡ、EWB、以及Protel99se三种软件,其中,Max PlusⅡ主要完成对FPGA芯片的编程,仿真,芯片引脚锁定以及编程在线配置等操作,EWB主要用于对放大、滤波电路作分析与设计,并以分析为主,尤其是EWB能提供一个虚拟的实验室,可以对电路和系统进行十分逼真的模拟;Protel99se则是整个电路设计PCB的重要工具。现分别对这三种软件进行介绍,其中重点介绍使用MAX+PlusⅡ的常用基本设计方法。

5.1 MAX+PlusⅡ

   MAX+PlusⅡ是Altera提供的FPGA/CPLD开发集成环境,Altera是世界最大可编程逻辑器件供应商之一。MAX+PlusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件,在MAX+PlusⅡ上可以完成FPGA/CPLD的设计所有流程,包括设计输入、综合、适配、时序仿真与功能仿真和编程下载,使设计者能方便地进行设计输入、快速处理和器件编程。常用设计输入方法有图形设计输入,文本编辑输入,波形输入方式和混合输入方式。利用MAX+PlusⅡ进行设计的一般流程如图5.1所示:

图5.1 MAX+PlusⅡ一般设计流程

5.2 Electronics Workbench(EWB)

Electronics Workbench(简称EWB就是一个虚拟电子实验室,只是这个实验室装入了电脑。Electronics Workbench之所以很快被广大电路设计工作者所接受,首先它真的就像一个电子实验室,提供了模拟和数字电路的虚拟实验环境,具有和真实的实验室一致的元器件库和仪器仪表;其次,EWB提供交互式的SPICE电路模拟,使用人机图形界面真实、方便、快捷;EWB具有完整的模拟混合和数字信号模拟功能,可以任意地在系统中集成数字和模拟元件,会自动地进行信号转换。总之,EWB作为EDA软件,功能强大,可视化界面清晰,且易学易用。

5.3 Protel99SE

Protel 99SE采用数据库的管理方式。Protel 99SE软件沿袭了Protel以前版本方便易学的特点,内部界面与Protel 99大体相同,新增加了一些功能模块,功能更加强大。新增的层堆栈管理功能,可以设计32个信号层,16个地电层,16个机械层。新增的3D功能让您在加工印制版之前可以看到板的三维效果。增强的打印功能,使您可以轻松修改打印设置控制打印结果。其主要组成部分有:

原理图设计系统(Design system of schematic diagram),原理图设计系统用于原理图设计的Advanced Schematic系统。

印制电路板设计系统(Design system of printing circuit board),印制电路板设计系统是用于电路设计的Advanced PCB系统。

信号模拟仿真系统(Simulation system of signal imitation),信号模拟仿真系统是在原理图上进行信号模拟仿真的 SPICE系统。

可编程逻辑设计系统(Programmable logical design system,可编程逻辑设计系统是基于CUPL的集成于原理图设计系统中PLD设计系统。

6  整机调试

6.1硬件电路的调试步骤

在硬件电路中用到了音频放大、滤波电路,电源稳压电路,AD采样电路,FPGA控制等主要部分,由于电路连线较多而且复杂,采用的方法是分块调试,这样比较容易发现问题和解决问题。这种硬件调试方法在实际应用是比较普遍的。

在进行硬件调试之前,首先要检查电路板,看看电路板上的线路是否有短路、虚焊或者是断路的情况,如果有则要修正它,如果没有就可以进行各个模块的调试。

6.1.1音频放大部分调试

对音频放大部分调试需要一个函数信号发生源,一个示波器,一个万用表和提供放大器电源的直流稳压电源。首先,给NE5532加上+12V的电源,使之工作起来,用万用表检查NE5532除了正负电源引脚的电压,电压接近为零,这表明放大器正常工作,在输入端输入频率为1KHz,幅度为300mV的正弦波,用示波器观察输出端的波形,可以看到输出幅度为5.3V的正弦波,正弦波中包含了很多高频干扰,这是由于周围的干扰在放大器的放大作用,使得干扰成为一个明显波形出现在示波器上,通过滤波器后可以滤掉这些干扰。调节可调电阻,可以观察到输出波形的幅度变化。接上音源,可以看到示波器有不规则波形输出,增大音源的音量可以看到输出波形的幅度也随之增大,只是这不规则波形中混有很多的干扰,通过滤波器后可以滤掉这些干扰。这表明音频放大部分工作正常,达到设计要求。

6.1.2滤波部分调试

对滤波部分调试需要一个函数信号发生源,一个示波器,一个万用表和提供放大器电源的直流稳压电源。首先,给LM324加上+12V的电源,使之工作起来,用万用表检查LM324除了正负电源引脚的电压,电压接近为零,这表明滤波器的放大器正常工作。输入1KHZ,300mv的正弦波信号,经过音频放大电路放大后得到的1KHZ,5.3V的正弦波信号从输入点进入滤波电路。调试过程中发现示波器中的波形一直有一定高频和低频的干扰,检查电路没有错误,最后判断是电源的干扰,在电源输入端加上一个大电容和一个小电容分别滤掉电源的高频干扰和低频干扰,再调试可以看到完整的正弦波波形。减少输入信号的频率到10HZ,可以看到当频率减到20HZ的时候,输出信号的幅度逐渐变小,这表明高通滤波部分已实现其功能,滤掉小于20HZ的低频干扰;然后慢慢增加输入信号的频率到30KZ左右,可以看当频率大于18KHZ的时候,输出信号的幅度开始减小,达到20KHZ,输出信号幅度衰减到通带内的幅度的75%,大于20KZ后,输出幅度小于通带内幅度一半,达到衰减的目的,这表明低通滤波器也实现了其功能。整个滤波器部分调试完毕,达到设计要求。

6.1.3LM317稳压块调试

在调试LM317的输出电压的时候遇到这样一个问题,本来LM317是稳压块,它的输出电压是不应该随输入电压的改变而改变的,而当改变输入电压的时候,输出电压有很大的变化,这样对FPGA芯片很危险,如果电源电压突然变高,FPGA的VCCINT引脚无法承受这个电压就会烧掉整块FPGA芯片。在后面的毕业设计中发现,在用LM317的时候,最好不要用可调电阻,虽然是精密的可调电阻,它的阻值随温度的变化是很大的,当外部电压升高,通过可调电阻的电流就越大,就会让电阻的温度升高。这样LM317的输出电压随温度的变化而变化,所以换下可调电阻,用一个固定240代替它,这样就解决输出电压随外部电压的变化而变化的问题。

6.1.4FPGA硬件电路调试

这部分调试是整个调试的主体,包括对有源晶振的调试,配置电路的调试。MAX+PlusⅡ中写一个小程序,选择器件和锁定引脚后,用ByteBlaster(MV)下载电缆连接PC机上的打印并行口和硬件电路板上的下载口,在配置即将结束的时候弹出配置失败,读静态存储器失败,检查硬件和FPGA的配置时序图知道,在配置结束的时候,芯片的第二个引脚CONFING_DONE会跳回高电平,而硬件上的一直是低电平,经过了解,是应该在引脚上加一个1K的上拉电阻,这样在配置结束后就会变成高电平。加上拉电阻后还是出现同样的问题,查阅相关资料后知道,芯片的CEn引脚是应该接地的, PS配置模式下,FPGA芯片的MSEL0,MSEL1引脚是应该接地,改过电路后,再进行配置,用示波器检查配置时候的5个引脚的波形符合配置时序图。这样就解决了芯片无法配置的错误。接着是检查外部时钟产生电路,由于采用的是有源晶振,所以必须把2.5V电源接入FPGA模块上,让有源晶振工作起来,把有源晶振的输出端连接到示波器上,由于采用的20M的有源晶振,在用示波器观察波形的时候要选用100MHZ示波器,而且要把输入信号衰减后才可以进入示波器,否则无法看不到准确的时钟波形。通过示波器,可用看到有源晶振已经起振。

6.1.5AD采样模块调试

将实现AD采样的状态机程序单独写成一个文件,选择器件和锁定引脚后,配置到FPGA芯片中,模拟信号采用+5V电源,在调试过程中,发现AD采样在工作若干次后,就会出现“死机”现象,分析知道,在采样过程中会出现控制AD开始采样的CONV信号丢失现象,导致AD无限期等待采样开始信号CONV,而状态机又无限期等待采样结束信号EOC,这样就使得状态机进入“死机”状态。解决的方法是加入一段“看门狗”程序,当状态机进入死机状态后,用一个变量判断状态机是否等待超过一个采样周期,如果超过,就复位状态机,使状态机重新进入开始状态。这样就可以解决状态机的“死机”现象了。加入“看门狗”程序后,通过示波器可以看到12位数据的任何一位的电平信号。这样AD采样部分就调试完毕。

6.2 联机调试

联机调试需要实验工具有:示波器,稳压电源,EDA实验台,PC机,ByteBlaster(MV)下载电缆。按照图2.1中各模块连接顺序连接好整个采样系统,分别接上12V的放大器工作电压,+5V的AD采样电压和+2.5V的FPGA芯片工作电压,把串并选择端口选择串行输出,也即将短路帽短路,这样输入到器件是低电平。将示波器连接到串行输出口,用EDA实验台上的下载电路连接PC机上的打印并行口和硬件电路板上的下载口,可以看到示波器有高低的电平输出。将串并选择端口选为并行输出,也即将短路帽断开,这样输入到器件是高电平,任意选择一位连接到示波器,也可以看到有高低电平输出。通过调试可以证实整个高速多通道采样系统基本实现,联机调试完毕。

6.3调试注意事项

在调试音频放大部分的时候,话筒和电路板的连接线要选用屏蔽线,这样用助于屏蔽周围的干扰信号,普通的电线无法做到这一点。

由于FPGA芯片引脚过多,而且电路相对复杂,所以在硬件电路的功能调试之前,需要对硬件电路的检查和调试。特别是对FPGA芯片的电源的检查,电源电压的过高,芯片就会烧坏;电压过低,芯片就工作不起来。设计把AD部分和FPGA芯片分到了两块板子上,而且FPGA芯片电源是由LM317稳压块提供,所以先在AD模块加上+5V电源,用万用表测得LM317的输出电压是否是2.5V,这样就起到保护FPGA芯片的作用。

电路需要外部供电的部分,为防止电源对电路的干扰,在电源的输入两端都要接一个大电容(47uF)和一个小电容(0.1uF),这样可以滤掉电源中的高频和低频的干扰。

7  结论

    本次设计采用FPGA实现采样系统,从而系统具有高速、稳定、低功耗等特点,音频模拟信号经放大器NE5532放大后,经过8路选择后,进入滤波器进行滤波,滤掉高频干扰信号和低频干扰信号的干扰,然后进入AD7892进行AD采样,采样后的12位数据通过一个FIFO队列存储,最后从FIFO中读出数字信号,在串并输出模式的选择下在示波器上显示出来。

本系统基本达到了预期的设计,但还有一些不足之处,例如:在对FIFO队列的读写操作中是通过状态机来实现的,但这样FIFO队列就只起了一个缓存的作用。由于本人水平有限,无法实现其存储后再进行读写的操作,恳请各位老师多多批评指教。

多通道采样系统应用十分广泛,特别是在控制系统上的应用,比如说温度,湿度等,通过传感器把模拟信号采集到微机或者控制部分,根据采集的数据来对系统进行相应的控制,同时基于FPGA的多通道采样系统的实现,为一些特殊领域的实时测控提供了一个简单、灵活、可靠的方案,不失为一个良好的尝试。


附  录

1 各模块程序

1 FPGA顶层设计图



3  电路设计图

(1)音频放大



(2)滤波器



(3)AD7892电路




FPGA芯片PCB图


表1 归一化的巴特沃斯低通滤波器传递函数的分母多项式



基于FPGA多通道采样系统设计资料的评论 (共 条)

分享到微博请遵守国家法律