毕业设计论文基于FPGA的伪随机码研究.doc
本 科 毕 业 设 计 第 39 页 共 39 页1 绪论近年来,以FPGA为代表的可编程ASIC器件发展极快,从最初的数百个门发展到现今的数百万个门,系列品种增多, 功能更强, 速度更快, 功耗更小, 价格更低。因此,愈来愈受到电子界的青睐, 开发基于FPGA的数字集成系统设计的新技术方法将逐渐成为主流。FPGA技术发展出现几个新动向:一是在FPGA中嵌人处理器(包括CPU、微处理器、微控制器);二是高速并行I/O口;三是实现数字信号处理功能。针对以上动态, 本课题通过对FPGA技术的研究, 对在FPGA中实现伪随机序列发生器做了有益的研究与实践, 设计中充分运用了自上而下、结构化、模块化设计思想。伪随机序列具有良好的随机性, 它的相关函数接近白噪声的相关函数(函数) , 即有窄的高峰或宽的功率谱密度, 使它易于从其他信号或干扰中分离出来。伪随机序列的伪随机性表现在: 预先的可确定性、可重复性, 使它易于实现相关接收和匹配接收, 故有良好的抗干扰性能。伪随机序列(又称伪噪声序列) 广泛应用于通信、雷达、导航等重要的技术领域。近年来, 在自动控制、计算机、声学、光学测量、数字式跟踪和测距系统, 以及数字网络系统的故障分析检测也得到广泛的应用。1.1 课题背景在现代工程实践中, 伪随机信号在移动通信、导航、雷达和保密通信、通信系统性能的测量等领域中有着广泛的应用。例如, 在连续波雷达中可用作测距信号, 在遥控系统中可用作遥控信号, 在多址通信中可用作地址信号, 在扩频通信系统中, 抗干扰、抗噪声、抗截获、信息数据隐蔽和保密、抗衰落、多址通信、实现同步与捕获等都与扩频码的设计密切相关。 在数字通信中可用作群同步信号, 还可用作噪声源以及在保密通信中的加密作用等。伪随机发生器在测距、通信等领域的应用日益受到人们重视。EDA(电子设计自动化) 技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑综合及优化、逻辑仿真,直至对特定目标芯片的适配编译、逻辑映像和编程下载等工作(本文选用的开发工具为Altera 公司的Quartus) 。EDA的仿真测试技术只需要通过计算机就能对所设计的电子系统从各种不同层次的系统性能特点完成一系列准确的测试与仿真操作,大大提高了大规模系统电子设计的自动化程度。设计者的工作仅限于利用软件方式,即利用硬件描述语言(如VHDL)来完成对系统硬件功能的描述,在EDA 工具的帮助下就可以得到最后的设计结果,这使得对整个硬件系统的设计和修改过程如同完成软件设计一样方便、高效。基于EDA技术的设计方法为“自顶向下”设计,其步骤是采用可完全独立于目标器件芯片物理结构的硬件描述语言,在系统的基本功能或行为级上对设计的产品进行行为描述和定义,结合多层次的仿真技术,在确保设计的可行性与正确性的前提下成功确认。然后利用EDA工具的逻辑综合功能,把功能描述转换为某一具体目标芯片的网表文件,经编程器下载到可编程目标芯片FPGA芯片中,使该芯片能够实现设计要求的功能。这样,一块芯片就是一个数字电路系统。随着可编程逻辑器件(FPGA)在电子领域越来越广泛的应用,在很多高速设计和高速测试的场合下,我们希望能够在FPGA中直接实现伪随机序列发生器。传统的大数乘法产生伪随机数的方法不但时钟频率不能太高,并且需要消耗FPGA 内大量的逻辑资源。本文将给出在FPGA内利用线性反馈移位寄存器( Linear Feedback Shift Registers)结构实现伪随机序列发生器的方法;这种方法不仅结构简单,易于实现,而且所产生的伪随机序列具有周期长,随机特性好的特点。2 伪随机序列简述2.1伪随机序列伪随机码, 又称伪随机序列, 是一种可以预先确定并可以重复地产生和复制, 又具有随机统计特性的二进制码序列。伪随机序列的特性,一般情况下为: 信号必须具有尖锐的自相关函数, 且互相关函数应接近于零。 有足够长的码周期和尽可能大的复杂度,以确保抗侦破、抗干扰的要求。 有足够多的独立地址数, 以满足码分多址的要求。 具有近似噪声的频谱, 即近似连续谱且均匀分布。 工程上易于产生、加工、复制和控制。通常采用的二电平(0, 1) 伪随机序列的结构已预先确定, 但它们都具有类似白噪声的相关特性, 只是幅度概率分布不再服从高斯分布。伪随机序列通常具有类似于随机序列的性质, 归纳起来有下列三点: 平衡特性: 每一周期内0和1出现的次数近似相等。 游程特性: 把随机序列中连续出现0或1的子序列称为游程。连续的0或1的个数称为游程长度。随机序列中长度为1的游程约占游程总数的1/2, 长度为2的游程约占游程总数的1/ 4, 长度为3的游程约占游程总数的1/8,即每周期内,长度为n比特的游程出现的次数比长度为n+l比特游程出现的次数多一倍。 相关特性: 随机序列的自相关函数具有类似于白噪声自相关函数的性质, 一般具有双值自相关函数。伪随机序列由0 和1 两个元素组成的二元(或二进制) 序列是数的序列, 它可以用波形进行模拟。通常把二元序列(或波形) 中的元素称做比特或码元, 而把它的持续时间称做比特长度。一个序列中元素0和1顺序排列的结构(排列次序) 如果具有周期性则称为周期序列, 否则称为随机序列。随机序列有三个特点:(1) 序列元素的排列次序无法预先确定、也不可能重复产生和复制, 也就是说它是非周期性的。(2) 序列中0 和1 的出现次数大致相等,n个0(或1) 连续出现的次数比n+1个0(或1) 连续出现的次数约多一倍。(3) 序列具有类似于白噪声的自相关函数即冲激函数(S)。以上三种特性是衡量序列随机特性的标准。如果一个序列, 它的结构一方面是可以预先确定的, 并且是可以重复产生和复制的; 另一方面它又具有随机序列的随机特性, 这种序列就称为伪随机二元序列(Pseudo Random Binary SequencePRBS)。伪随机序列是一种周期序列, 所以对它的随机特性的衡量标准要作相应改变:(1) 在一个周期内, 两种不同元素出现的次数最多相差一次均衡性特性。(2) 在一个周期内, 长度为n 的游程(一个序列中取值相同的那些连在一起的元素合称为一个“游程”) 出现的次数比长度为n+1的游程出现的次数多一倍游程分布特性。(3) 序列具有双值自相关函数随机特性, 即= 1 当 j = 0 时 = K 当 时 (2-1)其中P 为序列的周期(或长度) , K < 1。当K 接近于0时, 这种双值自相关函数特性很接近白噪声的自相关函数特性, 所以有时又把双值自相关函数序列称做伪噪声序列。2.2m 序列二进制的m 序列是一种重要的伪随机序列, 结构简单, 实现方便。有优良的自相关特性,有时称为伪噪声(PN)序列。伪的意思是说这种码是周期性的序列,易于产生和复制,但其随机性接近于噪声或随机序列。在现代工程实践中, m 序列在通讯、导航、雷达、通信系统性能的测量等领域中有着广泛的应用。例如, 在连续波雷达中可用作测距信号, 在遥控系统中可用作遥控信号, 在多址通信中可用作地址信号, 在数字通信中可用作群同步信号, 还可用作噪声源及在保密通信中起加密作用等。伪噪声发生器在测距、通信等领域的应用日益受到人们重视。有关产生m 序列发生器的方法很多。其中,用通用数字器件构成的特点是速度可以很快, 但硬件电路不便修改特性, 只能产生单一n 级m 序列; 用软件方式构成的特点是采用灵活的数据查询方式可以获得任意级数n 的本原多项式系数, 从而实现m 序列的产生, 但速度受到单片机工作速度的限制,而FPGA 具有硬件电路实现的优点, 又具有设计上的灵活性, 并且由于FPGA 便于实现大规模的数字系统, 其中内嵌了一定数量的。为此, 笔者将m 序列的本原多项式系数以表格的形式存储于FPGA 的中, 根据级数n 来查询本原多项式系数表, 以得到其相应的本原多项式系数, 由此设计出m 序列发生器。产生伪随机序列可以有不同的方法, 而移位寄存器(移存器) 是实用中最常用的。移存器是由n 个串接的双态存储器(寄存器) 和一个移位时钟发生器以及一个由模2 加法器组成的反馈逻辑线路组成, 每个双态存储器称为移存器的级, 每一级只能有两种不同状态分别用0 和1 表示。移位时钟到来时使每一级的存数(即状态) 向下一级移动, 成为下一级的新存数。带有反馈逻辑线路的移存器称为n 级动态移存器(如图2.1 所示) , 其末级输出序列为, 此序列满足反馈逻辑函数 (2-2)式中=1或0 ( i= 1, 2, n) ,视第i 级是否参加模2 运算而定, 因为(2-2)式是线性的, 所以称为n 级线性移存器。 图 2.1 n 级动态移位寄存器由n 级线性移存器所产生的序列长度因反馈逻辑函数的不同而不一样。虽然移存器的级数相同,但由于它们的反馈逻辑不同, 产生的序列互不相同; 同一个4 级线性移存器,当它的初始状态不同时,它所产生的序列也不完全相同。也就是说,n 级线性移存器序列结构由它的初始状态和反馈逻辑完全确定,其最长的可能周期P = - 1,具有这种最长周期的线性移存器序列简称m 序列。m 序列的效率是最高的,这是它的一个优点, 但m 序列最主要的优点在于它具有某种随机特性,特别是它具有双值自相关函数R (j ) , 表明它的码元之间是不相关的或弱相关的。R(j)=1, 当j = 0时; R(j)= 当j = 1, 2, , P 1 (2-3) m 序列的功率谱密度趋近于白噪声的功率谱特性。由于m 序列的均衡性、游程分布、自相关特性和功率谱等的基本性质和随机序列很相似。因此,一般把m 序列称为伪随机序列。但是具有或基本具有随机性质的序列不仅只有m序列一种, m 序列只是其中最常用的一种。2.3伪随机序列产生原理-模2 运算对于一种只包含0和1两个元素(符号)的集合(二元集)来说,普通的四则运算不再适用, 需要规定一种新的运算规则模2 运算。图2.2示表格表示模2 加法运算, 加法符号用表示, 即 (2-4)图2.2 图2.3图2.3示出模2乘法运算, 它和普通四则乘法没有区别。模2除法可通过元素的倒元素表示成乘法形式, 即a 除以b (b0) 等于a 乘上b 的倒元素即ab= ab = 1而二元集中非0 元素只有一个1。= 1= bab= ab (2-5)上式说明模2 除法等于模2 乘法。模2 运算规则可以推广到更为一般的情况。假定一个集合中包含小于n 的n 个整数0、1、2、n- 1。则元素之间的加法和乘法(减法和除法可以通过负元素和倒元素来表示成加法和乘法的形式) 可以规定如下: 先按普通四则运算规则进行加法或乘法运算, 然后将运算结果除以n, 所得余数就规定为元素的和或积。这样规定的运算规则称为模n 运算。下面给出模n 运算的数学表示式。设a 和b 是两个整数b0, 假定用b 去除a 所得的商是m , 余数是r, 则可写成下列带余算式 a =m b+r0 r< (2-6)上式可用记号r = (a) b, 或r = a Mod b 来表示, 这样就可以把模n加法(记作ab) 或模n 乘法(记作ab) 表示如下上式中令n = 2 便得到模2 运算式, 当a =b =1 时就有 余数为0 余数为1还可以用另一种数学式如同余式来表达模算术。两个整数a 和b 在除以正整数 m 时有相同的余数, 则称a, b 为同余数, m 则称为模。对模 m 同余的数a, b 可写作a= b (Mod) m 同余式, 当a, b 同余于模 m 时,则必有a = b + m t (t是整数)。模2 运算广泛地用于传输二元数据(数字通信) 的加密加扰技术中, 在加密算法中也要用到模算术。最简单的加解扰系统是在发端将一串数据(明文plain text) 和另一串已知的伪随机序列(具有和明文相同或更长的比特流) 模2相加, 结果就得到一串和伪随机序列比特流相同的密文(ciphertext)。这串密文数据在收端再和该已知的伪随机序列模2相加, 根据, 就能在收端恢复得到原来的明文数据。图2.4 中示出了这种加解密的示意图, 这里用到了,b= 1或0的运算规则, 这就是为什么要采用模2 运算的道理。此外模2 运算在电子电路中采用异或门(EXOR gate) 就很容易实现。 发端 110100101110001 明文数据流 100010011010111 伪随机序列模2相加 010110110100110 密文数据流收端 100010011010111 伪随机序列 模2相加 110100101110001 恢复为明文数据流图2.4 数据流加解密 利用模2 运算来对数据流加密是一种最简单的加密方法。实际应用中只要伪随机序列(从理论上说任意一个序列都可以用作加密扰码)的长度越长,系统的防破密性就越高, 但它有一个致命弱点,即加密和解密过程中都只用同一个固定密钥,容易被窃密。模2 运算加密属于数据流加密, 又称序列加密, 是加解密运算的基础。上面提到虽然任意一个序列都可以用作扰码序列, 但在实用中这个序列必须是周期序列,并且可以重复产生和复制, 同时又要使第三者难于获知该序列的结构, 也就是说序列的自相关函数要接近冲激函数。因此, 采用伪随机序列是最为合适的。2.4 伪随机序列发生器设计实现2.4.1 伪随机序列发生器原理伪随机序列的主要指标是接近随机序列的程度。但如和描述随机序列是个大问题。给随机序列框以任何固定结构都是错误的。对随机二元序列而言, 由于任结构的出现都是等可能的。若取长度为n的一段来看, 出现n位都为0, 的可能性与其它任何一种特定结构的出现的可能性都是一样, 都是1/2。所以, 就结构而言, 给定任意一端序列是无法区别它是否为随机序列的。而根据随机序列中每一位出现叮0或1是随机等概这一性质及大数定理,可得到一系列随机二元序列所应满足的统计特性。目前, 这一系列统计特性就成了随机二元序列的唯一描述。对伪随机序列的评价也基本上以这些统计特性为主。但数学上的进一步研究指出, 对于任意给定的有限组确定的统计特性, 至少可以找到一种确定性算法能产生出具有这些统计特性的序列, 即依靠有限种统计特性也无法区别伪随机序列与随机序列。就具体应用而言, 密码技术中所使用的伪随机序列具有良好的统计特性可以防止统计破译法的攻击,但不一定能阻止其它技巧破译法的击。要阻止破译法的攻击, 序列必须具有足够高的复杂度。统计特性只描述了伪随机序列的表观随机性而复杂度描述的是伪随机序列的内在随机性。目前还没有一种实用方法能区别伪随机序列与随机序列, 只有序列的产生者知道所给序列是否是随机序列。伪随机信号发生器的实现主要受到所设计信号的统计参数的影响。可以利用具有某种程度随机性的确定信号来综合类似随机的过程,这样做的好处有:可再现理想的统计信号参数,以及可以相对简单地控制系统参数,如处理速度。在有限时间内,如几倍于伪随机序列周期,即可获得所需的结果,这种特性对许多应用是非常有益的,如系统测试和系统识别。但是,如果在实际应用中只运行了序列周期的一部分时间,则序列随机性就不能完全建立。当使用周期很长的伪随机信号或时钟速率很低时,上述这种情况就会发生。然而,伪随机信号会引入不需要的离散谱线或者线性相关性。将实随机过程和伪随机过程结合可以作为对这些问题的一种补救方法。用于扩频同步系统的伪随机码常用的共两种m序列优选对和gold码序列。m序列优选对产生方便, 但数量较少;Gold码序列则可有较多的数量。伪随机码序列可以很方便的用干个移位寄存器来产生, 最常用的D触发器。2.4.2 伪随机码发生器设计实现对下图所示的类似电路进行VHDL语言描述, 同时, 在程序中增加必要的存储单元设计,即可实现设计思想。下图所示的电路, 在采用VHDL语言描述时, 采用结构描述方式较为合适。编写伪随机序列发生器的程序。 图2.5 伪随机序列发生器原理图2.5 伪随机信号应用 伪随机信号在现代信息、通信和计算机技术中有着广泛的应用。本文介绍五个主要应用领域:2.5.1 扩频通信扩频通信系统主要是将给定信号的带宽扩展到远远大于可以传输信号携带的信息所要求的最小带宽。不同于标准的调制方式,比如,同样引起信号频谱扩展超过信息速率的频率调制,扩频系统采用专门的不依赖于信息的扩频信号。在发射端采用同样的伪随机信号结构从接收到的信号中恢复原始信息。利用接收到的信号和接收机本地产生的同步扩频信号之间存在的一些相关性,可实现原始信息恢复的这个目的。利用这个办法,采用标准信号形式的扩频系统的优点如下:抗干扰性强,对阻塞攻击高度免疫。具有比较低的功率谱密度,隐蔽性好,并且和其他系统可以共存。可以实现多址,允许多个用户同时访问系统。可以消除或缓解多径传播问题。能实现高精确的定时和测距。最初,扩频技术主要用于军事领域,如指挥与交通系统。在这些应用中,关键是采用何种信号格式和处理技术确保信号的完整性,特别要求系统具有抗阻塞干扰能力,而且,基于扩频系统的应用和发展所需要的费用,最初也阻碍了该技术进入民用和商用市场,如卫星定位。然而,集成电路技术的发展,以及扩频技术在数字移动无线系统的成功应用,他们对促进伪随机信号处理在商业领域的广泛应用是同等重要。尤其是,当蜂窝移动无线系统的引进和发展之后,扩频通信自20世纪80年代后期已经作为有效的技术用于许多实际系统中。伪随机信号处理技术的许多特性对扩频通信均是很重要的,这其中包括可以处理多径传播、抵抗有意或无意的干扰以及其他用户分享频谱资源的潜在能力,甚至于其他通信系统在一个覆盖结构内分享分配的带宽。扩频通信的一般组成框图如下图所示。发射机在传输之前采用一个合适扩频信号和扩频技术来扩展原始信息信号的带宽,所选特殊的扩频信号分配到一个特定的发射机上,用来识别和区分在系统中可能同时通信的不同用户。传输信号可能会由于传输介质引起的多径传播现象而衰落,另外,多径传播还会引起传输信号的回波到达接收机从而引起码间串扰(ISI).另一种干扰源来自于系统中在同时采用的多个用户的扩频信号,这种干扰通常被称为多址干扰(MAI)或多用户干扰(MUI)。在接收端可能影响信号处理的其他干扰源包括来自干扰发射机的有意干扰或热噪声。由此可见,扩频接收机采用某种相关运算来检测需要的用户信号,并尽可能地将其从各种干扰和噪声信号中分离出来,获取同步的过程同样也必须充分利用所用的扩频信号的伪随机特性。多径干扰 热噪声发射机带通接收机 衰落 多径回声 阻塞机 图2.6 扩频通信2.5.2 测距和导航系统 长期以来,移动目标定位是一个非常复杂的任务,为此人们开发并应用了多种测距和导航系统。目前,伪随机信号处理的思想已被广泛用来设计功能强大的测距和导航系统系统。实践证明,相对于脉冲雷达等传统测距技术,伪随机信号处理技术可以提供更优越的性能。通常导航系统力求实时的确定移动目标的位置和速度,这需要精确的测量测距站与目标之间的距离。伪随机序列结合直接序列扩频的思想,非常适合远距离精确测量,其内在的测距原理是利用序列的优良自相关特性来测量时延。例如,双向测距系统利用自相关函数的显著峰值来标志伪随机序列传输的起始时刻,而通过处理从目标反射到接收机的信号来标志中止时刻,假设信号在特定的传输介质中的传播速度是已知的,则由时延的测量结果可以很容易地推算出距离。此外,还可以通过测量来自若干参考点的信号之间的时延差及相应距离差来代替总时延的测量。值得注意的是,有关测距和导航的文献中存在对伪随机序列一词的多种不同表述方式,例如,测距码、PN码或伪随机噪声(PRN)码,它们均常用来代指伪随机序列,并且码这个词也常用序列或信号来代替。为了从接收信号中提取发送信号,接收机产生的本地伪随机序列和接收到的伪随机序列之间必须同步。除了匹配滤波器和相关接收机外,在实际应用中也可将这些技术结合起来使用。因为同步是高效测距接收机设计中的主要问题。测距和扩频接收机中的同步过程通常由如下三个步骤组成:码捕获。 接收伪随机序列的码相位必须校准到本地伪随机序列上,其误差小于或至多等于一个码片的持续时间。这个过程称为粗同步。码跟踪。 一旦将接收伪随机序列的码相位捕获到所要求的范围内时,就开始码跟踪或称精同步。在这个阶段,接收伪随机序列和本地伪随机序列的相位差将减少至零。载波恢复及载波跟踪。 载波相位的提取和跟踪可以与码捕获和码跟踪同时进行,或在其后进行。恢复的载波与已同步的伪随机序列一起被用于接收信号的解扩和解调。载波恢复和跟踪使用的是数字通信中的一些标准方案,如锁相环、平方环和科斯塔斯环。2.5.3 扰码在数字通信系统中,通信实体之间常通过有限离散符号集来传递信息,在发射端,有限符号集中的符号序列代表了信源信息,信源编码技术经常用于除去包含在信源中的冗余成分,使传输信息所需要的资源最小。由于经过信源编码的消息对传输差错非常敏感,因此,所有现代数字通信系统实际上都要采用信道编码技术,以便在接收端进行传输差错的检测和纠正。扰码和线性编码的联合使用增加了编码序列符号的随机性,并形成和传输介质的特性相匹配的传输信号频谱形状。特别是扰码前,消息可能包含一些有规律的符号排列形式,比如长时间的连续0或连续1,这将导致相关带宽数字信号的功率谱密度在频域上的不规则分配,具体情况取决于消息的结构。扰码器就是使这些有规律的符号排列随机化,如长时间的连续0或连续1被断开,结果,0和1在时间上的分布更加均匀。这将有助于在接收端改善时钟恢复的质量,减少阻塞干扰,从而也提高了信息恢复的准确度。紧接着扰码处理之后,线性编码技术应用于数字基带信号,以进一步改善脉冲序列的频谱形状。在接收端,对信号的处理按于上述过程相反的顺序执行,比如解码和信源编码。信源信源编码器器 器码信道编码器doabianmaqi扰码器线编码器信道检测器解扰器信道解码器信源解码器信宿 图2.7 数字传输系统框图扰码是伪随机信号处理的一种特殊形式,它随着数字传输系统得发展变得日益重要。在传统的准同步数字传输系统中,扰码通常是借助于复杂的线编码技术的帮助实现的,但在现代光波传输系统中只需要使用简单的线编码技术,而主要的信号处理工作则有扰码器完成。扰码具有两个最基本的功能:一个功能是信号成形,主要用于改善信号的传输特性;另一个功能是信号加密,用于隐藏与信号相关的内容,并控制对信号实质性的访问。扰码技术可分为三类:即帧同步扰码、分布式抽样扰码和自同步扰码。2.5.4 自动测试与系统校验伪随机信号处理的概念的诸如无线电和电子设备以及陆地交通工具和飞机这些复杂硬件系统的检测与校验领域中的应用已经引起了人们极大的关注。在数字电路及系统的自动测试与校验中,导致非正常操作的错误进程,通常来源于产生故障的系统内部部件或模块。比如损坏的电路,也有可能与外部损害有关,比如开关脉冲等。在数字电路及其系统领域,寻求高效的系统测试和校验的手段主要分为以下几类方法:特征分析逻辑分析计算机辅助自动测试2.5.5 加密密码学与能够提供保密信息的安全通信系统的设计息息相关。这些系统称为加密系统,或者简单称为密码。加密需要识别和研究可能危及信息保密内容完整性攻击。通常将加密系统的设计称为加密术,而对加密系统的攻击称为密码分析术。因为秘密信息根据它的原始结构进行伪装,所以一些相关的加密技术也可以利用伪随机信号处理的概念。密码系统用于:(1) 广播和电视系统加密;(2) 全球移动通信系统安全加密算法A5;(3) 生物医学应用;(4) 光纤系统;(5) 模拟电视中附加数据的传输;3 FPGA3.1 FPGA简介作为一种可编程逻辑器件,现场可编程门阵列FPGA(Field Programmable Gate Array)是一类广泛应用的高密度可编程逻辑器件。它的出现是可编程逻辑器件发展变化的必然,它的出现推动可编程逻辑器件的进一步发展。对于可编程逻辑器件,从实现原理上讲,一般分为两种:基于查找表(Look Up Table)加寄存器结构和SRAM工艺的FPGA,集成密度高,寄存器资源丰富,适合做时序逻辑设计,多用于上万门以上的设计,如数字信号处理和各种算法的实现等;基于乘积项(Product Term)结构和EEPROM工艺的FPGA,集成密度低,乘积项资源丰富,适合做组合逻辑设计,多用于5000门以下的设计,如编码、译码电路等。3.1.1 查找表(Look Up Table)的基本原理。查找表(Look Up Table)本质上就是一个RAM。目前FPGA中多使用四输入的LUT,所以每一个LUT可以看成一个有四位地址线的16×1的RAM。当用户通过原理或HDL语言描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。FPGA主要包括可配置逻辑块(CLB)、输入/输出模块(IOB)、可编程互连线(PI)和片内RAM。CLB是FPGA的基本结构单元,能够实现逻辑函数,还可配置成RAM等形式。CLB一般由函数发生器、数据选择器、触发器和信号变换电路等部分组成。输入/输出模块(IOB)分布于器件的四周,提供内部逻辑与外围引脚间的连接。可编程互连线(PI)有许多金属线构成,以提供高速可靠的内部连线,将CLB之间、CLB和IOB之间连接起来构成复杂逻辑。片内RAM是在对FPGA进行复杂数字系统设计时必不可少的片内存储器。3.1.2 FPGA的配置应用FPGA有多种配备模式:依据配置时钟的提供源不同,可将其分为主动模式和被动模式;依据配置数据位数的多少,可将其分为并行模式和串行模式。对FPGA的配置操作,可以使用厂商提供的专门的配置芯片来完成,也可使用通用MCU来完成。用户可以根据不同的配置模式需要,采用不同的编程方式。通常FPGA由布线资源分隔的可编程逻辑单元(或宏单元)构成阵列,又由可编程I/O单元围绕阵列构成整个芯片,排成阵列的逻辑单元由布线通道中的可编程内连线连结起来实现一定的逻辑功能, 即分段的金属互连线可以由可编程开关以任意方式连接形成逻辑单元之间要求的信号线。一个FPGA包含丰富的具有快速系统速度的逻辑门、寄存器和I/O组成。按编程特性分类, 主要有一次性可编程反熔丝OPT和基于静态存储器(SRAM)的编程结构。3.2 FPGA设计方法FPGA采用层次化设计, 合理划分各个模块优点是使用不同的输人方式(原理图, 状态图,HDL), 可以充分发挥各自特色使设计具有可读性与易于独立调试特点使设计具有可重用性。另外, FPGA采用自上而下的系统设计方法。传统的设计思路是自下而上,即设计者首先将各种基本单元, 如各种门电路以及加法器、计数器等模块做成基本单元库,然后在设计时调用这些基本单元, 逐级向上组合, 直到形成系统为止。基于EDA技术的自上而下的设计方法正好相反, 它首先在系统级对系统进行设计, 并进行功能模块的划分与定义,然后在功能级对各个模块进行描述, 并进行仿真, 以预测设计的正确性。为了提高系统的工作速度, 可以采用基于流水线的设计方法。所谓流水线设计实际上是把规模较大、层次较多的逻辑电路分为几个级, 在每一级插人寄存器组且暂存中间数据。很显然, 流水线设计在提高系统处理速度的同时也多耗了器件资源, 但是, 大多数FPGA中的逻辑单元都比较丰富,因此便于实现流水线设计。3.2.1设计流程设计首先从系统设计入手,在顶层进行功能方框的划分和结构设计,在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统进行描述,在系统一级进行验证。然后用综合优化工具生成具体门电路的网表,其对应的物理实现级可以是印刷电路或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的。(1) 按照“自顶向下”的设计方法进行系统划分。(2) 输入VHDL代码(3) 将以上的设计输入编译成标准的VHDL文件,然后将文件调入VHDL仿真软件进行功能仿真,检查逻辑功能是否正确。(4) 利用综合器对源代码进行综合优化处理,生成门级描述的网表文件,即将源文件调入逻辑综合软件进行逻辑分析处理。(5) 如果整个设计超出器件的宏单元或I/O单元资源,可以将该计划分到多片同系列的器件中。利用适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。适配完成后,产生多项设计结果。根据适配后的仿真模型,可以进行适配后的时序仿真。(6) 将适配器产生的器件编成文件通过编程器载入到目标芯片FPGA中。其设计流程图如图3.1所示:波形文件代码文件编程文件网表文件源文件概念设计图像方式VHDL语言报告文件综合器编译器适配器时序仿真功能仿真行为描述系统划分FPGA实现编程器报告文件报告文件报告文件图3.1 设计流程图3.2.2 该设计流程的优点设计流程的优点如下:(1) 设计流程从功能描述开始到物理实现的完成与设计人员的开发思路符合,方便设计人员进行开发。(2) 功能设计完全独立于物理实现,采用自顶向下的设计方法,功能输入采用标准的VHDL输入方法,不含有任何器件的物理信息,工程师可以有更多的时间集中精力进行功能描述,可在设计过程的最后阶段任意选择或更改物理器件。(3) 设计再利用较方便。(4) 利于设计的更改。工程师可以在极短的时间内修改设计,选择最优方案。(5) 设计并处理大规模复杂电路。目前的FPGA器件正向高级程度、深亚微米工艺发展。为设计系统的小型化、低功耗、高可靠性等提供了集成的手段。(6) 设计周期缩短,生产率大大提高,性能明显提高,产品竞争力加强。在很多实际应用中,直接利用FPGA 产生伪随机序列的方法可以为系统设计或测试带来极大的便利。本论文给出了基于线性反馈移位寄存器电路,并结合FPGA 的特有结构,设计了一种简捷而又高效的伪随机序列产生方法。最后通过统计对比,说明了这种方法所产生的随机序列不仅可具有极长的周期,而且还具有良好的随机特性。随机数是虽然具有一定的统计学规律,但它是抽样值不能事先确定的数。实际中产生的随机数不是绝对随机数,是相对的,称为“伪随机数”。伪随机数发生器(Pseudo random Number Generator)在扩频通信、信息加密和系统测试等领域中有着广泛的应用。在软件中一般都采用含有大数乘法的递推公式所计算出的一组数值来产生伪随机数列。当数列足够长时,这组数值就是近似满足均匀分布的伪随机序列。4 VHDL语言简介VHDL是在70-80年代中,由美国国防部资助的VHSIC项目开发的产品。在这个语言首次开发出来时,其目标仅是一个使电路文本化的一种标准,使人们采用文本方式描述的设计能够被其他人所理解。VHDL于1987年由IEEE 1076标准所确认,1993年IEEE 1076标准被升级、更新,新的VHDL标准为IEEE 1164,1996年IEEE 1076.3成为VHDL综合标准。现在,VHDL已成为一个数字电路和系统的描述、建模、综合的工业标准,在电子产业界,无论是ASIC设计人员,还是系统级设计人员,都需要学习VHDL来提高他们的工作效率。利用VHDL及自顶向下设计方法在大型数字系统设计中被广泛采用,在设计中可采用较抽象的语言来描述系统结构,然后细化成各模块,最后借助编译器将VHDL描述综合为门级。 4.1 VHDL的基本结构 a. VHDL的组成 一个VHDL设计由若干个VHDL文件构成,每个文件主要包含如下三个部分中的一个或全部: 1) 程序包(Package); 2) 实体(Entity); 3) 结构体(Architecture)。 实体(Entities)声明到其他实体及其他设计的接口,即定义本设计输入输出端口结构体(Architectures)定义了实体的实现,即电路的具体描述程序包(Packages)声明在设计或实体中将要用到的常数,数据类型,元件及子程序等VHDL文件VHDL设计 图4.1 VHDL组成示意图一个完整的VHDL设计必须包含一个实体和一个与之对应的结构体,一个实体可对应多个结构体,以说明采用不同方法来描述电路。b. 程序包(Package) 程序包是用来单纯罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构中的一个层次。要使用程序包时,可以用USE语句说明。例如: USE IEEE.STD_LOGIC_1164.ALL; 该语句表示在VHDL程序中要使用名为STD_LOGIC_1164的程序包中所有定义或说明项。 一个程序包由两大部分组成:包头(Header)和包体(Package Body),其中包体是一个可选项,也就是说,程序包可以只由包头构成。一般包头列出所有项的名称,而在包体具体给出各项的细节。 c.库(Library) 库是专门存放预先编译好的程序包(package)的地方。在VHDL语言中,库的说明总是放在设计单元的最前面: LIBRARY 库名; 这样,在设计单元内的语句就可以使用库中的数据。由此可见,库的好处就在于使设计者可以共享已经编译过的设计结果。在VHDL语言中可以存在多个不同的库,但是库和库之间是独立的,不能互相嵌套。实际中一个库就对应一个目录,预编译程序包的文件就放在此目录中。用户自建的库即为设计文件所在目录,库名与目录名的对应关系可在编译软件中指定。库说明语句的作用范围从一个实体说明开始到它所属的构造体、配置为止。当一个源程序中出现两个以上的实体时,两条作为使用库的说明语句应在每个实体说明语句前重复书写。以下表4-1是IEEE两个标准库“std”与“ieee”中所包含的程序包的简单解释。