许多因素影响着实现无线基站的器件选择。ASIC具有低廉的价格,但要预支大量开发时间和高的NRE成本,而且缺少DSP和FPGA的灵活性。DSP或许是最灵活和最容易开发的,但是码片率处理所需的高性能DSP成本很高,这阻碍了它们的广泛应用。
图1:显示Rake接收机位置的移动基站示意图。
对于无线基站中的基带模块,其越来越苛刻的功能之一就是接收机,特别是遭受到一个多径信道后的信号解扩。Rake接收机是针对这个问题的一种通用的解决方案,用低成本FPGA和低成本、中等性能DSP实现Rake接收机设计是一个很好的例子。本文阐述用一片FPGA来实现面向3GPP WCDMA标准的Rake接收机参考设计。该参考设计的主要目标是说明在低成本面向DSP的FPGA中能实现多少数量的Rake解调器和得出一种减少整个设计成本的方法。
Rake接收方法的背景介绍
遭受多径信道的信号的接收问题已在各种文献中讨论了很多年。WCDMA标准就是基于该问题的一种解决方法而设计的,即采用高频位序列扩展数据符号。选出这个序列以致它们拥有一些属性,使得最终信号有别于其自身的延时版本。这个属性使得从一组具有不同延时的路径接收信号并组合它们成为可能,最终改善了可靠性和性能。
1958年,Price和Green发明了这个技术,命名为Rake。因为该接收方法涉及到几个相关器的使用,每个都可以形象地看作是花圃的耙爪(finger)或者叉(tine)。
CDMA信号的接收还要求执行另外两个主要任务:一个是要找到沿最强路径的延时,另一个是决定沿其路径传播时对信号的影响。第一个任务被称为路径研究,第二个是信道估计。这两种功能在本设计中被忽略,原因如下:首先硬件不是很复杂,其次对信道估计问题有许多不同的解决方案。况且信道变化往往相对缓慢(5-10ms的更新时间是能接受的),因此估计算法通常在DSP中用软件实现,而不是用硬件实现。
图2:使用Rake接收机的简单系统。
WCDMA的一些关键参数如下:
1.码片率(扩展后)=3.84MHz;
2.数据输入至Rake的过采样率=2(给定采样率7.68Msps);
3.对于数据信道扩展因子4至256,控制信道固定在256;
4.同时在上行链路(来自手机)发射的数据和控制信道。
很多文献中引用了各种容量指标,但没有清楚地阐明这些指标的意义。为了与其它解决方案进行比较,这里选择64个用户为基准容量。为了与实现相联系,假设支持一个信道需要平均4个Rake finger,每个用户占用一个控制信道和一个数据信道。因此,finger的总数应除以8以得到用户的容量。
BTS系统构成
为了理清设计的前后关系,这里使用了面向移动无线系统基站的OBSAI系统分割。这样把主要功能分割成模块以及称为参考点的接口。图1为Rake接收机,从图中可以看到,它是基带处理功能之一。考虑的关键点是在一个系统中需要被缓冲的数据量,这个系统带有连接到一个基带模块的多个无线模块。实现完整的解决方案时,可以看到FPGA支持DDR接口和SDRAM控制器IP被证明是有用的。这样的解决方案将处理来自无线模块的几个数据流的数据。这些数据的源头是若干不同天线上很多不同的载波信号。术语天线载波(A-C)用来表示这些信号源,一旦被接收的天线载波信号被合成转移到IF,经过数字下变频器(DDC)的数字化和下变频,数据率变为7.68Msps(假设2倍于3.84MHz的扩展数据过采样率)。
尽管图1展示了无线和基带模块的物理分割,但主要是基站的功能概览。下一节讨论将Rake设计与其它单元结合可构成一个简单工作系统的方法。
图3:采样缓冲(上)和符号缓冲(下)。(点击放大图)
设计概述
图2显示Rake如何与DSP和DDR SDRAM构成一个完整功能的基带子系统。Rake设计带有简单存储器映射的寄存器接口以便于由DSP控制。Rake引擎内的寄存器控制对给定用户的finger分配、保存路径延时值以及为所用的信道定义参数(即扩展和扰码)。在这个例子中,信道估计用DSP中的软件来完成,因此DSP通过寄存器接口向引擎写信道修正数据。图中未展示这个搜索器,但是相关峰值为每个finger初始相关的路径延时构成了基础。由于路径延时随着时间而变化,位误差率对在采样列队中的差错是很敏感的,在引擎中有一个跟踪机制不断更新这些延时。
帧缓冲器要使用合适的外部存储器,因为WCDMA 10ms帧需要将近1Mb存储器,超过了低成本FPGA的容量。对要支持多个7.68Msps数据流(来自一个以上天线载波)的较大帧缓冲器,支持DDR接口和具有SDRAM控制器IP的FPGA是一个可行的选择。带DDR接口的FPGA能运行上至400 DDR(200MHz),因此32位宽的数据接口可以很容易地支持12个天线载波。
图2还展示了与Rake接口的简单,这提供了使用存储器的灵活性。用RAM块实现片上输出FIFO是可行的。例如,带最低扩展因子4的8位数据的16个信道需要2个sysRAM块。需要少量的逻辑实现FIFO寻址。指明数据用于哪个信道的Chan_out信号用于构成部分存储器地址。分离的FIFO指针需要为每个信道而保存,它们可以放入一个分布式RAM中。
设计的考虑与选择
图4:具有跟踪功能的Rake引擎。
基本的Rake finger运行颇为简单。将复杂输入数据和对应复杂解扩/解扰码的一系列二进制乘积求和来执行相关。倘若不了解沿路径的延时情况,这种相关只不过是产生噪声。正如前面所提,搜索器用于从已知的发射信号(包括在控制信道信号里的导引符号)来寻找相关峰值。最强的峰值显示了最强的路径是在传播信道的哪个位置。这些峰值然后用来建立分配到给定信道的每个finger上的相对延时。不同的传播信道情况将应用到不同的移动用户,所以最优的finger数量将从用户到用户而变化,并在连接至一个给定用户期间变化。于是,设计中考虑的特性之一就是对信道的finger分配问题。
在设计里,沿路径不同的延时在一些点上需要平衡,这样解扩展符号可以及时再结合,组成一个或多个精确结果。这需要在设计中的某个地方有一个缓冲器,但是哪里是最佳的放置点?图3显示两个供选择的位置。第一种称为采样缓冲(上图),用来缓冲进入的采样值。这形成一个简单的控制情况,也许是最显而易见的解决方案。每个天线载波所需的存储器数量是合理的。假设延时扩展小于33us或128码片周期和同相和正交输入数据是8位分辨率,那么缓冲器需要4,096Kb的双端口存储器。
图5:符号时序跟踪的Matlab图形。
图3(下)所示的另外一种方法在纠正和组合前缓冲解扩符号。这或许比第一种方案要用更多的存储器,取决于finger的数目和解扩器输出的位宽。假设最坏的情况,所有的finger是扩展因子为4的解扩数据,以及用于复杂解扩数据的2×16位宽,那么需要16Kb的缓冲器。此外,因为对一个finger的相关延时必须分配在符号缓冲器和代码产生器之间,控制和跟踪方案变得更加复杂。到目前为止,采样缓冲器从两个方面看似乎是更好的选择:存储器大小和是否简单。
设计Rake接收机架构时,内插器(interpolator)是可选的,但它对性能有很大的影响。内插器用来在输入数据流中计算采样点。这允许数据和编码互相以较好的队列形式进行解扩,产生较好的整体误码率。在采样缓冲架构中,每个finger需要一个内插器,然而符号缓冲只允许对所有finger使用一个内插器,这些finger处理来自相同天线载波的数据。这个决策似乎取决于内插器有多复杂以及执行此功能的硬件是否能被许多finger共享。事实上,很明显这是倾向于选择符号缓冲的唯一因素。可以看出符号缓冲也增加了设计的灵活性。
传播信道的每个路径在信号上强加了一个不同的相位旋转。如果这些信号是简单的相加组合,结果不会比单一路径好,有些情况下还更糟。组合它们之前,有必要从每个finger将这个解扩信号去旋转。信道估计量决定相位旋转量。对于每个finger(即路径),信道估计器提供代表信道脉冲响应相关量的一个复数。用复信道修正值乘以复数符号值来进行信道修正。对于给定Finger中的每个符号,这个复数乘积需要4次乘法、一次加法和一次减法。然而,对于给定的WCDMA信道,数据是映射至实部或者虚部,只要2次乘积与一次加/减。在信道修正后,符号数据在组合块里被累加。这个组合块跨越分配到一个给定信道的所有finger。
图6:校正与组合前后的情况。
另外要注意的是接收数据采样率仅为7.68Msps,芯片速度只有一半(3.84MHz)。考虑到目前低成本FPGA运行速度能超过200MHz,足以为可共享时间的硬件提供很多机会。而且信道修正硬件使用乘法器,倘若它们能运行得足够快,能够共享若干finger。理论上,运行于15.36MHz的乘法器可以服务16个finger。事实上,乘法器必须高于这个速度运行,因为符号是在任意的时间到达缓冲器,这取决于相关路径延时。缓解该问题的办法是增加缓冲器容量,以便在它们被使用前符号数据点不会写满。对于这个应用,基于查找表的乘法器往往不够快,而且消耗大量资源。嵌入式DSP块可提供具有成本效益的方法来实现信道修正功能。它们能以很高的速度运行,以及共享几个finger。在此情况下,可保持最小的缓冲器容量,因为选择器件时,乘法器的可用性对这个设计不是限制因素。
事实上,整个Rake引擎可以是时间共享以实现多个可用。时间分片的限制程度取决于目标器件的硬件最大时钟速率以及每个finger状态的存储容量。此外,在设计的特定部分如果需要流水线来达到期望的速度,也许还需要额外的状态存储容量。因此,增加时间共享finger的数目会迅速地产生逐渐缩小的回波。
时间共享需要状态的存储,提供1比特乘16字结构的16位存储器的小型分布式存储器块是理想的解决方案。一个这样的块在一个片段(slice)里使用查找表(LUT),因此实现小的、不同的存储块是一种理想的方法。若没有这个特性,设计者面临试图把状态存储放入一个或几个较大的存储块,或者使用slice触发器。第一种方法是笨拙的,由于状态需要在每个周期更新,以及状态矢量的宽度比存储器宽度小(4个8位矢量打包入32位宽的存储器)。如果每个矢量放入单独的存储器,很快给定芯片的整个RAM块被用满,因此,打包是唯一的解决方案。如果使用slice触发器以16倍的速率占用分布式RAM,给定FPGA不久将被填满。
使用分布式RAM引进了16这个量以选择用多少finger进行时间共享。已经证明16个finger的Rake引擎是容易实现和有效地使用FPGA资源的最佳折衷方法。16个finger的Rake引擎可以在芯片上复制若干次用于产生可升级的解决方案。作为一个例子,表1显示了Lattice ECP-DSP系列用于这个设计的容量。
图7:输入与输出数据。
ECP33实现提供了在两个器件中用足够的容量来实现64个用户系统,剩余足够的资源(大约9K slice)可实现输入接口、可选的DDR接口和输出缓冲器。
详细架构
图4为有控制信号的Rake引擎的顶层架构,为了清楚表述的缘故省去了一些单元。边界内的模块构成了跨越16个finger的时间共享Rake引擎的内核。内插器不是时间共享的,但是其输出可以共享几个Rake引擎内核以实现N倍于16个finger,用来处理给定天线载波的信号。控制块指挥整个引擎的运作。它含有一个计数器,该计数器与给定时间片段内被处理的finger相关,其值用来寻址各个小的存储器,这些存储器包含所有指针的每个控制域的状态。其它小存储器为每个指针保持参数,每个参数就有一个16字存储器,这些参数有:扩展因子、扩展码和扰码。对用户进行的finger分配也存储为0到15的数字,以支持最大用户数目,那里只用到一个finger。
正如前面所述,带输入码片的采样点队列对系统的性能有很大的影响。为了确保在手机和基站间时序的偏差或者初始路径延时估计的差错不破坏这个性能,在此设计中包含了一个跟踪环。时序差错检测器(TED)和NCO构成了跟踪环。NCO累计TED块的输出,超过1码片时,它产生码片步长信号,增加finger的指针到2。如果累加溢出,该finger的指针不再增加。
设计的仿真
该设计的开发借助于发射器、无线传播信道和无线模块的Matlab模型。这里用一些采样结果与从RTL仿真得到的同等结果比较来说明Rake接收机的原理。
图8:跟踪情况。
1. 跟踪符号时序误差
对每个Rake finger,“早/迟门(early/late gate)”检测器的输出用来调整NCO,控制该finger每个码片的准确采样点。图5显示了两个独立的Rake finger的动态跟踪:上面一个的起始时序偏移量提前1个码片,下面一个滞后1个码片;X轴是符号数,扩展因子为256。
在图5中,第一栏“早/迟误差输出”展示了时间推进时误差如何收敛于零;第二栏“码片部分偏移”是正在使数据延时的码片部分,用来选择每个码片周期上源自内插器16个采样中的一个。在两种情况中,这个偏移量看起来是环绕的。为了补偿,一个附加的“码片步长”信号产生(未显示出),如果滞后,则提前2步,或者太超前,则在下一个周期将扰频/扩展代码发生器冻结。
第三栏展示了每个finger的最终符号输出值,及跟踪电路校正时序偏移量。注意对输出数据“眼”的开度。这显示了小的时序误差会对性能有很大的影响。
这些图形中初始偏移误差只是用来说明跟踪器的功能。实际的情况中不会遇到1码片偏移量,搜索器会产生更加精确的初始偏移。
2. 多径延时与Rake finger组合
这些图说明了多于一个Rake finger的组合输出的有益影响。组合是在用去除旋转消除传播信道路径效应之后完成的。性能的改进可以在“组合”图中看到,那里所有的点都从y轴上移开,减少了符号值的模糊性。
表1:用Lattice ECP-DSP系列实现Rake引擎设计的容量。
正如文章开头所述,基站会收到沿着多个路径而来的终端信号。每个信号路径会有与之相联系的不同延时和相位旋转。图6为Rake接收机中一个信号的两个多径分量的接收和组合。
顶部整合图展示了在解扰、解扩和在符号周期整合后的两个多径分量。图的中间展示对每个多径分量施加了信道相位修正和加权值后,Rake接收机校正块的输出。最后一行显示了两个去旋转finger输出的总和,考虑较大的X轴范围,组合影响已加宽了“星座云团”间的间隙。注意在此图上Y轴(虚部)数据已被舍弃,因为被解码的特定DPDCH信道只出现在实轴上。
3. RTL仿真结果
最后两个图展示了RTL仿真得到的结果,说明了设计的实际实现情况。输入I和Q数据如图7所示。有两组数据多路复用,用模拟步长波形来辨别它们是可能的,这些是面向现有控制信道帧和先前数据信道帧的数据。处理数据和在设计的顶端共享输入的两个并行Rake引擎被仿真。数据信道延时的原因是一旦并行控制帧被译码,其扩展因子是唯一可知的。
Data0_out_dpcch信号可以看到突发的输出数据,Chan0_out_dpcch显示了此数据用于0、2、3信道,然后是1信道。
图8显示了8号finger的延时点由跟踪器跨越一个码片边界而步进的情况。对一个正常周期来说,2比特码片步长信号是1,但在此情况下是0,意味着路径已经缩短,使得延时已越过码片边界。仅仅3ms后,可以看到从1到0再回到1的转换,但O的持续时间持续太短而无法看到。7号finger的跟踪情况也在图中显示出来。
作者:Dyson Wilkes
莱迪思半导体公司