关键词:数字相关器 FPGA 希尔波特变换 Stratix
采用FPGA器件可以将原来的电路板级产品集成为芯片级产品,从而降低了功耗、提高了可靠性,同时还可以很方便地对设计进行在线修改。电路设计者可以通过软件编程,经过设计输入、仿真、测试和校验,用硬件实现特定的数字信号处理算法。这种方法由于具有通用性强的特点并可以实现算法的并行运算,因此无论是作为独立的数字信号处理器,还是作为DSP芯片的协处理器,目前都是比较活跃的研究领域。
短波通信具有设备简单、通信距离远、机动灵活、价格低廉和抗毁性强的特点,有着重要的应用价值。在短波通信系统中,接收方在信号检测、同步的过程中,要进行大量的乘加操作来做相关运算。在传输速率较高、样点间隔较小的情况下,完全由系统中央DSP处理器进行运算,很难实现实时处理。利用FPGA的特点,把信号同步数字相关部分分离出来,设计一个专用的数字相关器,作为中央DSP处理器的协处理器,来分担这部分工作,是一个很好的解决方案。本文阐述的就是这样一个应用在短波扩频通信系统的接收方中,完成数字相关功能的基于FPGA设计的相关器。
1 Stratix系列芯片简介
本文采用Stratix系列芯片实现数字相关器。Stratix系列是著名的可编程逻辑器件供应商Altera公司于2002年新推出的FPGA产品。其主要特点是:采用1.5V内核,0.13μm全铜工艺,容量为10570~114140个逻辑单元,内嵌多达10Mbit的三种RAM块,即512bit容量的小型RAM,4KB容量的标准RAM,512KB的大容量RAM;具有True-LVDS(tm)电路,支持LVDS、LVPECL、PCML和HyperTranport(tm)差分I/O电气标准,且有高速通信接口;增加了片内终端匹配电阻,提高了信号完整性,简化了PCB布线;提供了完整的时钟管理方案,具有层次化的结构和多达12个锁相环(PLL)。
该系列芯片的最大特色是内嵌硬件乘法器和乘加结构的可编程DSP模块,特别适于实现高速信号处理。这种DSP模块是高性能的嵌入算术单元,它的运行速度可以达到250MHz,每个DSP模块的数据吞吐性能可以高达2.0GMACS。它可以配置为硬件乘法器、加减法器、累加器和流水线寄存器,如表1所示。
表1 单个DSP单元的设置模式
模 式 | 9bitx9bit | 18bitx18bit | 36bitx36bit |
单个乘法器 | 8个 | 4个 | 1个 |
相乘累加器 | 2个(结果为52bit) | 2个(结果52bit) | —— |
2个乘积求和 | 4个 | 2个 | —— |
4个乘积求和 | 2个 | 1个 | —— |
Stratix系列具有多达28个DSP模块,可配置为224个(9bit×9bit)嵌入乘法器,可以为大数据吞吐量的应用提供灵活、高效和有价值的方案。这些DSP模块可以实现多种典型的DSP功能,如有限冲击响应(FIR)滤波、快速傅立叶变换(FFT)功能、相关器和加密/解密功能等。
Stratix系列由Altera公司提供的新一代开发软件Quartus II支持。此软件加强了网络功能,设计人员可以直接通过Internet获得Altera的技术支持。Quartus II软件中的Megawizard Plus_In Manager工具可以很方便地对一些常用的基本模块进行定制,以满足不同的需要;设计人员还可以在定制后的基础上,进行进一步的改进,扩展出更多的功能。
2 FPGA模块设计
数字相关器在短波扩频通信系统中的具体功能是:接收A/D采样后的采样信号,对采样信号进行希尔波特变换,得到与其正交的另一路信号;然后以这两路信号分别作为实部和虚部,与本地序列进行相关运算,将相关值的实部和虚部送给DSP做后续处理,如图1所示。只有包含有正确同步头信息的信号经采样后与本地序列作相关运算,得到的相关值的模值才会出现峰值;对应于发端特定的同步头帧结构,相关后的相关峰也会出现规律性的特征。这样,DSP才可以通过先对相关值求模,然后对模值出现的峰值的间隔、幅值和数目等信息进行判断和进一步处理,来确定是否捕捉到信号。下面具体介绍完成上述数字相关功能的FPGA的设计。FPGA设计的内部结构框图如图2所示。
2.1 希尔波特变换部分
系统接收到的射频信号经过前端预处理后,送到A/D采样,然后以串行方式输出样点值到FPGA。每个样点值是用10bit的二进制补码表示的,需先通过一个串/并转换器转化为宽度为10bit的并行信号。样点值首先要进行的是希尔波特变换,希尔波特变换有多种实现方法,这里采用一个129阶的滤波器来实现,滤波器的抽头系数由MATLAB函数remez产生,如图3所示。
将10bit的并行信号输入到一个10bit×129的RAM模块,采用循环写入的方式,RAM模块类似一个桶形循环存储器?熏较早存入RAM的信号值就会被新来的数据覆盖掉,这样就与图3所示的输入信号先进先出是等效的。经MATLAB函数remez产生的抽头系数是一组变换范围很大的带有小数部分的十进制数,为了能够进行后续的硬件运算,需要对这组十进制数作归一量化处理,把它们映射到宽度为14bit的有符号的二进制数所能表示的范围上去,即转化为14bit的二进制补码数。这组抽头系数在运算的过程中是固定不变的,所以可以把它们固化在片内ROM模块中,与RAM中的值同步读出,再经过两组D触发器对齐后,送到一个10bit×14bit的有符号数的相乘累加器做相乘累加运算。相乘后的数据宽度是24bit,但是由于对固定数据宽度的有符号的二进制数进行加减运算时,会出现结果超出固定数据宽度所能表示的范围,即溢出现象,导致运算结果错误,所以就要为这里进行的129次累加操作留有一定的数据宽度富裕量,每次把乘积符号扩展4bit再进行累加操作,这样输出就是一个28bit的有符号数,即是所需的虚部。由于在将抽头系数从十进制到二进制的归一量化过程中,人为地将其扩大了许多倍,所以与每个虚部相对应的实部从中心抽头输出后,需经过一个固定倍数的乘法器,扩大同样的倍数来与虚部保持一致。
相乘累加模块是希尔波特变换部分的核心单元,这里用到了Stratix器件独特的嵌入式DSP模块。在Quartus的Megawizard Plus_In Manager中选择ALTMULT_ACCUM(MAC)定制相乘累加模块。首先系统会提示只有Stratix系列才可以定制此类型模块,本例选择的两个输入端分别是10位和14位的有符号数,与RAM和ROM的输出端相连,再将累加后的输出端设为28位。这里有意预留了4位,用来防止在129次累加的过程中出现数据溢出的现象。将时钟、使能、清零等设置好后,即可生成所需的相乘累加模块,在编译的过程中Quartus就会自动把这部分配置到嵌入式DSP模块中,而不去占用片内的逻辑单元。这样就把原本用几个模块完成的功能用单个模块实现了,同时也提高了运行的可靠性。
2.2 相关运算部分
样点值经过希尔波特变换得到的实部和虚部两部分,将分别存储到两个具有80个存储单元的RAM中,同样是采用循环写入的方式,类似于DSP编程中的桶形存储区。由于本文所应用的短波系统采用的是每个码元取五个采样点,而本地序列是一个码元对应一个数值,所以在做相关运算时是从当前的80个样点值里,每隔4个点取一个值,共取出16个样点值,依次与本地序列的16个值做相乘累加。下一次操作就把当前样点向后移一位,按同样的方法取点运算。这样依次进行,每一个样点值都会产生一个与其相对应的相关值。反映在FPGA内部,就要求RAM从当前存入的值开始,向前每隔4个单元取一个值作为输出。这样在一个样点间隔内,就从RAM中依次读出16个值,与从ROM中同步读出的16个本地序列值做相关运算。此时的相关运算中的乘法就需要是复数相乘,其结果也是复数,分两路输出实部和虚部,对这两路结果分别进行累加运算,即可得到所需的相关值的实部和虚部。
复数相乘模块是相关运算部分中的重要环节。从RAM中读出的实部和虚部组成的信号值,与从ROM中读出的本地序列值,在这里要进行复数相乘运算。复数相乘模块结构图如图4所示,a、b、c、d分别代表信号和本地序列的实部和虚部,按照式子(a+jb)×(c+jd)=(ac-bd)+j(ad+bc)的组合进行相乘加减。这里需要说明的是,考虑到后面要与DSP相连,数据的宽度被限制在32位。所以对于乘法器B和D而言,28bit与9bit相乘得到的结果应是37bit。这里在定制乘法器的时候强行把它限制为32bit,去掉了最高位的多余符号位,舍去了低4位。这样处理带来的后果就是人为地将乘积缩小了16倍。如果对乘法器A和C的结果不做处理,直接进行加减运算,则结果将导致严重的错误。因此对于乘法器A和C,应该人为地将其输出值右移4位,同样地缩小16倍,再进行下一步的加减运算,就可以有效地避免上述的错误。这样输入的4个数值经过几个时钟周期的运算后,输出的两个数值就是所求的复数相乘结果。这里的4个有符号数乘法器都会在编译时自动地配置到Stratix器件的嵌入式DSP模块上去。
2.3 总体控制模块和接口部分
2.3.1 总体控制模块
系统上电后,FPGA内部各模块都处于运行状态,各个模块相互连接,各自有运行时序,所以为了保证各模块依次先后运作,并得出正确的结果,就需要一个指挥控制模块对各模块进行准确的控制。这里采用两个工作在80MHz和40MHz时钟下的主从计数器对相关部分和希尔波特变换部分各模块进行控制。在一个样点间隔内,根据计数器不同的计数值,利用不同的组合逻辑电路产生各个模块的使能、清零等信号,保证各模块在正确的时序下运行。为了提高FPGA处理的效率,希尔波特变换部分和相关部分实际上是并行工作的。在同一个样点间隔时间内,希尔波特变换部分处理的是当前输入的样点数据,而相关部分是在处理上一个样点间隔内希尔波特变换部分输出的结果。这两部分之间之所以能够进行相互协调和并行运行,就是由于有来自总体控制模块的各种控制信息。
2.3.2 接口部分
FPGA有两个接口,一个与A/D接口,另一个与DSP接口。在与A/D的接口部分中,有三个输入端data_in、FS和SLCK,data_in用来串行输入A/D转换来的样点值;FS为帧同步信号,它在输入到FPGA后用来驱动FPGA内部的总体控制模块;SCLK为移位时钟,它控制A/D与FPGA之间数据串行传输的移位。在与DSP的接口部分中,data_out[15..0]用来输出FPGA运算的结果,与DSP的数据总线挂接在一起,在FPGA内部设置一个三态门,开门信号就是FPGA的片选信号CE。当CE不选通的时候,三态门输出为高阻状态,不会影响DSP的数据总线。在每一个样点间隔的时间内,FPGA运算出相关值的实部和虚部,将它们分别锁存在四个16bit锁存器中,并将与DSP相连的data_ready信号置高电平,表示数据已经准备好。DSP检测到data_ready为高后会进行读操作,用地址总线的高几位产生出片选信号将FPGA选通,通过地址总线的低两位A0、A1来选择四个锁存器的其中一个,依次读取实部和虚部两个32位数的高16位和低16位。FPGA内部会对DSP的读操作计数,确认数据分四次读出后,则将data_ready置低,直到下一次运算完毕后再抬高。
3 仿真和校验
各子模块设计好后,可以用图形方式或文本方式将各个模块连接起来,对顶层设计进行编译。这里选用的是Stratix系列中容量最小的一种:EP1S10F780C7,编译后产生的编译报告如图5所示。
无论是片内逻辑单元、片内RAM还是DSP嵌入块,所选的EP1S10F780C7芯片都还有相当一部分余量。但是,如果是选用其它系列的芯片,没有嵌入式的DSP模块,最后其所占用的片内逻辑单元会远不止这么多。
编译完成后即可进行仿真和校验,这部分可分为三个过程。对于同一块数据,先在Quartus下进行仿真,产生出一系列相关值。然后在MATLAB环境下利用其绘图方便的特性,完全按照FPGA中各模块处理数据的方法,编一段程序对数据进行处理,并画出处理结果的图形,如图6所示。理论上其处理结果应和Quartus的仿真结果完全一样,实际比较得出两者确实完全一样。最后在MATLAB中从理论上运用纯软件的方法编一段程序,对数据进行处理,并画出处理后的相关峰图,如图7所示。
可以比较出这两种图形所显示的相关峰的幅度与相对位置都基本一致。这就说明用FPGA对数据进行处理的结果和理论方法的处理结果是吻合的,这也就验证了FPAG设计的正确性。由于FPGA所进行的只是初相关,所以图7显示的相关峰幅度不大,数据送到DSP后要进行二次相关等处理,然后用于信号的捕获和同步。
本文阐述了短波扩频通信系统中用于信号同步捕获的数字相关器的FPGA实现,并对所选的Stratix系列器件进行了介绍。在384kbps的采样速率下,由外部提供40MHz的时钟,此相关器工作性能稳定,运算结果正确,能很好地配合DSP工作,完成对样点数据的希尔波特变换和相关处理。
评论
查看更多