首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

信道矩阵重排序

信道矩阵重排序

信道矩阵重排序
球形检测器处理天线的顺序可对BER的性能产生较大影响。在进行球形检测之前,首先执行信道重排序。检测器利用信道矩阵预处理器实现了类似贝尔实验室分层空时 (BLAST) 结构上采用的连续干扰抵消处理技术,最终达到了接近ML性能。
该方法利用信道重排序处理来实现,通过多次迭代确定复杂信道矩阵最佳列检测次序。该算法根据迭代次数来选择范数最大或最小的行。欧几里德范数最小的行表示天线影响最强,而欧几里德范数最大的行表示天线影响最弱。这种新颖的方案首先处理最弱的数据流,随后依次迭代处理功率从高到低的数据流。
为了满足应用对高数据速率的要求,我们实现了图2所示的基于流水线架构的信道排序模块。该模块可以在时分复用 (TDM) 模式下同时处理5条信道。这种方案延长了同一信道不同矩阵元素之间的处理时间,同时可保持高数据吞吐量。
在图2中,G矩阵计算是要求最高的组成部分。该过程的核心是矩阵求逆,可通过QR分解 (QRD) 来实现。实现QRD的常用方法是使用吉文斯旋转。

图 2 迭代信道矩阵重排序算法
该方法可执行对角线单元和非对角线单元的复杂旋转,这些单元都是我们所使用脉动阵列的基本计算单元。改进的实数矩阵QRD在获取信道矩阵列的最佳排序之后,下一步应对实数矩阵系数进行QR分解。用于该QRD处理的功能单元与计算逆矩阵的QRD引擎类似,但有一些不同之处。本例子的输入数据是实数,因此脉动阵列结构的维数会相应更高(即8×8实数值而不是4×4复数值)。
为了满足时序约束的要求,输入数据消耗速率必须保持在每时钟周期1个输入采样。这种要求给处理时延带来了挑战,即我们无法在5条信道的TDM结构中处理该问题。因此,在TDM组中将信道数量增加至 15 条,以延长同一信道矩阵中连续元素之间的处理时间。
球形检测器设计
您可以将迭代球形检测算法视为遍历树过程,树 i 的每一层对应于第 i 个天线的处理符号。实现遍历树有几种可选方法。我们选择的是广度优先搜索法,因为该方案具有备受欢迎的硬件友好特征。在每一层,只选择具有最小部分欧氏距离的K节点来计算扩展情况。这类检测器称为 K-best 检测器。范数计算是在球形检测器的部分欧氏距离 (PED) 模块中完成的。根据树的层次,我们可以利用3种不同的PED模块。根节点PED模块计算所有可能的PED(树层次指数是 i = M = 8)。
第二层PED模块分别对第一层计算得出的8个幸存路径进行计算,计算每个幸存路径的8个可能PED。在树层次指数 i = 7的情况下,将得出64个生成PED。第三类PED模块用于树的其它层次,负责为上一级计算得出的所有PED计算出最近节点的PED。这会将每一层的分支数量固定为 K = 64,如此传播至最后一层 i = 1 ,并产生64个最终PED以及它们的检测符号序列。SD流水线架构可允许在每个时钟周期中进行数据处理。因此,树的每一层只需要 1 个 PED 模块,从而使PED模块总数量与树的层数量相等。这样对4×4 64-QAM调制方式而言,PED的总数量为 8。图 3为 SD 结构图。

图 3 球形检测器处理流水线
FPGA性能实现目标
目标FPGA器件为Xilinx Virtex-5,其目标时钟频率是225MHz。如果为每个数据副载波估计信道矩阵,就会限制每个信道矩阵的处理时间。对于选定的时钟频率和5MHz通信带宽(在WiMAX系统中相当于360个数据副载波),我们可以按如下公式计算每个信道矩阵间隔的可用处理时钟周期数:

如前所述,我们设计了计算量要求最高的 4×4 天线与 64-QAM 调制方案的配置结构。本方案的原始数据速率可达到 83.965Mb/s。
针对 FPGA 的高级综合
高级综合工具将具体算法的高级描述作为其输入,可执行并生成基于FPGA实现的 RTL 描述,如图4所示。该RTL描述可与参考设计、IP核或已有RTL代码结合在一起,利用传统Xilinx ISE/EDK工具来创建完整的FPGA实现方案。

图 4 – 针对 FPGA 的高级综合
现代高级综合工具将非定时C/C++描述作为输入规范。该工具对同一C/C++ 代码执行 2 种解读:输入/输出行为的顺序语义与基于 C/C++ 代码与编译器指令的架构规范。这些高级综合工具根据 C/C++ 代码、编译器指令以及目标吞吐量的要求来生成高性能的流水线架构。高级综合工具还具有流水线级数的自动插入与资源共享等其它功能,这样可减少 FPGA资源的消耗。基本上讲,高级综合工具提高了FPGA设计的抽象级,并将耗时且容易发生错误的RTL设计任务实现透明化。
我们将重点集中在 C++ 描述的使用,其目标是利用 C++ 模板类来代表任意精度的整数类型以及利用模板功能来代表架构中参数化的模块。
图5给出总体设计方案,出发点是从MATLAB®功能描述中获得的C/C++参考代码。如图所示,在任何硬件目标平台中实现应用的第一步通常是重组C/C++ 参考代码。我们将“重组”表示为将原始C/C++ 代码以一种更适合目标处理引擎的格式进行重写(通常是为了使代码清晰明了、易于概念理解而不考虑最优性能)。例如,必须重新排列DSP处理器中的应用代码,以便算法可以高效地利用缓存。当目标器件是FPGA时,重组可能包括:重写代码用以表示可达到预期吞吐量的架构规范,或重写代码以高效利用FPGA的特定功能,例如嵌入式DSP宏。

图 5 C/C++ 改进型迭代设计方案
我们通过利用传统C/C++编译器(例如 gcc),并重新利用适用于C/C++参考代码校验的C/C++级测试台,可实现对 C/C++ 执行代码的功能校验。C/C++执行代码是高级综合工具的主要输入。但是,额外输入会显著影响生成硬件、及其性能和FPGA资源的使用数量。因此存在 2 个基本约束条件,分别为目标FPGA系列产品与目标时钟频率,它们都会影响生成架构中流水线级数的数量。
此外,高级综合工具可接受编译器指令(例如,在C/C++ 代码中插入注解),使设计者可以在不同C/C++代码段中应用不同的指令类型。例如,应用于循环(例如,循环展开)和其它数组(例如,指定哪些 FPGA 资源必须用于执行数组操作)的指令。
根据这些输入,高级综合工具生成输出架构 (RTL),并报告其吞吐量。然后设计者根据吞吐量的大小来修改指令,执行C/C++代码。如果生成的架构满足吞吐量方面的要求,则RTL输出用于FPGA实现工具 (ISE/EDK) 的输入。
只有在完成逻辑综合和布局布线之后,才报告可实现的最终时钟频率和FPGA资源使用数量。如果该设计不能满足时
序和FPGA资源限制这2方面要求,则该设计与预期设计不相符,那么设计者应修改C/C++执行代码或编译器指令。
返回列表