本科生毕业设计(论文)
摘 要
随着电子技术和集成电路技术的飞速发展,数字信号处理已广泛应用于语音、图像处理,通信和多媒体等领域中。傅立叶变换(DFT)作为其数字信号处理中的基本运算,发挥着重要作用。特别是快速傅立叶变换(FFT)算法的提出,减少了当N很大的时候DFT的运算量,使得数字信号处理的实现和应用变得更加容易,因此对FFT算法及其实现方法的研究具有很强的理论和现实意义,且实际价值不可估量。
本文主要探讨了基于FPGA数字信号处理的实现。首先详细阐述了数字信号处理的理论基础,重点讨论了傅立叶变换算法原理,由于快速傅立叶变换算法在实际中得到了广泛的应用,本文给出了基-2 FFT原理、讨论了按时间抽取FFT算法的特点。本论文对硬件描述语言的描述方法和风格做了一定的探讨,介绍了硬件描述语言的开发环境MAX+PLUSII。在此基础上,本论文详细阐述了数字集成系统的高层次设计方法,讨论了数字系统设计层次的划分和数字系统的自顶向下的设计方法,探讨了数字集成系统的系统级设计和寄存器传输级设计,描述了数字集成系统的高层次综合方法。最后本文描述了数字信号处理系统结构的实现方法,指出常见的高速、实时信号处理系统的四种结构:由于FFT算法在数字信号处理中占有重要的地位,所以本文提出了用FPGA实现FFT的一种设计思想,给出了总体实现框图:重点设计实现了FFT算法中的蝶形处理单元,采用了一种高效乘法器算法设计实现了蝶形处理单元中的旋转因子乘法器,从而提高了蝶形处理器的运算速度,降低了运算复杂度。
关键词:数字信号处理;VHDL语言;FPGA;FFT算法
I
本科生毕业设计(论文)
Abstract
With the rapid development of electronic and integrate circuit technology,digital signal processing has been widely applied in various field, like speechingand graphing processing, communication, multimedia. DFT plays an important part in digital signal processing as a basic calculation. Especially, FFT algorithmreduces the calculation quantity when N is a little great, which makes it much easier for implement and application. It is strongly theory and real signification to research on the FFT algorithm and its method for design and its value cannot be computed.
The paper mainly probes into the realization of digital signal processing based on FPGA.At first the fundamental theory of digital signal processing and the DFT algorithm are expounds, then radix-2 FFT and the characteristic of DIT FFT are discussed.In this paper,the description method and style of hardware description language and its development environment MAX+PLUSII are detailed. On the basis of that,the high level design method of integrated digital system and the partition of disign level of digital system are discussed, the top-down design strategy and the high level synthesis method of digital system are also detailed. After doing that, the paper points out the universal architectures of the high-speed real-time signal processing system and describes how to implement them. Since FFT plays an important role in digital signal processing, implementing FFT with FPGA is presented and the total realization graph is designed. For improving speed and decreasing computing complexity, high efficiency multiplier algorithm is used to realizing twiddle factor multiplier of butterfly processing unit.
Key words:Digital Signal Processing;VHDL;FPGA;FFT Algorithm
II
本科生毕业设计(论文)
目 录
第1章 绪 论 .......................................................................................................... 1
1.1 数字信号处理概述 ................................................................................... 1 1.2 FPGA简介 ................................................................................................. 2 1.3 FFT算法的发展 ......................................................................................... 3 1.4 用FPGA实现数字信号处理的特点 ....................................................... 4 1.5 本文的主要工作 ....................................................................................... 5 第2章 数字信号处理的理论基础 ........................................................................ 7
2.1 离散傅立叶变换 ....................................................................................... 7
2.1.1 傅立叶变换的几种形式 ................................................................ 7 2.1.2 离散傅立叶变换算法 .................................................................... 8 2.2 快速傅立叶变换 ....................................................................................... 9
2.2.1 FFT算法基本思想 .......................................................................... 9 2.2.2 按时间抽取基-2FFT算法 ........................................................... 10 2.2.3 按时间抽取FFT算法的特点 ...................................................... 11
第3章 硬件描述语言及MAX+PLUSⅡ平台 .................................................... 14
3.1 硬件描述语言(HDL) ......................................................................... 14
3.1.1 HDL概述 ...................................................................................... 14 3.1.2 HDL设计方法 .............................................................................. 14 3.2 VHDL语言 .............................................................................................. 16
3.2.1 VHDL语言简介 ........................................................................... 16 3.2.2 VHDL的优点 ............................................................................... 16 3.2.3 VHDL设计特点 ........................................................................... 17 3.2.4 VHDL基本设计流程 ................................................................... 18 3.2.5 VHDL设计单元模型 ................................................................... 18 3.2.6 VHDL语言中顺序执行语句和并行执行语句 ........................... 22 3.3 VHDL语言开发环境MAX+PLUSⅡ介绍 ............................................ 24 第4章 用FPGA实现数字信号处理算法 .......................................................... 26
4.1 数字信号处理的系统结构的实现方法 ................................................. 26 4.2 基于FPGA的FFT算法实现 ................................................................ 28
4.2.1 FFT处理器的实现框图 ................................................................ 28
III
本科生毕业设计(论文)
4.2.2 复数乘法器的实现 ...................................................................... 29 4.2.3 蝶形运算单元的实现 .................................................................. 31 4.2.4 数据存储单元RAM的实现 ....................................................... 32 4.2.5 旋转因子存储器ROM的实现 ................................................... 33 4.2.6 控制单元的设计 .......................................................................... 34 4.3 小结 ......................................................................................................... 34 第5章 结 论 ........................................................................................................ 35 参考文献 ................................................................................................................ 37 致 谢 ...................................................................................................................... 39 附录 ........................................................................................................................ 40
IV
本科生毕业设计(论文)
第1章 绪 论
1.1 数字信号处理概述
数字信号处理是利用计算机或专专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合需要的信号形式。数字信号处理技术的实质就是将模拟信号或我们现实生活中的一些信号转化为数字信号并对转换后的数字信号进行相应的处理。
字信号处理是从20世纪60年代以来,随着信息科学和计算机学科的高速发展而迅速发展起来的一门新兴学科。70年代以来,随着电子计算机、大规模集成电路、超大规模集成电路以及微处理器技术的迅猛发展,数字信号处理得到了飞速的发展,它的重要性日益在各个领域的应用中表现出来。
图1.1给出了数字信号处理系统的简化框图。此系统先将模拟信号变换为数字信号,经数字信号处理后,再变换成模拟信号输出。其中抗混叠滤波器的作用,是将输入信号xt中高于折叠频率(其值等于采样频率的一半)的分量滤除,以防信号频谱的混叠。随后,信号经采样和A/D变换后,变成数字信号xn。数字信号处理器对xn进行处理,得到输出数字信号yn,经D/A变换器转换成模拟信号,此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号yt。
抗混叠 滤波器 A/D 变换器 数字信号处理器 D/A 变换器 低通 滤波器
图1.1 数字信号处理系统简化框图
数字信号处理与模拟信号处理相比具有如下优点:
1.数字信号在处理过程中更加稳定
数字信号参数不象模拟信号参数那样容易受电阻、电容、运算放大器或是温度变化的影响。一个数字系统也很少受器件使用时间的影响,所以数字系统要比模拟系统稳定得多。这保证了应用系统的稳定性以及较长的使用寿命。
2.数字信号处理系统的可预见性
当一个数字信号处理系统设计完成后,我们可以通过仿真或是其它手段直接
1
本科生毕业设计(论文)
看到结果,而且这与最终应用中出现的情况是一样的:同时,所有拷贝的数字信号处理系统间是没有性能差别的。
3.特殊功能
数字信号处理可以完成许多模拟信号处理所达不到的功能,如线性相位响应,还有一些模拟信号不能处理的问题如无损压缩、纠错编码等。
4.性和可编程能力
数字信号处理具有极强的适应能力,可以在多种领域内应用。同时,数字信号处理的设计也相对简单,并且可以根据不同的应用迅速对设计进行改进或重新设计。
5.成本低廉
数字信号处理器多通过超大规模集成电路实现,相对使用大量的模拟器件完成同一任务来讲,数字信号处理器的成本是很低的。
由于数字信号处理具有以上优点,数字信号处理在现实生活中得到了广泛的应用。目前,数字信号处理技术已广泛应用于数字通信、语音合成、图像处理、多媒体技术、高清晰度电视、数字音响、以及机器人等各个领域。
1.2 FPGA简介
可编程逻辑阵列器件是可以由用户进行编程以实现所需逻辑功能的数字集成电路,利用其内部的逻辑结构实现任何布尔表达式、寄存器函数。和一般的ASIC电路相比,可编程逻辑阵列器件具有设计周期短,修改方便的优点。
现场可编程门阵列FPGA是八十年代中期出现的新型高密度可编程逻辑器件,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。通过编程可以立刻把一个通用的FPGA芯片配置成用户需要的硬件数字电路,因而大大加快电子产品的研发周期,降低研发成本,缩短产品上市时间。FPGA具有高密度(一个器件内部可用逻辑门可达数万门),运行速度快(管脚间的延时小,仅几个ns)的特点。用它来设计数字电路可以简化系统设计,缩小数据规模,提高系统的稳定性。ALTERA公司的FPGA器件FLEX 10K 器件内含随机静态存储器,方便数据的暂时存储。
FPGA兼有串、并行工作方式和高集成度、高速、高可靠性等明显的特点,其时钟延迟可达纳秒级,同时,在基于芯片的设计中可以减少芯片数量,缩小系统体积,降低能源消耗,提高系统的性能指标和可靠性。正是由于FPGA具有这些优点,FPGA在超高速应用领域和实时测控方面有非常广阔的应用前景。在高可靠应用领域,如果设计得当,将不会存在类似于MCU的复位不可靠和PC可能
2
本科生毕业设计(论文)
跑飞等问题。FPGA的高可靠性还表现在,几乎可将整个系统下载于同一芯片中,实现所谓片上系统,从而大大缩小了体积。与AMU设计相比,FPGA显著的优势是开发周期短,投资风险小、产品上市速度快,市场适应能力强和硬件升级回旋硕士学位论文余地大,而且当产品定型和产量扩大后,可将在生产中达到充分检验的VHDL设计迅速实现ASIC投产。
随着大规模现场可编程逻辑器件的发展,系统设计进入“片上可编程系统”(SOPC)的新纪元;芯片朝着高密度、低压、低功耗方向挺进:在SOC芯片上可以将微处理器、数字信号处理器、存储器、逻辑电路、模拟电路集成在一个芯片上。而如果将可编程逻辑电路IP核集成到SOC芯片上则会大大提高SOC芯片的灵活性与有效性,并且缩短了SOC芯片的设计周期。因此国际各大公司都在积极扩充其IP库,以优化的资源更好的满足用户的需求,扩大市场。
由此可见,FPGA不仅可以解决电子系统小型化、低功耗、高可靠性等问题,而且其开发周期短、开发软件投入少、芯片价格不断降低,这使得FPGA占有越来越多的市场,特别是对小批量、多品种的产品需求,使FPGA成为首选。FPGA普及的另一重要原因是IP(知识产权)越来越被高度重视,带有IP内核的功能块在ASIC设计平台上的应用日益广泛。越来越多的设计人员,采用设计重用,将系统设计模块化,为设计带来了快捷和方便。并可以使每个设计人员充分利用软件代码,提高开发效率,减少上市时间,降低研发费用,缩短研发周期,降低风险。
1.3 FFT算法的发展
DFT在信号的频谱分析、系统分析、设计和实现中得到了广泛的应用,原因之一就是计算DFT有很多的快速算法,从快速计算DFT的理论观点看,这些快速计算DFT的方法大概可以分为两类。
一类是递归型算法,是将一维DFT转化为容易计算的二维或多维DFT,其代表算法Cooley-Tukey算法,Rader-Brenner算法等。例如,分裂基算法、基2、基4、基8、基16及任意组合因子等的组合数FFT算法,利用W同特点是每两级DFF之间需要乘以旋转因子。
另一类是将DFT转变为卷积,利用计算卷积的方法计算,其代表是Winograd傅立叶变换算法(WFTA)和素因子(FPA)。这种算法是根据Good-Thomas提出的索引变换,将一个长度NN1N2的DFT变换成“实际的”二维DFT,也就是说没有Cooley-Tukey中的旋转因子。只要索引映射计算是在线进行的,而且没有
nkN的周期性和对称
性,使长序列的DFT分解为更小点数的DFT,从而大大减少了运算工作量,共
3
本科生毕业设计(论文)
预先计算好的表可以使用,那么索引映射就会变得更加复杂。
目前,FFT已广泛应用在无线通信、语音识别、图像处理和频谱分析等领域。在不同应用场合,需要不同性能要求的FFT处理器,特别是随着OFDM(正交频分复用)技术的出现,FFT作为OFDM系统中调制解调的关键,如何更快速、更灵活地实现FFT变得越来越重要。
到现在为止,FFI的理论研究已经趋于成熟,但是随着通讯技术的飞速发展,很多场合需要快速、高性能的FFT处理器,且随着大容量、高速芯片的出现,自己研发高性能的FFT处理器成为可能,速度可以大大的提高,因此很多人在自己研究的课题领域,对它进行了大量的研究,通过选用不同的硬件,在综合考虑硬件特性和满足系统的前提下,对FFI处理器的流程、算法进行进一步的优化处理,使它的处理速度能有所提高。
1.4 用FPGA实现数字信号处理的特点
早期的FPGA设计大都是使用FPGA供应商提供的设计软件工具,进行门级设计。而本文的一个特点是首先采用VHDL语言进行电路描述,然后使用高层次的EDA综合工具进行综合,最后使用FPGA供应商提供的布局布线工具进行布局布线。要求在系统设计、综合技巧等方面就要考虑FPGA的特点。在代码设计时,遵从VHDL描述一系统仿真一系统综合一FPGA实现这一高层次设计方法来完成系统的设计与实现。
FPGA实现数字信号处理最显著的特点就是高速性能好。
以软件方式控制操作和运算的系统速度显然无法与纯硬件系统相比,因为软件是通过顺序执行指令的方式来完成控制和运算步骤的,而用HDL语言描述的系统是以并行方式工作的。以对A/D进行数据采样控制为例,采样周期包括对A/D工作时序的控制和将每一次获得的数据存入RAM(或FIFO)中。工作于12MHz晶振频率的MCS-51系列单片机对A/D控制的采样频率为20KHz上下,即约每秒两万次。但若用FPGA中设计的状态机来完成同样的工作,如对于具有流水线采样工作时序的A/D来说,只需两个状态即可完成一次采样,状态间转换的时间仅为一个时钟周期,而如果FPGA的工作频率是100MHz,则采样频率可达50MHz。
这在算法方面同样具有巨大的优势。这里以数字滤波器的设计为例作一比较:
4
本科生毕业设计(论文)
表1.1FPGA和DSP芯片实现FIR滤波器的速度对比
FIR滤波器阶数 FPGA的处理速度 (单位:MSPS) 8 16 24 32 104 101 103 105 DPS芯片的指令执行速度 (单位:MIPS) 832 1616 2472 3360 从表1.1可以看出,用FPGA实现32阶8位FIR滤波器的处理速度为105MSPS时,用DSP芯片实现的滤波器要达到相当速度,则需要指令执行速度为3360MIPS。
然而目前还没有如此高速的单处理器的DSP芯片。由此可见,在一些DSP芯片不能满足数字信号处理要求的场合,可以采用FPGA来完成数字信号处理。
综上所述,与ASIC和通用DSP相比,FPGA器件能够以高速、实时、低成本、高灵活性的优点应用于数字信号处理领域,利用FPGA实现数字信号处理成为数字信号处理领域的一种新的趋势,它可以完全取代通用DSP芯片或作为通用DSP芯片的协处理器进行工作。如果将通用处理器和FPGA融合在一起,把需要多个时钟周期的运算交给FPGA完成,DSP芯片主要完成单时钟的运算和控制FPGA的“可再配置计算”功能,会更好地将两者的优势发挥出来。
1.5 本文的主要工作
在广泛阅读文献资料的基础上,分析了基2FFT,算法的原理与特性。对FFT算法实现的方式和结构进行了深入的研究,特别对FFT,处理过程中数据的通信进行了研究和分析.整个设计采用了先进的结构化设计思想,针对基-2算法,设计了一种FFT实现方法,主要内容如下:
第一章 绪论部分,概要地叙述了数字信号处理的定义以及数字信号处理系统的简化框图,指出了数字信号处理的几种常用方案,简要地介绍了FPGA,就FPGA实现数字信号处理的特点进行了描述。
第二章 就数字信号处理的理论基础进行了探讨,首先介绍了傅立叶变换的几种形式,重点探讨了离散傅立叶变换算法原理。由于快速傅立叶变换算法在实际中得到了广泛的应用,本章描述了快速傅立叶变换算法基本思想,给出了按时间
抽取基-2 FFT算法实现原理。最后讨论了按时间抽取FFT算法的特点。
5
本科生毕业设计(论文)
第三章 首先介绍了硬件描述语言及其设计方法,其次介绍硬件描述语言中的VHDL语言及其设计优点、设计特点及组成,最后介绍了硬件描述语言的开发环境MAX+PLUSII。
第四章 本文提出了用FPGA实现数字信号处理的一种设计思想,首先就数字信号处理系统结构的实现方法进行了描述,指出常见的高速、实时信号处理系统的四种结构,给出了总体实现框图,重点设计实现了FFT算法中的蝶形处理单元,采用了一种高效乘法器算法设计实现了蝶形处理单元中的旋转因子乘法器。
6
本科生毕业设计(论文)
第2章 数字信号处理的理论基础
2.1 离散傅立叶变换
2.1.1 傅立叶变换的几种形式
傅立叶变换是信号分析和处理的有力工具,在以快速傅立叶变换算法为代表的一系列有效算法出现后,傅立叶变换不但在信号处理领域起着支柱作用,而且在其它工程领域也获得了广泛的应用。
根据信号的连续性、离散性、周期性、非周期性,傅立叶变换可以分为四种不同的形式,形成四种不同的傅立叶变换对,以下分别予以描述。
一.连续时间非周期信号
连续时间非周期信号xt在频域中得到的是连续非周期的频谱密度函数
Xjw,傅立叶变换对如下:
Xjw xttxejwt d t (2-1) w (2-2) d12Xjwejwt这种类型信号的典型信号有指数衰减信号和高斯信号,这种类型信号的变换就称为傅立叶变换。
二.连续时间周期信号
连续时间周期信号xt当满足狄里赫利条件时在频域中得到的是离散非周期的傅立叶级数,傅立叶级数的系数为Xjkw,Xjkw为离散非周期函数,xt和Xjkw组成的变换对如下:
w Xjk1T2TT2xetjkwt d t (2-3)
xtkXjkwejkwt (2-4)
这种类型信号的典型信号有正弦信号和周期方波信号,这种类型信号的傅立叶变换就称为傅立叶级数。
三.离散时间非周期信号
离散时间非周期信号xn也称为序列,序列的傅立叶变换对如下所示:
XejtnxnTe7
jnT (2-5)
本科生毕业设计(论文)
xnT12X2eejTjnTd (2-6)
这种信号的傅立叶变换称为离散时间傅立叶变换 四.离散时间周期信号
离散时间周期信号的傅立叶变换有时称为傅立叶级数,但最常被称为离散傅立叶变换。
2.1.2 离散傅立叶变换算法
上面讨论的四种傅立叶变换对前三种由于至少在时域或频域是离散的,都不适于在计算机上运行。然而、现实世界中的声音图像等各种信号大都为模拟信号,要用计算机对这些信号进行数字信号处理,这些信号必须通过采样量化编码变成有限长的数字信号序列。
对于有限长序列,可以得出另外一种傅立叶表示,称为离散傅立叶变换(DFT)。离散傅立叶变换本身是一个序列,而不是一个连续变量的函数,它相应于对信号的傅立叶变换进行频率的等间隔取样的样本。因为存在着计算DFT的高效算法,作为序列的傅立叶表示,DFT除了在理论上十分重要外,在实现各种数字信号处理算法中还起着核心作用。
离散傅里叶变换描述分析有限长序列,其本质是建立了以时间为自变量的信号与以频率为自变量的频谱函数之间的变换关系,换言之,离散傅里叶变换定义了时域与频域之间的一种变换或者说是映射。对于DFT时间和频率变量都取离散值。
下面讨论一下有限长序列的离散傅立叶变换。
对于一个长度为N的有限长序列xn,亦即只在n0到n1个点上为非零值,其余皆为零,我们可以把它看成周期为N的周期序列xn中的一个周期
即
当0nN1, xnxn 当n为其它值, xn0。 其中xnr xnrN (2-7)
N1n0从而有限长序列的傅立叶变换定义为
正变换: XkDFT(2-8) xnxnWN 0kN1
1N1nk反变换: xnIDFT 0nN1 (2-9) XkXkWNNn0nk其中,WNenkjkn2N
8
本科生毕业设计(论文)
由此可见,离散傅立叶变换开辟了频域离散化的道路,使数字信号处理也可以在频域上采用数字运算方法进行,它可以作为一种数学工具来描述离散信号的时域和频域表示的关系,大大增加了数字信号处理的灵活性,特别是它的多种快速算法,使信号的实时处理和设备的简化得以实现,所以离散傅立叶变换不仅在理论上有重要意义,而且在各种数字信号处理中起着核心的作用。
2.2 快速傅立叶变换
对于式(2.8)DFT的直接计算法。若xn为复数的话,则计算DFT每一个值就需要N次复数乘法和N1次复数加法。因此计算全部的N个值总共需要
N2次复数乘法和NN1次复数加法。而每一个复数乘法需要4次实数乘法和2
次实数加法。所以,对于每一个k值,直接计算Xk就需要4N2次实数乘法和
2N2N1次实数加法。除了这些运算量外,通用计算机或专用硬件来做DFT数字计算还需要存储和读取N个复数输入序列值xn以及复系数W接计算DFT所需要的算术运算的次数就非常大。
可见,离散傅里叶变换算法实现了频域离散化,在数字信号处理中起着极其重要的作用,它可以直接用来分析信号的频谱、计算滤波器频率响应、以及实现信号通过线性系统的卷积运算。但对于N点DFT运算总共需要4N2次实数乘法和2N2N1次实数加法,这样庞大的运算量使得DFT的实际应用特别是实时处理难以实现,直到1965年库利和图基首次提出了计算DFT的一种快速算法,人们开始认识到DFT运算的一些内在规律,发展和完善了一套高效的运算方法,DFT的运算在实际中才得到广泛的应用。
继CooleyTukey算法以后,SandeTukey等快速算法相继出现,很快形成了一套高效运算方法,这就是现在的通用快速傅里叶变换,简称为FFT。这种方法使复数乘法的次数从N2次减少到了0.5Nlog2N次。如N1024时运算量从1048576次减少到5120次,运算效率提高了204.8倍,为DFT乃至数字信号处理技术的实际应用特别是实时处理创造了良好的条件,大大地推动了数字信号处理技术的发展。所以实际工程中用到的都是DFT的快速算法:快速傅里叶变换(FFT)。
nkN值的设
备。由于计算的总次数以及所需的时间大致上正比于N2,显然当N值很大时直
2.2.1 FFT算法基本思想
FFT算法的基本思想:可以将一个长度为N的序列的离散傅里叶变换逐次分解为较短的离散傅里叶变换来计算,这些短序列的DFT可重新组合成原序列的DFT,而总的运算次数却比直接的DFT运算少得多,从而达到提高速度的目的。
9
本科生毕业设计(论文)
快速傅立叶变换就是利用
WnkN的特性,逐步地将N点序列分解成较短的序
列,计算短序列的DFT,然后组合成原序列的DFT,使运算量显著减少。这种分解基本上可分为两类,一类是将时间序列xn进行逐次分解,称为按时间抽取算法(Decimation In Time);另一类将傅立叶变换序列Xk进行分解,称为按频率抽取算法(Decimation In Frenquency)。本文主要介绍T按时间抽取基-2FFT算法。
2.2.2 按时间抽取基-2FFT算法
序列实现运算量的减少。W性质1:W性质2:W性质3:W抽取算法。
基二算法中,序列xn的长度N为2的整数次幂,即N2M,其中M为正整数。最初通过将Xn分解为奇数项序列和偶数项序列的形式使FFT运算分为两组。
设: x1rx2r
N, 1 (2.10) x2rx2r1 r0,1,...2nkN我们已经知道FFT算法主要是利用WnkNnkN的性质,通过把序列逐渐分解为短
N的以下三种性质在FFT运算中得到了应用:
nkN的周期性 W的对称性
WnkN
nkNnkNWNnkNnkWN
mnknk的可约性 WWmN, WnkNWNm
nkm由于目前FFT比较普遍使用的算法还是基二算法,本节将讨论基二的按时间
设X1k为x1r的DFT,X2k为x2r的DFT,利用W的DFT运算为:
nkN的性质可得xnkXkX1kWNX2kNk0,1,..., 1 (2-11) Nk2XkX1kWNX2k2上面式子的运算可用下图的蝶形信号流图符号表示:
图2.1 时间抽取算法蝶形运算图
由此可见,一个N点DFT分解为两个N2点的DFT,从而实现了运算量的
10
本科生毕业设计(论文) 减少,再经过逐次分解最终分解为2点的DFT,实现了FFT运算。 FFT运算的核心是蝶形运算。通过顺序计算全部蝶形实现FFT算法的实现。 下面给出N8时的按时间抽取FFT流图。 图2.2 N8的时间抽取FFT算法流图 对于序列的长度N2M的FFT,共有M级蝶形,每级由N2个蝶形运算组成,每个蝶形包括一次复乘、二次复加,则M级运算的运算量为 NN复数乘法:Mlog2N 22复数加法:NMNlog2N 由此可见,FFT算法与直接DFT算法相比运算量大为减少,如N1024时,DFT所需的复数乘法运算次数为:N21048576次,而FFT所需的复数乘法运算次数仅为Nlog2N5120次。可见N1024时DFT算法的运算量是FFT算法的2N运算量的N2log2N10485765120204.8倍。从而可以看出FFT算法的优2越性,且当点数N越大越能突出FFT算法的优越性。 2.2.3 按时间抽取FFT算法的特点 图2.2所示流图描述了计算离散傅里叶变换的一种算法。在图2.2中特别重要的是连接节点的支路和每个支路的传输比。只要节点间的连结和连结的传输比维持不变,则无论在流图中的诸节点如何重新排列,它始终表示相同的计算。由图2.2可以推知按时间抽取算法在运算方式上的特点,主要有以下两种特点:同址运算,倒位序规律。以下分别介绍这两种特点。 11
本科生毕业设计(论文)
特点1:同址运算
由图2.2看出,对于长度为N的序列,每一级计算均需要一组N个复数,并通过图2.1形式的基本蝶形把它们变换为下一组的N个复数,这种过程重复
log2N次,最后得到所要求的离散傅立叶变换。当实现图2.2中描述的运算时,我们可以想象使用两列(复数的)存贮寄存器,一列存贮要计算的数,另一列存贮计算中要用到的数据。例如,当计算图2.2中的第一列时,第一组存贮寄存器应当存放输入数据,而第二组存贮寄存器应当存放第一级计算出的结果。把第m级计算得出的复数序列记作Xmn,其中n0,1,...,N1,把从第m级输入的复数序列记作Xon。对于第m级计算,可以认为Xm1n是输入列,Xmn是输出列。这样,对于图2.2中所示的N8的情况,有
Xo0x0
Xo1x4 Xo2x2 Xo3x6
Xo4x1 (2-12)
Xo5x5 Xo6x3
Xo7x7
利用这种表示法,可将图2.1中蝶形计算的输入和输出标记为图2.3所示的那样,并有相应的方程
XmpXm1pWNXm1q (2-13 a) XmqXm1pWNXm1q (2-13 b)
图2.3 式(2.11)的流图
nknk在式(2.11)中,p,q和r从一级到另一级是不同的,从图2.2和图2.3中可以清楚地看出,要计算第m列的p和q位置上的复数节点值,只需要第(m-1)列在p和q位置上的复数节点值。因此,若将Xmp和Xmq分别存放在原存放Xm1p和Xm1q的同一存贮寄存器中,则实现全部计算实际上只需要一列存贮N个复数的寄存器。这种计算通常称为同址计算。
由此可见,采用同址运算只需N个存储单元,大大节省了存储单元,从而降低了设计成本。
12
本科生毕业设计(论文)
特点2:倒位序规律
为了实现同址计算,输入序列不能按照原来的先后顺序存贮(或至少不能这样读取),而应如图2.2的流图那样,实际上,这种输入数据存贮和读取的顺序称为倒位序。我们注意到,对于已经讨论过的8点流图,只需要用三位二进制码来标注整个数据。如果用二进制形式写出式(2.10)中的标号,就得到如下一组式子:
Xo000x000 Xo001x100
Xo010x010 Xo011x110
Xo100x001 (2.14)
Xo101x101 Xo110x011 Xo111x111
若(n2,n1,n0)为序列xn中标号的二进制表示,则序列值xn2,n1,n0存放在数列
X0n0,n1,n2的位置上。也就是说,要确定xn2,n1,n0在输入序列中的位置,我们必须将标号n的位序颠倒。
表 2.1给出了N8时的自然顺序二进制数以及相应的倒位序二进制数。
表2.1码位的倒位序(N8)
自然系数(n) 0 1 2 3 4 5 6 7 二进制码 000 001 010 011 100 101 110 111 倒位序二进制码 000 100 010 110 001 101 011 111 倒位序数 0 4 2 6 1 5 3 7 实际运算中,总是先按自然顺序将输入序列存入存储单元,要实现FFT算法,首先将按自然顺序存放的序列经变址运算变换得到倒位序的排列。
13
本科生毕业设计(论文)
第3章 硬件描述语言及MAX+PLUSⅡ平台
3.1 硬件描述语言(HDL)
3.1.1 HDL概述
硬件描述语言(HDL)是相对于一般的计算机软件语言如C,PASCAL而言的。硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言,它描述电子系统的逻辑功能、电路结构和连接方式。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。
硬件描述语言具有以下几个优点: (1)设计技术齐全,方法灵活;
(2)加快了硬件电路的设计周期,降低了硬件电路的设计难度; (3)采用系统早期仿真,在系统设计早期就可发现并排除存在的问题; (4)语言设计可与工艺技术无关; (5)语言标准、规范,易共享和复用。
目前,采用硬件描述语言进行数字系统的设计己被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。
硬件描述语言HDL的发展至今已有20多年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化曾起到了极大的促进和推动作用。但是,这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20世纪80年代后期,VHDL和Verilog HDL语言适应了这种趋势的要求,先后成为IEEE标准。就FPGA/CPLD开发而言,VHDL语言是最常用和流行的硬件描述语言之一,在数字信号处理的FPGA设计中得到了广泛的使用。
3.1.2 HDL设计方法
HDL设计方法基本上包含3方面:
14
本科生毕业设计(论文)
(1)设计描述的开发,这种描述必须是有效的;
(2)综合,将设计描述转换成优化的门级表示,目前的综合工具只是将输入的寄存器传输级(RTL)的HDL描述转换为门级的网表,再由门级的网表实现互连的门级宏单元结构。因为厂家所支持的各个工艺库中有门级宏单元模块,所以有了门级网表就能按照技术条件进行优化,得到一个优化了的门级结构; (3)对设计加以验证。
硬件描述语言RTL级设计的流程框图如图3.1所示,其中的综合部分是HDL设计方法中的关键。
图3.1 HDL设计方法流程框图
门级结束 工作速度与功能仿真 Y N Y 转化成门级优化 功能仿真 RTL仿真 N RTL VHDL源文件 综合HDL综合设计方法优点如下:
(1)提高设计效率:设计者不需人工进行门级描述,节省了设计时间; (2)设计是在较高的抽象层次上进行,设计者不用更多地考虑门级,可花费更多的时间考虑概念级方面;
门级仿真 15
本科生毕业设计(论文)
(3)利用HDL具有的自动优化和快速探索各种设计方案的能力,可使设计者迅速而成功地得到高质量设计的最终结果,从而改善了设计质量; (4)设计与工艺无关,便于设计的再利用。
3.2 VHDL语言
3.2.1 VHDL语言简介
VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language(超高速集成电路硬件描述语言),VHDL语言是美国国防部资助的VHSIC(Very High Speed Integrated Circuit超高速集成电路)项目开发的产品,诞生于1982年。1987年底VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本(IEEE std 1076-1987)之后,各EDA公司相继推出了自己的VHDL设计环境。此后,VHDL在电子设计领域受到了广泛的接受,并逐步取代了原有的非标准HDL。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即ANSI/IEEE std 1076-1993版本。1996年IEEE 1076.3成为VHDL综合标准。
VHDL主要用于描述数字系统的结构、行为、功能和接口,非常适用于可编程逻辑芯片的应用设计。与其它的HDL相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。就目前流行的EDA工具和VHDL综合器而言,将基于抽象的行为描述风格的VHDL程序综合成为具体的FPGA和CPLD等目标器件的网表文件已不成问题。
VHDL语言可以支持自上而下和基于库的设计方法,并支持同步电路、异步电路、FPGA以及其它随机电路的设计。目前大多数EDA工具几乎在不同程度上都支持VHDL语言。这给VHDL语言进一步推广和应用创造了良好的环境。VHDL具有多层次描述系统硬件功能的能力,可以描述系统模型直到门级电路。
VHDL语言在硬件设计领域的作用将与C和C++在软件设计领域的作用一样,在大规模数字系统的设计中,它将逐步取代如逻辑状态表和逻辑电路图等级别较低的繁琐的硬件描述方法,而成为主要的硬件描述工具,它将成为数字系统设计领域中所有技术人员必须掌握的一种语言。VHDL和可编程逻辑器件的结合成为一种强有力的设计方式,将为设计者的产品上市带来创记录的速度。
3.2.2 VHDL的优点
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻
16
本科生毕业设计(论文)
辑门级多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。VHDL还具有以下优点:
(1)VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。 (2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用。
(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。
(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。 VHDL通常由以下几部分组成: (1)实际用的VHDL语言。
(2)含有STANDARD包和TEXTIO包的STD库。在STANDARD包内存有一些预定义的数据类型说明和函数;在TEXTIO包内含有支持格式化ASCII I/O操作的数据和子程序的说明。 (3)买方专用的库和程序包。 (4)用户专用的库和程序包。 (5)保存用户设计用的WORK库。
3.2.3 VHDL设计特点
VHDL语言只所以在电子设计领域应用广泛与它的设计特点是密不可分的。 总的来说,VHDL语言具有如下三个设计特点:
(1)VHDL描述就是将一个待设计系统的部件和互连关系列成网表,并对该系统设计的行为提供证据。VHDL可在各个抽象层次上进行,如算法级、寄存器传输级、具有单位时间延迟的门级和详细定时的门级等。通常在自顶向下(top-down)的设计方法中,设计者首先对所设计的系统提出比较抽象的概念性描述,而后进入到系统的细节考虑。
(2)一个用VHDL语言描述的系统模型,通常要在VHDL仿真器上运行,以验证所模拟系统的行为。对一个VHDL设计模型的仿真,需加激励以提供在仿真过程中观察该模型的手段,得到最终所要检查的仿真结果。这就要求设计者给出测试条件(提供一组功能测试向童)作为输入,用以检验所设计系统的功能。
(3)VHDL设计可通过逻辑综合工具产生其物理设计,特别是许多生产销售VLSI门阵芯片的厂家,可将VHDL设计描述转换成门级网表,从而可制造出一个专用的集成电路芯片。
由此可见,VHDL的应用可对一个设计提供文档、对所设计系统的行为进行
17
本科生毕业设计(论文)
仿真、继而直接进行逻辑综合。总之,VHDL语言不但可用于对一电子系统的行为特征和元件间的互连关系建立文档;也可将一个VHDL设计描述输入到仿真器中,在给定的测试条件下运行,以检验设计的正误;还可将VHDL设计输入到逻辑综合工具中,产生所要设计的电路结构;VHDL也可将设计分成若干个抽象层次加以描述。
3.2.4 VHDL基本设计流程
用VHDL/Verilog HDL开发CPLD/FPGA的完整流程为:
(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的文本编辑环境。通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件。
(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也称为前仿真,对简单的电路可以跳过这一步,只在布线完成后进行时序仿真)。
(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf的EDA工业标准文件。
(4)布局布线:将.edf文件调入PL D厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。
(5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也称为后仿真)。
(6)仿真下载:确认仿真无误后,将文件下载到芯片中。
3.2.5 VHDL设计单元模型
VHDL设计可由4个分立的设计单元组成,每个设计单元经编辑后保存在WORK库中。这4个可编辑的源设计单元分别是:实体(entity)、结构体(architecture)、配置(configuration)和程序包(package)。下面逐一介绍这4个设计单元。
1.实体
实体是用来描述一个设计对外部的接口信号、端口数目、端口的方向和数据类型等,还包括一些其它的信息,如属性等。一切通信均由实体中的端口说明来产生。
实体定义了硬件的输入输出端口,定义了硬件与外部环境的接口。从这种意义上来讲,实体定义的其实是一个黑盒子,黑盒子上带有输入和输出的端口说明,但并不包含如何将输入映射到输出的信息。
下面的 VHDL源代码定义了一个实体BUBBLE,它的输入端口为DATA_IN,
18
本科生毕业设计(论文)
DATA_ READY和START,输出端口为DATA_OUT。它定义了图3.2所示的一个硬件模块,但没有定义输入信号和输出信号之间的关系。简单地讲,实体定义了一个“插座”,这个插座只定义了硬件的端口,可以在这个插座上插上任何端口 匹配的硬件。
图3.2实体BUBBLE定义的硬件模块
entity bubble is
port(data_ready: in boolean; data in: in integer; start: in std_logic; data_ out: out inteager); end bubble; 2.结构体
结构体定义了硬件设计的输入端口和输出端口之间的映射关系,用来说明相应的硬件的行为。换句话说,结构体定义了插座(实体)上插入了什么器件。设计者可以在任何层次定义结构体,算法级、RTL级或者逻辑门级都可以写出相应的结构体。结构体通常由说明部分和算法部分组成,算法部分通常是一些并发执行的语句。
下面的VHDL源代码是实体BUBBLE的一种行为描述。结构体BEHAVIOR中的算法部分只有一个并发执行的进程语句SORT。其中,进程实际上是包含在begin和end之间的无限循环语句。
architecture behavior of bubble is --结构体的说明部分
type memory is array(1 to 256) of integer; procedure read_mem(data_ready: in boolean; data_in: in inteager; ram: out memory) is begin
for i in 1 to 256 loop wait until data_ready;
19
本科生毕业设计(论文)
ram(i):=data_in; end loop; end read_mem;
procedure write_mem(data_ready: in boolean; data_out: out inteager; ram: in memory) is begin
for i in 1 to 256 loop wait until data_ready; data_out<= ram(i); end loop; end write_mem; begin
--算法部分,只包含一个进程 sort: process
variable ram: memory: variable tmp,ti,t2: integer; begin
wait until(start=’1’);
read_mem(data_ready,data_in,ram) for i in 1 to 255 loop t1:=257; when t1>i loop t2:=t1-2; t1:=t1-1;
if ram(t1) 20 本科生毕业设计(论文) end behavior; 结构体有三种描述方法:Netlist(网表描述)、Equation(方程描述)和Behave(行为描述),有时将它们称之为:Structural(结构描述),Data flow(数据流描述)和Behavior(行为描述)。下面分别进行说明。 (1)Structural(结构描述) 结构描述最反映一个设计硬件方面的特征,表达了内部元件间连接关系。使用元件例化语句来描述。下面VHDL程序反映了半加器的结构描述。 architecture ha-structure of half-adder is component xor2 port(x, y: in bit;n: out bit) end component; component and2 port(l, m:in bit; n: out bit); end component; begin x1:xor2 port map (a,b,sum); a1:and2 port map (a,b, carry); end ha-structure; (2)Data flow(数据流描述) 数据流描述反映一个设计中数据从输入到输出的流向,使用并发语句描述。下面代码给出了半加器的数据流描述。 architecture dataflow of half-adder is begin sum<=a xor b after 8ns; carry<=a and b after 4ns; end dataflow; (3)Behavior(行为描述) 行为描述反映一个设计的功能或算法,一般使用进程PROCESS,用顺序语句表达。下面程序描述半加器的行为描述。 architecture behavior of half-adder is begin process(a,b) variable x,y: bit; begin 21 本科生毕业设计(论文) x:=a; y:=b; sum<=x xor y; carry<=x and y; end process; end behavior; 上面介绍了VHDL的三种不同的描述风格:行为级描述、数据流描述和结构级描述。在一个系统中三种描述风格基本上都可能用到。在主模块与子模块调用时一般采用结构化描述:在一般模块的设计时,根据具体情况,可以用行为级描述,又可以用数据流描述。对于一个复杂系统的描述来讲,单用一种描述方法来描述是不现实的,通常是几种描述方法混合使用。 3.配置 一个实体可用多个结构体描述,由配置来决定选择哪一个结构体来综合。配置语句基本语法格式如下: configuration配置名of实体名is for选配结构体名 end for; end configuration; 4.程序包 程序包中含有预定义的,在设计中需要用到的数据类型说明、元件的说明以及子程序的说明。 3.2.6 VHDL语言中顺序执行语句和并行执行语句 硬件电路中的信号总是同时工作的,这就是硬件电路的并发行,描述硬件行为的VHDL模型必须保证仿真时的并发性,图3.3示意给出了并发的概念。在这个图中有三个逻辑模块,假定模块B1和模块B2同时作用,即模块B1和B2并行激活,模块B3应该在模块B1的输出(Z1)或模块B2的输出(Z2)值发生变化时立即被激活。在信号通过模块B3传输的同时,输入信号IN I或IN2的变化会通过模块B1或B2传输,也就是说,信号流可以同时在三个模块中流动。 图3.3逻辑模块向进程的映射 22 本科生毕业设计(论文) 硬件描述语言应该有能力描述实际电路中信号“同时”流动的特性。在VHDL中,这种要求通过进程满足。每个进程表示一个逻辑模块,各个进程之间并行执行。当然,一般仿真器都在单CPU的计算机上运行,不同进程的执行实际上存在先后顺序,但从仿真的角度来看,不同进程是同时执行的。当一个进程的敏感信号值发生变化时,该进程被激活。进程的敏感信号保存在其敏感信号表中,一般情况下,敏感信号表中保存的就是该进程描述的模块的输入信号。图3.3中包含了为每个模块建立VHDL进程描述所需要的信息。如模块B1可以表示为下述VHDL进程: logic_block: process(x1,x2,x3) variable yint: std_logic; begin yint:=x 1 and x2; z1<=yint or x3 after 30 ns; end process logic_block; 如果只根据语句本身,并不能判断它会顺序执行还是并发执行,因此必须硬件描述语言的语义上规定什么样的语句会顺序执行,什么样的语句会并发执行。VHDL中规定,如果语句出现在结构体内,它们会并发执行,如果语句出现在进程或子程序内,它们会顺序执行。 利用下面的VHDL源代码,可以解释顺序执行和并发执行的概念。实体STATEMENTS的输入信号为X,Y和Z,在结构体CONCURRENT中,AS和BS被定义为两个信号,AS是内部信号,BS是端口信号。两个信号赋值语句S1和S2恰好出现在结构体内部,按VHDL的语义规定,这两个信号赋值语句应并发执行。可以交换这两个语句的先后顺序,交换后不影响仿真结果。 在结构体SEQUENTIAL中,两个变量赋值语句V3和V4出现在进程体内。变量AV和BV也在该进程内定义,根据VHDL语义的规定,这两个变量赋值语句是顺序执行语句。顺序执行语句执行时的先后顺序与它们在源代码中写出的顺序完全相同。在这种情况下,语句V3和V4的先后顺序不能变换。 entity statements is port(x,y,z: in integer; bs:out integer): end statements: architecture concurrent of statements is signal as:integer; 23 本科生毕业设计(论文) begin as<=x*y; --语句s1 bs<=as + z; --语句s2 end concurrent; architecture sequential of statements is begin process(x,y,z): variable av,bv:integer; begin av:=x*y; --语句v3 bv:=av+z; --语句v4 end process; end sequential; 并行执行和顺序执行的概念不但出现在信号赋值语句中,而且出现在许多其他VHDL语法结构中,比如,若所有的进程语句直接写在结构体内,则它们一定并发执行。同一个结构体的多个进程语句不按源代码中写出的顺序执行,而是按它们的敏感信号发生变化的顺序执行。与信号赋值语句不同的是进程语句只能并发执行,而信号赋值语句即可以顺序执行,也可以并发执行。 3.3 VHDL语言开发环境MAX+PLUSⅡ介绍 VHDL语言可以在多种EDA工具设计环境中运行,Cadence, Menter, ALTERA等公司的工具均支持VHDL语言坏境。本文介绍ALTERA公司的MAX+PLUSII软件。 MAX+PLUSII是Altera公司推出的的第三代PLD开发系统(Altera第四代PLD开发系统被称为:Quartus,主要用于设计6万-100万门的大规模CPLD/FPGA)。通过此开发软件,用户可以任意对芯片进行编程、加密或用软件代替硬件,以满足自己的设计需要。但用户需要更改设计时,又可以方便地将以前的配置擦除,重新进行配置,从而大大提高了设计速度。 使用MAX+PLUSII的设计者不需精通器件内部的复杂结构。设计者可以使用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计自动转换成最终所需的格式。MAX+PLUSII具有运行速度快,界面统一,功能集中,易学易用等特点。它的器件系列从最初的Max系列到最新的FLEX 10K系列,从500门到10万门提供了满足各种条件需要的一系列器件。其中最为 24 本科生毕业设计(论文) 先进的FLEX系列采用独特的快速通道技术,使得器件的可预测性大大增强,速度也得到提高。MAX+PLUSII结合各种系列器件的物理结构,提供了各种的优化措施,可以在提高工作速度和资源利用率之间给以平衡,从而对大多数设计提供了解决方案。 MAX+PLUSII提供了原理图输入、文本输入(采用HDL语言)和波形输入等多种输入手段,并可以把这些输入方式任意组合使用。利用该工具所配备的编辑、编译、仿真、综合、芯片编程等功能,可将设计电路图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中(如FPGA芯片),做成ASIC芯片。用户首先对所做项目进行设计,明确设计目的、设计要求;然后利用原理图输入方式或文本输入方式进行设计输入;输入完成后,进行编译,若编译过程中发现错误,则检查设计输入,修改错误,直至没有错误发生;编译完成后,就可以进行仿真,检查设计是否达到设计要求,否则的话,还需重新检查设计输入;仿真结果达到要求后,就可以进行烧录,把设计程序下载到目标文件中;最后把芯片放到实际系统中进行验证、测试。图3.4给出了MAX+PLUSII进行FPGA开发的流程。 设计 输入 编译 仿真 烧录 验证 Altera Max+PlusⅡ 图3.4 MAX+PLUSII开发FPGA流程图 MAX+PLUSII借助EDIF网表文件,SRAM目标文件(.sof)、LPM、Verilog HDL和VHDL能与Cadence、Mentor Graphics、OrCAD、Synopsys、Synplicity和Viewlogic等公司提供的其它多种EDA工具接口。MAX+PLUSII编译器可以在PC机及各种工作平台上运行,这使MAX+PLUSII成为工业界中唯一与平台和结构无关的可编程逻辑设计环境。 25 本科生毕业设计(论文) 第4章 用FPGA实现数字信号处理算法 本章主要探讨了数字信号处理算法的FPGA实现,首先介绍了数字信号处理系统结构的四种实现方法;由于DFT及其快速算法FFT是信号处理领域的核心组成部分,本章重点讨论了FFT的四种硬件实现方法,并且通过设计基于FPGA的FFT算法来掌握如何使用FPGA来实现数字信号处理算法,重点设计实现了FFT算法中的蝶形处理单元,采用了一种高效乘法器算法模型设计蝶形处理单元中的旋转因子乘法器,用VHDL语言实现旋转因子乘法器和蝶形处理单元并分别进行了仿真。 4.1 数字信号处理的系统结构的实现方法 数字信号处理算法通常具有单指令多数据流的特性,即相同的代码对大量数据不断地重复执行,每组重复的代码称为一次迭代。在这类系统中,输入信号持续地、周期地被处理,每一次迭代给出相同的输出。与通常的计算问题不同的是,DSP算法大都应用于实时场合,即一边接受数据一边计算出结果。实时DSP系统要求硬件的处理器速度(以系统时钟频率为标志)满足应用的抽样率。当然,一旦系统达到了这一要求,进一步提高系统的速度就没有意义了。因此,实时处理并不意味着高速,它们是相互关联又相互独立的两个概念。语音处理、声纳等应用场合下,系统的抽样率通常较低(1KHz-100KHz),对DSP系统的处理速度要求相应也就较低。而雷达、图像处理等应用场合下,系统的抽样率则很高(1MHz- 1000MHz ),对DSP系统的处理能力的要求相应就很高。DSP系统的另一个指标是计算复杂度,当计算复杂度较高时,为了达到实时,对DSP系统的处理能力的要求也会很高。 可见,高速、实时信号处理是当代信号处理技术发展的一个显着特点,它需要极高的数据吞吐率和巨大的实时计算量。这种技术融合了信号处理理论、亚微米或深亚微米及低功耗VLSI技术和计算机技术,是一个具有确定应用环境的专用计算机处理系统。常见的高速、实时信号处理系统结构有四种: 1.流水线处理 当算法具有递归性、数据流规整、数据通信呈现局部传输特性时,采用流水线结构提高数据在网络中的通过率是一种有效的方法。实际流水线结构存在的一个常见问题是流水级间的“瓶颈”问题。在数字信号处理器中,为了尽量提高数 26 本科生毕业设计(论文) 字信号处理器的性能和数学运算的并行性,通常有一个独立的运算单元乘累加运算器。它一般单拍完成一次乘累加运算或者乘法运算或者将乘和累加运算采用pipeline的方式重叠执行。 2.并行处理 提高目前计算机系统性能最重要和最有效的方法是“大量地并行”。并行处理有两种含义:一是同时性,指两个或多个事件在同一时刻发生在多个硬件资源中;二是并发性,指两个或多个事件在同一时间间隔内发生在多个硬件资源中。通常,狭义地理解就是同时性,即从空间看有多少硬件资源在同时工作。显然,并行处理结构会提高系统的数据吞吐率和数据处理能力。 3.阵列结构 阵列处理器的出现标志着实时信号处理技术发展到了一个新的可以投入实用的阶段。阵列处理的最大优点在于最大限度地利用了VLSI技术的特点,采用高度并行-流水的结构形式,非常适合完成数据处理量大、运算规整、具有局部模块特性的实时信号处理和图像处理任务。目前,阵列结构主要有脉动(Systolic)阵和波前(Wavefront)阵两种形式。 4.RISC(简化指令系统计算机)结构 RISC结构是相对于复杂指令系统计算机CISC而言的,它是从80年代发展起来的新型计算机结构形式。RISC不仅简化指令,而且通过指令的简化使计算机结构更加简单合理,从而提高运算速度,其途径是减少程序执行的机器周期数。十多年来,RISC结构显示了巨大的结构优越性,越来越普遍地被人们接受为新的计算机体系结构原则。RISC结构的目的就是使计算机(处理器)的体系结构更加简单、紧凑、合理和有效。最优秀的RISC结构并行处理芯片首推英国INMOS公司的Transputer系列。1992年7月,用Transputer芯片构成的欧洲超级计算机工程宣告完成,以Transputer为核心的第五代智能计算机模型已在日本投入试运行。 目前,数字信号处理的硬件实现主要体现在下面几个方面: (1)广泛采用高速器件和并行处理方式,以提高速度,满足实时处理的要求。 (2)研制并生产一些专用浮点VLSI信号处理芯片,可提供极大的动态范围,同时也简化了硬件结构。 (3)超并行的阵列处理结构大量出现,可适应批量数据处理的要求,并且具有实时处理的速度。 (4)信号处理机大都具有可编程能力,灵活性极强。 (5)用标准化和模块化的集成技术研制新的VLSI器件,同时,广泛采用EDA技术进行设计和实现VLSI版图,缩短研制周期,提高经济效益。 27 本科生毕业设计(论文) 4.2 基于FPGA的FFT算法实现 数字信号处理可以采用多种实现方法。用单片机或DSP实现数字信号处理算法,速度仍然很慢,难以与快速的A/D器件匹配,在一些信号处理领域主要追求的目标是速度,实时性的要求非常高,而高速实时数字信号处理对系统性能要求很高,因此,几乎所有的通用DSP都难以实现这一要求。针对这种快速信号处理的要求及可编程逻辑器件的特点,可以采用可编程逻辑器件实现数字信号处理中的一些算法。可编程逻辑器件允许设计人员利用并行处理技术实现高速信号处理算法,并且只需单个器件就能实现期望的性能。 由于DFT及其快速算法FFT是信号处理领域的核心组成部分,下面通过设计基于FPGA的 FFT算法来了解FPGA在数字信号处理中的应用,重点设计实现FFT算法中的蝶形处理单元,采用一种基2 FFT算法。采用Altera公司推出的FPGA器件FLEX 10K来做硬件仿真。FLEX 10K器件是一款采用高性能结构体系的PLD器件,它也是一种结合强大内核性能,大存储带宽,数字信号处理(DSP)功能,高速I/O性能和模块化设计于一体的PLD,其内嵌的DSP模块具有很高的乘法运算速度。在用VHDL编程时可以用MegaWizard的方法指定用DSP模块生成乘法器,用这种乘法器来做蝶形,用多个蝶形来构成FFT运算级,通过循环即可实现FFT核心运算的并行化。用Altera公司的MAX+PLUSII软件做逻辑分析和波形分析。MAX+PLUSII软件具有很强的硬件仿真和逻辑分析功能,它可将用VHDL编写的硬件描述综合到FPGA中。 4.2.1 FFT处理器的实现框图 傅立叶变换实现时首先进行基2、基4分解,一般来说,如果算法使用基2实现,虽然使用的资源多了一些,但速度上的好处足以弥补。如果资源充足,使用基16、基8或基16/8复用模块,速度可以大大提高。一般FFT实现简单框图如图4.1所示。 外部数据输入 存储器1 运算模块(基2/4等) 存储器2 外部启动输入 FFT输出 控制模块 ROM 图4.1 FFT实现结构 28 本科生毕业设计(论文) 在图4.1中,运算模块即为基2/4/8/16模块或它们的复用模块,ROM表中存储的是N点旋转因子表。控制模块产生所有的控制信号,存储器1和2的读写地址、写使能、运算模块的启动信号及因子表的读地址等信号。当然对于运算模块为基16/8复用模块时,控制模块就需要产生模式选择信号,如对于运算模块是基4/2模块时,该信号就决定了内部运算模块是进行基4运算还是基2运算。存储器1作为当前输入标志对应输入N点数据的缓冲器,存储器2作为中间结果存储器,FPGA在数字信号处理中的应用与研究用于存储运算模块计算出的各通道的结果。在图中的各种地址、使能和数据的紧密配合,经过一定延时后输出计算结果及其对应指示标志。 外部输入为N点数据段流和启动信号,一方面,外部数据存入存储器1中,同时通过控制模块的控制,读出存储器1中的前段N点数据和ROM表中的因子及相关控制信号送入运算核心模块进行各个Pass的运算,每个Pass的输出都存入存储器2中,最后一个Pass的计算结果存入存储器2中,并在下一个启动头到来后,输出计算结果。对图5.2的实现,除去运算模块,关键是各个Pass数据因子读写地址及控制信号的配合。 4.2.2 复数乘法器的实现 实时信号处理硬件的实现通常需要高效的乘法器单元,因此乘法器的设计在数字信号处理中占有很重要的地位。radix-2蝶形处理器由一个复数加法器、一个复数减法器和一个旋转因子的复数乘法器组成,可见在FFT中设计一个高效的乘法器可以提高FFT的计算速度,提高运算效率,所以本文采用了一种高效乘法器算法来设计实现旋转因子复数乘法器。 旋转因子的复数乘法通常由4次实数乘法和6次实数加/减法运算实现,但经过运算的简化,可以只用3次实数乘法和3次实数加/减法运算实现复数乘法器。本文所设计的高效复数乘法器就是基于这种设计思想,高效复数乘法器的具体算法如下所述: 设复数旋转因子乘法RJIXjYCJS,因为C和S可以预先计算的,并可以储存在一个表中。所以我们可以储存下面的三个系数: C、CS、CS 有了这3个预先计算的因子,我们可以首先计算: EXY和ZCECXY 然后用: RCSYZ ICSXZ 29 本科生毕业设计(论文) 计算最后的乘积。我们可以验证这种算法的正确性: RCSYZCSYCXY CYSYCXCYCX ICSXZCSXCXY CXSXCXCYSXCY 这种算法使用了3次乘法、1次加法和2次减法,其代价是多使用了一个表。 由以上高效复数乘法器原理,可以设计实现旋转因子复数乘法器。旋转因子复数乘法器实现的VHDL代码见附录A。 对应的硬件实现的输入输出框图如下图所示: 图4.2旋转因子乘法器的输入输出框图 由旋转因子乘法器VHDL程序可见,输出经过刻度,具有与输入相同的数据格式。在MAX+PLUSII中进行仿真,给出激励,可得到仿真波形。输入值为 5045j,旋转因子CjS256ej9121j39时的仿真波形如下图所示: 图4.3旋转因子乘法器的VHDL仿真波形 在旋转因子乘法器的VHDL代码设计时,我们首先给旋转因子乘法器选择一些具体的设计参数。假如有8位二进制输入数据,系数就应该有8位,再加上符号,并且乘以ej9ej20。量化成8位,旋转因子就变成了CjS256ej9121j39。我们给定输入值为5045j,从理论上所计算的结果应为: 30 0 本科生毕业设计(论文) 5045jej95045j121j39/256 4295j7395/25616j28 由于使用高效乘法器算法计算复数乘法,3个因子分别为: C121,CS160,CS82 从上面可以看出,一般情况下CS和CS的表比C和S的表多一位精度,用VHDL设计旋转因子复数乘法器充分考虑到了这一点,可以从附录A:旋转因 子乘法器的VHDL代码实现看出。 图4.3是附录A中代码在MAX+PLUSⅡ中编译通过后,在Waveform Editor中加入输入激励后得到的仿真波形,其中clk是时钟信号,x_in和y_in分别是输入数据的实部与虚部,这里输入为5045j,所以所加输入激励为x_in=50、 y_in=45。c_in、cas_in、css_in就是所计算得出的因子C、CS、CS,这里 C121、CS160、CS82,仿真得到的输出分别为r_out=16、 i_out=28, 这和前面理论上算得的输出结果是完全相符的,从而证明了基于高效乘法器所设计的旋转因子复数乘法器的正确性。 4.2.3 蝶形运算单元的实现 蝶形运算单元是FFT处理器的基本单元,用来计算两点的FFT。由于蝶形运算单元是由一个复数加法器、一个复数减法器和一个旋转因子复数乘法器组成,所以利用上面设计的旋转因子复数乘法器和MAX+PLUSII中的lpm_add_sub模块可以设计实现蝶形运算单元。基-2 FFT蝶形运算单元的VHDL代码见附录B。从代码中可以看出,蝶形处理器是由一个加法器、一个减法器和一个实例化为组件的旋转因子乘法器实现的。对应硬件实现的输入输出框图如下图所示: 图4.4蝶形处理器的输入输出框图 对输入值为A2030j、B5045j、旋转因子CjS256ej9121j39时进行仿真。仿真波形如下图所示: 31 本科生毕业设计(论文) 图4.5 蝶形运算单元的VHDL仿真波形 图4.5中clk为时钟信号,Are_in和Aim_in是输入A2030j的实部与虚部,即输入激励Are_in=20、Aim_in=30;Bre_in和Bim_in是输入B5045j的实部与虚部,即输入激励Bre_in=50、Bim_in=45;c_in、cas_in、css_in是计算得出的因子C、CS、CS,这里C121、CS160、CS82;在MAX+PLUSⅡ中仿真得到的输出分别为Dre_out=36、Dim_out=58、Ere_out=4、Eim_out=20。 现在计算一下输入分别为A2030j、B5045j,旋转因子 CjS256je9 121j时蝶形运算理论上得到的计算结果:39ABej92030j5045j121j39/256 203j042957j395 /256 5836j 203j0j2168 203j0ABej92030j5045j121j39/256 42957j395 /256 2030j1628j42j 可见,所设计的蝶形处理器在MAX+PLUSII中对于输入A2030j、 B5045j、旋转因子CjS256ej9121j39进行仿真得到的输出结果和理 论上计算得到的结果是完全相符的,从而说明基于VHDL语言设计的蝶形处理单元的正确性。 4.2.4 数据存储单元RAM的实现 RAM是存储输入数据及中间运算结果的单元,每个碟形运算的输入、输出数据均要经过RAM的读写操作,因此,RAM的频繁读写操作速度对FFT的处理速度影响较大。为了加快FFT的运算速度,需要构造双端口RAM来加快数据传输的吞吐量,双端口RAM可配置在片内或片外。 32 本科生毕业设计(论文) 内置RAM是FPGA继其功能模块、I/O模块和布线资源之后的一种新增资源,到目前为止还很少应用。将RAM设置在FPGA内部不存在驱动和pad延时,速度极快,而且控制简单,不需占用片外电路板面积,可以提高系统的可靠性。 对于不同的器件结构,主要有二种内置RAM结构:块RAM和分配RAM。分配RAM可以置于芯片的任一部分,芯片主要功能块可直接配置为内置RAM,所以分配RAM一般较块RAM速度要快。此外,分配RAM可以配置为单端口或双端口,这种可选性也使分配RAM具有相对优势。为此,本设计应用FLEX 10K的内置RAM资源设计内置RAM,提高系统总体速度。设计如图4.6所示。 图4.6 数据存储单元RAM 通过设计的RAM单元实现输入数据以及中间运算结果的存取。进行蝶形运算时可以从RAM中把数据读入蝶形处理器中以进行蝶形运算,蝶形运算得到的运算结果存储在RAM中。 4.2.5 旋转因子存储器ROM的实现 旋转因子同样要参与蝶形运算,设计中将旋转因子预先存储在内置ROM中,容量应为8点FFT所需全部旋转因子数据。为了加快FFT运算速度,我们采用查表的方式来得到旋转因子。上面旋转因子乘法器的实现中已经提到ROM中可以储存下面的三个系数: C、CS、CS Altera推荐使用lpm_rom实现所有的ROM函数。lpm_rom函数只是用于FLEX 10K元器件。MAX+PLUSII编译器自动地在FLEX 10K元器件的EAB中实现这个函数的合适部分。 图4.7 2568 ROM 其中multi4.mif文件是一个预先设计好的文件,用来保存ROM中初始化的 33 本科生毕业设计(论文) 数据,可用文本编辑器建立,也可在初始化菜单中建立。可把C、CS、CS储存在ROM中。 4.2.6 控制单元的设计 通过一个有限状态机来实现控制器。通过有限状态机状态的输出分别控制各部分的工作。控制器实现对ROM因子表、随机存储器RAM和蝶形处理器运算单元的控制,使它们可以协调一致地工作,从而实现FFT运算的正确输出。 4.3 小结 本章通过设计一种基于FPGA的FFT探讨了FPGA在数字信号处理中的应用。本章重点设计实现了基于一种高效乘法器算法的旋转因子复数乘法器,并利用设计的旋转因子复数乘法器模块设计实现了蝶形运算单元,并且分别进行了仿真,通过比较可以看出仿真结果与理论值吻合的很好。本系统的最大优势在于利用FPGA器件丰富的逻辑资源,内嵌的RAM, ROM块及其灵活的可编程特性使运算速度较传统方法有了很大提高。当然付出的代价是用这种并行的结构需求的硬件资源很多。 随着芯片集成度的不断提高,用这种并行结构实现的FFT运算其优越性将越来越明显。而且用这种结构实现的FFT很容易扩展,只需要增加蝶形的个数和循环次数即可。基于FPGA的FFT/IFFT处理器由于其硬件上的并行性,速度远远快于一般的通用DSP。FPGA具有成千上万的查找表和触发器,因此,FPGA平台可以利用更低的成本达到比通用DSP更快的速度。采用FPGA技术,还可以获得高性能,满足成本要求,并享有快速有效地对新设计进行优化的灵活性。这种基于并行算法的FFT/IFFT处理器,可以广泛应用在高速信号处理系统中。并且由FFT处理器的设计可以看出,前端的可编程数字信号处理算法,例如FIR和IIR滤波器,都可以利用FPGA构建。 34 本科生毕业设计(论文) 第5章 结 论 近年来,随着集成芯片制造技术的发展,FPGA在速度和集成度两方面得到了飞速提高。由于它具有功耗低、体积小、集成度高、速度快、开发周期短、费用低、用户可定义功能及可重复编程和擦写等许多优点,应用领域不断扩大,越来越多的电子系统开始采用可编程逻辑器件来实现数字信号处理。与通用DSP解决方案相比,FPGA器件在不牺牲灵活性的条件下,提供了更高的性能,从而使通用DSP芯片难于完成的一些时序组合逻辑和某些简单的大运算量的数学计算得以实现。 本文主要探讨了FPGA在数字信号处理中的应用。由于只有掌握了基于VHDL语言的数字系统的设计才能够用FPGA实现数字信号处理,本文主要讨论了用硬件描述语言HDL来描述系统级设计、寄存器传输级设计以及高层次综合方法。本文首先介绍了硬件描述语言及其设计方法,其次介绍硬件描述语言中的VHDL语言及其设计优点、设计特点及组成,最后介绍了硬件描述语言的开发环境MAX+PLUSII。由于采用高层次设计工具,可以有效提高数字系统设计能力,本论文详细阐述了数字集成系统的高层次设计方法,讨论了数字系统设计层次的划分和数字系统的自顶向下的设计方法,探讨了数字集成系统的系统级设计和寄存器传输级设计。采用数字集成系统的高层次综合方法,可以从系统级行为描述出发,由EDA工具经过一系列自动转换,生成寄存器传输级描述。 本文提出了用FPGA实现数字信号处理的一种设计思想,重点设计实现了FFT算法中的蝶形处理单元。本文采用了一种高效乘法器算法设计实现了蝶形处理单元中的旋转因子乘法器,从而提高了蝶形处理器的运算速度,降低了运算复杂度。本文中FFT设计采用了VHDL实现,采用内置双端口RAM、ROM单元,加快系统总体速度,实现了存取数据、旋转因子计算、蝶形计算并进行了仿真。 随着高速数字信号处理的要求,FPGA在数字信号处理中会得到越来越广泛的使用。在具体应用过程中会存在一些实际问题,如有限字长影响、并行和串行结构的选择和FPGA内部结构对设计的影响等。这些问题在实际应用中都需要慎重考虑。 1.有限字长的影响 在系统设计中,无论是采用通用DSP芯片还是采用FPGA器件,都必须考虑有限字长的影响,一方面可以选用合适的运算结构,尽量减少有限字长效应,另一方面可以采用合适的字长以降低运算误差。FPGA器件的字长可以根据需要任 35 本科生毕业设计(论文) 意指定,但字长越大,占用的片内资源就越多,编译、仿真时间和系统成本也会因之而上升。字长的增加会导致片内资源占用率呈几何级数增大。 2.并行处理与串行处理 不同的应用领域,对数字信号处理速度和成本的要求也不相同,FPGA器件能够以最宽的动态范围满足各种需求。数字信号处理可以采用2种设计思路,一种思路是将设计重点放在处理速度上,旨在达到较高的MSPS值,满足高速应用,另外一种思路是将设计重点定位于FPGA芯片的资源使用率上,以较低的成本满足对低速处理的要求。实现这两种设计思想的途径是分别采用并行处理和串行处理结构。 3.FPGA的内部结构对DSP设计影响 DSP的设计方案对硬件的需求应该与所选用的FPGA的内部结构特点相匹配,使系统性能达到最佳。 数字信号处理技术是现代通信的核心技术之一,未来的通信将越来越依赖数字信号处理技术的发展。现代通信技术的发展要求将先进的通信技术、微电子技术和计算机技术结合在一起。可以设想,在使用了现代DSP技术的通信系统中,原先不能互联的多种通信体制将综合为一个通用的通信体制,人们可以摆脱终端的束缚,实现“一机在手,漫游天下”的梦想。这种崭新的通信体制将给我们的生活方式,甚至思维模式带来巨大的变化。 用FPGA实现数字信号处理在现代通信中将得到很广泛的应用。DSP IP是3G无线通信、数字音频和视频图像处理、广播、多信道多点分布服务(MMDS)以及正交频分复用(OFDM)系统等新兴应用的理想选择。可编程逻辑和软IP核的灵活性让各个公司能够让他们的设计快速地适应新标准。 目前,Altera已经设计实现了DSP功能块。Altera的DSP IP套装包括标准DSP功能(如Turbo译码器)。IP核是静态参数化的,这样MegaWizard Plug-In Manager根据给定的一组参数生成最高效的硬件。这些插件允许设计者无需改变设计源代码就可以定制IP。而且,软IP能够立刻导入新的Altera FPGA器件系列中。这一解决方案可满足设计和生产部门两方面的要求。 可见,硬件和软件设计者可以利用可编程逻辑开发各种DSP应用解决方案,可编程解决方案可以更好的适应快速变化的标准、协议和性能需求。随着新的FPGA体系的出现,DSP IP核和工具数量的增加,采用可编程逻辑的DSP应用继续增加。FPGA器件能够以高速、实时、低成本、高灵活性的优点应用于数字信号处理领域,它可以完全取代通用DSP芯片或作为通用DSP芯片的协处理器进行工作。 36 本科生毕业设计(论文) 参考文献 [1] 王小军.VHDL简明教程.北京:清华大学出版社,1997:55-80 [2] 陈雪松,腾立中.VHDL入门与应用.北京:人民邮电出版社,2000:80-95 [3] 潘松,王国栋.VHDL实用教材.成都:电子科技大学出版社,2000:100-125 [4] 孟宪元.可编程ASIC集成数字系统.北京:电子工业出版社,1998:73-82 [5] 王毅平.VHDL编程与仿真.北京:北京邮电出版社,2000:224-243 [6] 北京理工大学ASIC研究所.VHDL语言100例详解.北京:清华大学出版社, 1999:189-210 [7] 李雁.日新月异EDA技术与VHDL语言.计算机世界,1996(47):105-107 [8] 杨向萍.提高FFT运算速度的几项措施. 东华大学学报(自然科学版), 1999,(01):75-78 [9] 王林泉,皮亦鸣,陈晓宁,肖欣. 基于FPGA的超高速FFT硬件实现. 电子科 技大学学报, 2005,(02):14-21 [10] 赵忠武,陈禾,韩月秋.基于FPGA的32位浮点FFT处理器的设计. 电讯技术, 2003,(06):38-44 [11] 罗雪苟,詹阳.用FPGA实现FFT算法. 今日电子,2002,(02):121-125 [12] 马维祯.快速傅里叶变换FFT的发展现状──纪念FFT发表30周年. 华南理 工大学学报(自然科学版), 1995,(05):5-9 [13] 刘卫新.实现FFT整序方法的研究. 南京理工大学,2003:223-228 [14] 于效宇.基于FPGA的FFT处理器的实现. 哈尔滨理工大学,2005:150-155 [15] 何锋.VHDL语言中信号设置的不同方式及注意事项. 半导体技术, 2002,(03):173-176 [16] 周海斌,刘刚.基于FPGA的高速实时FFT处理器设计[J]电子工程师, 2005,(01) [17] 易清明,刘伟平,周伟贤. 基于FPGA的基-6FFT算法的设计与实现[J]电讯 技术 , 2004,(03).286-298 [18] 李素芝,万建伟.时域离散信号处理.第一版.长沙:国防科技大学出版社, 1994:1-4 [19] 程佩青.数字信号处理教程.第二版.北京:清华大学出版社,2001: 87-91 [20] 黄正瑾,徐坚等著.CPLD系统设计技术入门与应用.第一版.成都:电子工业出 版社,2002: 203-209 [21] 戴明祯.数字信号处理的硬件实现.第一版.北京:航空工业出版社,1998:1-50 37 本科生毕业设计(论文) [22] 康华光,邹寿彬.电子技术基础(数字部分).第四版.北京:高等教育出版社, 1998,323-340 [23] 曾繁泰,陈美金.VHDL程序设计.第二版.北京:清华大学出版社,2001,313-320 [24] 潘松,王国栋.VHDL实用教程.第一版.成都:电子科技大学出版社,2000,9-10 [25] 韩雁.专用集成电路设计技术基础.第一版.成都:电子科技大学出版社,2000, 110-133 [26] A.V.奥本海姆,R.W.谢弗著.离散时间信号处理(Discrete-Time Signal Processing).黄建国,刘树棠译.第一版.北京:科学出版社,2000, 489-494 [27] 陈品,王宏禹,邱天爽.基于分数阶傅立叶变换的模糊函数的研究.信号处理, 2003,19(6):499-502 [28] 廖裕评,陆瑞强.数字电路设计一使用MAX+plus II.第一版.北京:清华大学出 版社,2001, 19-46 [29] 王志华,邓仰东.数字集成系统的结构化设计与高层次综合.第一版.北京:清华 大学出版社,2001, 1-354 [30] 赵雅兴.FPGA原理、设计与应用.第一版.天津:天津大学出版社,1999,36-38 [31] 吴繁红,井新宇.用CPLD/FPGA设计A/D采样控制器.电子工程师, 2002,28(2),37-38 [32] 潘松,黄继业.EDA技术实用教程.第一版.北京:科学出版社,2002, 10-15 [33] Sanjit,K.Mitra, Digital Signal Processing-A Computer-Based Approach.2001, [34] J.L.Guo.Efficient parallel adder based design for one-dimensional discrete cosine transform.IEEE Proceedings Circuits,Devices and Systems.2000,147(5):276-282 [35] Yun-Nan Chang, Keshab.Parhi.An Efficient Pipelined FFT Architecture.IEEETra- ns. On Circuits and Systems,2003,50(6):322-325 [36] M.Huang, R.Kwok, S.-P.Chan. Simplified and accurate power-analysis methodfor deep-submicron ASIC designs. IEEE Proceedings Circuits, Devices and Systems. 2000, 147(3): 175-182 [37] Pease M.C.Organization of large scale Fourier processors.JACM,1969,474-482 [38] W.R.Knight and R.Kaiser.A Simple Fiexed-Point Error Bound for the fast Foutier Transform.IEEE Trans.Acoustics,Speech and Signal Proc.Dec,1979,615-620 38 本科生毕业设计(论文) 致 谢 经过半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。 在这里首先要感谢我的导师于玲老师。于玲老师平日里工作繁多,但在我做毕业设计的每个阶段,从查阅资料,设计草案的确定和修改,中期检查,后期详细设计,装配程序等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,但是于老师仍然细心地纠正设计中的错误。除了敬佩于老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。 其次要感谢和我一组的同学们,他们给了我很大的帮助,如果没有他们的努力,此次设计的完成将变得非常困难。 然后还要感谢大学四年来所有的老师,为我们打下专业知识的基础;同时还要感谢所有的同学们,正是因为有了你们的支持和鼓励。此次毕业设计才会顺利完成。 最后感谢电子与信息工程学院和我的母校—辽宁工业大学四年来对我的大力栽培。 39 本科生毕业设计(论文) 附 录Ⅰ 复数乘法器VHDL代码实现 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity ccmul is generic(w2 :integer:=17; w1 :integer:=9; w :integer:=8 ); port(x_in :in std_logic_vector(w-1 downto 0); y_in :in std_logic_vector(w-1 downto 0); cos_in :in std_logic_vector(w-1 downto 0); cps_in :in std_logic_vector(w1-1 downto 0); cms_in :in std_logic_vector(w1-1 downto 0); r_out :out std_logic_vector(w downto 0); i_out :out std_logic_vector(w downto 0) ); end ccmul; architecture arch_ccmul of ccmul is signal x,y,cos :std_logic_vector(w-1 downto 0); signal cps,cms :std_logic_vector(w1-1 downto 0); signal xmy :std_logic_vector(w1-1 downto 0); signal z,csy,csx :std_logic_vector(w2-1 downto 0); signal r,i :std_logic_vector(w2-1 downto 0); function ssplus( 40 本科生毕业设计(论文) x1 :std_logic_vector(w-1 downto 0); x2 :std_logic_vector(w-1 downto 0) ) return std_logic_vector is variable y :std_logic_vector(w1-1 downto 0); variable plus :std_logic_vector(w-1 downto 0); begin plus :=x1+x2; if(x1(x1'high)/=x2(x2'high))then y :=plus(plus'high)&'0'&plus(w-2 downto 0); else y :=x1(x1'high)+ end if; return y; end ssplus; function ssminu( x1:std_logic_vector(w-1 downto 0); x2:std_logic_vector(w-1 downto 0) ) return std_logic_vector is variable x3 :std_logic_vector(w-1 downto 0); variable y :std_logic_vector(w1-1 downto 0); variable plus :std_logic_vector(w-1 downto 0); begin x3 :=not(x2)+1; plus:=x1+x3; if(x1(x1'high)=x2(x2'high))then y :=plus(plus'high)+ else y :=x1(x1'high)+ end if; return y; end ssminu; 41 本科生毕业设计(论文) function ssplus2( x1:std_logic_vector(w2-1 downto 0); x2:std_logic_vector(w2-1 downto 0) ) return std_logic_vector is variable y :std_logic_vector(w2-1 downto 0); variable plus :std_logic_vector(w2-1 downto 0); begin plus :=x1+x2; return plus; end ssplus2; function ssminu2( x1:std_logic_vector(w2-1 downto 0); x2:std_logic_vector(w2-1 downto 0) ) return std_logic_vector is variable x3 :std_logic_vector(w2-1 downto 0); variable y :std_logic_vector(w2-1 downto 0); variable plus :std_logic_vector(w2-1 downto 0); begin x3:=not(x2)+1; plus:=x1+x3; return plus; end ssminu2; function ssmul( x1:std_logic_vector(w1-1 downto 0); x2:std_logic_vector(w-1 downto 0) ) return std_logic_vector is variable y :std_logic_vector(w2-1 downto 0); variable expx1 :std_logic_vector(w1-1 downto 0); 42 本科生毕业设计(论文) variable expx2 :std_logic_vector(w-1 downto 0); variable mul :std_logic_vector(w2-1 downto 0); begin if(x1(x1'high)='1')then expx1 :=not('1'&x1(w1-2 downto 0))-1; else expx1 :=x1; end if; if(x2(x2'high)='1')then expx2 :=not('1'&x2(w-2 downto 0))-1; else expx2 :=x2; end if; mul :=expx1*expx2; if(x1(x1'high)/=x2(x2'high))then y :=not(mul)+1; else y :=mul; end if; return y; end ssmul; begin x <=x_in; y <=y_in; cos <=cos_in; cps <=cps_in; cms <=cms_in; xmy <=ssminu(x,y); z <=ssmul(xmy,cos); csy <=ssmul(cms,y); r <=ssplus2(csy,z); csx <=ssmul(cps,x); 43 本科生毕业设计(论文) i <=ssminu2(csx,z); r_out <=r(w2-2 downto w-1); i_out <=i(w2-2 downto w-1); end architecture; 蝶形运算单元的VHDL代码实现 library lpm; use lpm.lpm_components.all; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; package mul_package is component factor_multiply generic(w2: integer:=17; w1:integer:=9; w: integer:=8); port( clk: in std_logic; x_in,y_in,c_in: in std_logic_vector(w-1 downto 0); cas_in,css_in:in std_logic_vector(w1-1 downto 0); r_out,i_out: out std_logic_vector(w-1 downto 0)); end component; end mul_package; library work; use work.mul_package.all; library lpm; use lpm.lpm_components.all; 44 本科生毕业设计(论文) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity butterfly is generic(w2: integer:=17; w1:integer:=9; w: integer:=8); port(cik:in std_1ogic; are_in,aim_in,bre_in,bim_in,c_in:in std_logic_vector(w-1 downto0); --8 bit inputs cas_in,css_in:in std_logic_vector(w1-1 downto 0); --9 bit coefficient; dre_out,dim_out,ere_out,eim_out: out std_logic_vector(w-1 downto 0)); --8 bit result; end butterfly; architecture a of butterfly is signal r,i:std_logic_vector(w-1 downto 0); signal dre,dim,ere,eim:std_logic_vector(w-1 downto 0); begin --r+j i factor_multiply_1:factor_multiply generic map(w2=>w2,w1=>w1,w=>w) port map(clk=>clk,x_in=>bre_in,y_in=>bim_ in,c_in=>c_in,cas_in=>cas_in, css_in=>css_in,r_out=>r,i_out=>i); sub_1:lpm_add_sub generic map(lpm_width=>w1,lpm_direction=>\"sub\ lpm_ representation=>\"signed\") port map(dataa=>are_in,datab=>r,result=>dre); sub_2: lpm_add_sub generic map(lpm_width=>w1,lpm_direction=>\"sub\ lpm_representation=>\"signed\") 45 本科生毕业设计(论文) port map(dataa=>aim_in,datab=>i,result=>dim); add_1:lpm_add_sub generic map(lpm_width=>w1,lpm_direction=>\"add\ lpm_ representation=>\"signed\") port map(dataa=>are_in,datab=>r,result=>ere); add_2: lpm_add_sub generic map(lpm_width=>w1,lpm_direction=>\"add\lpm representation=>\"signed\") port map(dataa=>aim_in,datab=>i,result=>eim); process(r,i) begin wait until clk'event'and clk='1'; dre_out<=dre; dim_out<=dim; ere_out<=ere; eim_out<=eim; end process; end a; 46 本科生毕业设计(论文) 附 录Ⅱ 英文翻译 The Design of Automatic Kilowatt hour Meter Reading System According to the plan of building the middle-class residence decided by building department of China, the engineering to implement the water,electricity, warm, etc. It was suggested by the incumbency that a system of reading the meter data from long distance automatically should be designed with using the existing campus network. The traditional electric meter system has many shortcomings such as the measurement not to be precise, wasting time for man to copy the tables, the tedious statistics and so on. Along with network technology development, network already exists in everywhere, people's life style also along with it change. In view of traditional old-style electromagnetism electric meter shortcoming and insufficiency, and unified the current network technology, this article studies and designs a set to transmit based on the Ethernet automatically copies the table system. And emphatically introduces the hardware and software and communication designs of Energy Remote Terminal Unit. The subject titled by < The realization method is also explained in hardware and software programming by this article. This system also has network factionist can exchange data with up machine by interface RS485.this system is on probation in some communities. It has strong points of a curate real-time, reliable operate, strong extended ability. So it is 47 本科生毕业设计(论文) worth to popularize in communities towards intelligent and modern management. With the development of electron and computer,automatic meter reading system will be put into reality. This article aims at kilowatt-hour meter for house or for office. Banded the working principle and the real working conditions of mechanical kilowatt hour meter; I designed an automatic kilowatt hour meter reading system. The strong point of this system is: low cost, stable working and easy to install. The article gives an all-around design of this system. It expatiates on designs of data collection, data communication mode and computer software. It introduces the generality and the reliability of this system in brief. The collecting Energy Remote Terminal Unit is the necessary equipment of the energy data system. It has been a key link of the alteration in the power automation system with the energy data collecting system of automated, reliable, maintenance convenient. This thesis is based on the design for Energy Remote Terminal Unit. In this thesis, the idea of real-time embedded system is applied in traditional energy data collecting system. The system is proposed as well as designed considering the current status of automatic reading meter technology, network technology and embedded system technology in recent years. Energy Remote Terminal Unit for the communication of main station and substation is put forward based on TCP/IP (PRMP, Power Remote Measurement System Protocol. The innovating technologies are proved to be credibility and efficiency during system implementing. And the thesis examines the various algorithms that are currently applied to electrical quantity transducer. It identifies and proposes a magnitude algorithm, and frequency measurement algorithm, both of which are based on the Fourier algorithm. The proposed magnitude algorithm can eliminate the decaying DC component, and the proposed frequency measurement algorithm can produce a high accurate output. The new magnitude algorithm does not require the decaying constant z to be known in advance. The frequency measurement algorithm can accurately track the system frequency by adjusting the amendatory coefficient in real time according to the error of the original Fourier frequency measurement algorithm. During the study of automatic kilowatt hour meter reading system, solved the following technology of key importance: (1) Finished data convector without rework the kilowatt hour meter. (2) According to power supply, I designed a storage mode consistent with the work of kilowatt hour meter. 48 本科生毕业设计(论文) (3) (4) (5) (6) (7) Designed communication network and communication control protocol which adapted to the automatic kilowatt hour meter reading system. This paper finished the following works on the automatic kilowatt hour meter reading system: Finished the design of hardware and the design of software of the System forehead. Finished the d ensign of communication interface. Brie analyzed how to communicate through electric RS485. I designed a new way of delay determinant. To demodulate. And finished the design of data transceiver. (8) (9) (10) The article finished the design of synthetically management software of AMRS. According to the designs, I finished the hardware and the software. And I tested the work of system. Based on RS485,I designed model of remote reading and remote query, which will be perfected in the future. 译文:电表自动抄录系统的设计 根据国家建设部小康型住宅小区的规划,要求小区新建和旧房改造工程逐步实现水、电、暖、气等耗能数据计算机统一管理。利用现有的网络资源,实现用电网络管理的无线远程自动抄录计费系统。 以往的电表系统具有计量不精确、人工抄表费时费力、统计繁琐等缺点。随着网络技术的发展,网络己经无处不在,人们的生活方式也随之改变。针对传统旧式电磁电度表的缺点和不足,结合当前的网络技术,本文研究并设计了一种智能单相电表及其基于以网络传输的自动抄表、计费系统,并且介绍了远程电能量数据终端的软硬件及通信方面的设计。 据调查,在我国现有的远程自动抄表系统中,很少采用重新设计的方案,大多缘于节约费用,而采用在老式计量表的基础上加以改造的方法。随着电子技术、传感技术、自动控制技术和计算机技术的发展,单片机技术作为计算机技术的一个分支,广泛应用于工业控制、智能化仪器仪表、家用电器,甚至电子玩具等各个领域。考虑到本题设计目的不仅为了实际应用,同时还要作为教学模型,系统采用89C51单片机实现电力参数的交流采样,通过算法运算后获得的电压、电流、 49 本科生毕业设计(论文) 有功功率、功率因数等电力参数有较好的精确度和稳定性。通过LED显示器显示电压、电流、电度的实时值,当用户欠费、过压30%、过流30%、欠压30%时进行声光报警,并能通过串行口结合有关通信协议,实时与管理计算机进行通信实现远程户外抄表。 远传计量收费系统的设计原理并从硬件电路和软件编程两方面说明了实现方法, 该系统具有网络功能,通过RS485接口,与上位机进行数据交换。该系统具有准确、运行可靠、扩容能力强等优点,对于城市小区日趋智能化小区及物业管理日趋现代化具有较高的推广价值。 随着电子与计算机技术的发展,实现各种用户仪表的自动计费即将成为现实。本文针对单位、小区的家庭用户电表和单位办公电表,结合普通机械电表的工作原理和实际工作环境,设计了一种实用的智能电表计费系统。该系统具有成本低廉、工作性能稳定可靠、系统安装方便等特点。 本文对智能电表进行了较全面的设计,着重对该系统的前端数据采集、数据通信方式、计算机软件等方面的设计进行了介绍,并对系统的通用性和可靠性进行了简要的分析。 电能量远程终端(Energy Remote Terminal Unit,以下简称ERTU)是电能量计量计费自动化系统中的重要组成部分。拥有自动化程度高、运行可靠、维护方便的电能量计量计费系统已经成为电力系统自动化改造中的一个重要环节。 本课题以远程电量数据终端的设计为背景,针对实际工程的应用要求,将实时嵌入式系统的概念引入传统的电能量采集系统。系统充分利用了RTOS多任务能力和模块可裁减功能,在执行效率、程序体积、通信处理能力上具有强大的优势。在设计和实现系统过程中,针对子、主站通信,定义了一套基于TCP/IP上应用协议(PRMP, Power Remote Measurement System Protocol ),有效解决通信问题。并且着重分析了电量采集器的各种算法,指出了它们存在的问题。基于傅立叶算法的理论推导,提出了能消除衰减直流分量的幅值算法和高精度的测频算法。新的幅值算法对衰减时间常数丁未作假设和要求;测频算法根据传统傅氏测频算法存在的误差,通过实时调整修正系数的方法,实现了高精度地跟踪系统频率。 在电表自动抄录系统的研制过程中,解决了如下关键技术: (1) 在以89C51为核心的电表内部做了相应改动的前提下,完成了电表的数字化转换。 (2) 根据电力线的供电变化情况,设计了与电表工作相一致的前端数据存储方式。 (3) 设计了适合电表计费系统的通信网络结构和通信控制协议。 (4) 对电表计费系统的设计主要完成了以下几方面的工作: 50 本科生毕业设计(论文) (5) 信号采集前端的硬件设计及单片机软件设计。 (6) 通信接口的设计。 (7) 对如何利用RS485进行数据传输,做了简要分析,设计了并完成了与上位机进行数据交换的设计。 (8) 实现了电表自动计费系统综合软件的设计。 (9) 按照系统的设计,完成了硬件原理样机的制作和软件的编制,对系统工作性能进行了测试。 (10) 对基于RS485的远程数据获取和远程查询模式进行的设计,有待于在后续工作中进一步完善。 51 因篇幅问题不能全部显示,请点此查看更多更全内容