首页> 中国专利> 一种实现解扰解扩的方法和矢量运算器

一种实现解扰解扩的方法和矢量运算器

摘要

本发明公开了一种实现解扰解扩的方法,该方法包括:采用数据变换和加法进行基带数据与对应解扰解扩码复数相乘的操作,并将相乘所得数据存入矢量寄存器堆;从矢量寄存器堆中读出一行所述相乘所得的数据,进行相邻两数据的累加,得到半行数据,并存回矢量寄存器堆;继续读出矢量寄存器堆上次累加的结果或保留在矢量运算器结果寄存器中的上次累加结果继续相邻两数据的累加,得到1/4行数据,继续累加,最终得到1个累加数据;以此类推,完成矢量寄存器堆中每行相乘所得的数据的累加。本发明还同时公开了一种实现解扰解扩的矢量运算器。

著录项

  • 公开/公告号CN104767544A

    专利类型发明专利

  • 公开/公告日2015-07-08

    原文格式PDF

  • 申请/专利权人 深圳市中兴微电子技术有限公司;

    申请/专利号CN201410002164.8

  • 发明设计人 林文琼;华力;张永胜;

    申请日2014-01-02

  • 分类号

  • 代理机构北京派特恩知识产权代理有限公司;

  • 代理人王黎延

  • 地址 518085 广东省深圳市盐田区大梅沙1号厂房

  • 入库时间 2023-12-18 09:48:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-07-12

    专利实施许可合同备案的生效 IPC(主分类):H04B1/707 合同备案号:2019440020036 让与人:深圳市中兴微电子技术有限公司 受让人:西安克瑞斯半导体技术有限公司 发明名称:一种实现解扰解扩的方法和矢量运算器 申请公布日:20150708 授权公告日:20180824 许可种类:普通许可 备案日期:20190619 申请日:20140102

    专利实施许可合同备案的生效、变更及注销

  • 2018-08-24

    授权

    授权

  • 2016-09-14

    实质审查的生效 IPC(主分类):H04B1/707 申请日:20140102

    实质审查的生效

  • 2015-07-08

    公开

    公开

说明书

技术领域

本发明涉及通信领域中的解扰解扩技术,尤其涉及一种实现解扰解扩的方法和矢量运算器。

背景技术

随着移动通信技术的迅猛发展,通信模式从全球移动通讯系统(GSM)模式发展到宽带码分多址(WCDMA)模式,再到长期演进(LTE)模式,通信模式越来越多,越来越复杂。采用传统的专用集成电路(Application SpecificIntegrated Circuit,ASIC)方式实现多种通信模式时面临着芯片面积大、面向市场周期长的问题,并且存在电路高度定制化、不灵活、风险大的问题。

基于软基带来实现多通信模式将是今后的发展方向。但是,基于软基带的常用矢量运算器在实现码分多址(CDMA)的解扰解扩相关运算时效率不高,且功耗高。

发明内容

为解决现有存在的技术问题,本发明实施例提供一种实现解扰解扩的方法和矢量运算器。

为达到上述目的,本发明的技术方案是这样实现的:

本发明实施例提供了一种实现解扰解扩的方法,该方法包括:

采用数据变换和加法进行基带数据与对应的解扰解扩码复数相乘的操作,并将相乘所得数据存入矢量寄存器堆;

从矢量寄存器堆中读出一行所述相乘所得的数据,进行相邻两数据的累加,得到半行数据,并存回矢量寄存器堆;继续读出矢量寄存器堆上次累加的结果或保留在矢量运算器结果寄存器中的上次累加结果继续相邻两数据的累加,得到1/4行数据,继续累加,最终得到1个累加数据;以此类推,完成矢量寄存器堆中每行相乘所得的数据的累加。

其中,所述采用数据变换和加法进行基带数据与对应解扰解扩码复数相乘的操作,并存储所述相乘所得数据的步骤包括:

从矢量寄存器堆读出的第一行基带数据依据对应的解扰解扩码进行变换,并将变换后所得的数据相加,所得结果保存在矢量寄存器堆中;对从矢量寄存器堆读出的第二行基带数据执行相同的变换和相加处理,完成与对应解扰解扩码的相乘;如果两行数据结果需要累加,则在完成与对应解扰解扩码的相乘后与存储在矢量运算器结果寄存器中上行结果累加,再存回矢量寄存器堆;以此类推,完成所有基带数据与对应解扰解扩码的相乘。

优选的,该方法还包括:

在从矢量寄存器堆读出每行基带数据时,产生与该行基带数据对应的解扰解扩码。

其中,所述依据解扰解扩码对基带数据进行变换,为:

根据解扰解扩码对读出的基带数据进行复数实部与虚部位置交换,并进行实部或虚部符号取反的操作。

其中,所述对矢量寄存器堆中读出的每行相乘所得的数据的累加步骤包括:

从矢量寄存器堆中读出每行存储的N个相乘所得的数据,进行两两相加,得到N/2个数据,并存储于矢量寄存器堆中;再从寄存器堆读出所述N/2个数据继续进行两两相加,得到N/4个数据,并存储;以此类推,对矢量寄存器堆中每行存储的相乘所得的数据进行多次两两相加处理,直至最后每行累加得到1个数据;其中,所述N为正整数。

其中,所述对矢量寄存器堆中读出的每行相乘所得的数据的累加步骤包括:

从矢量寄存器堆中读出每行存储的N个相乘所得的数据,进行两两相加,得到N/2个结果数据;再从矢量运算器的结果寄存器中取出所述N/2个结果数据进行两两相加,得到N/4个数据;以此类推,对每行数据进行多次两两相加处理,直至每行累加得到1个数据;其中,所述N为正整数。

本发明实施例还提供了一种实现解扰解扩的矢量运算器,所述矢量运算器包括:矢量寄存器堆、读口操作单元和矢量乘加器;其中,

所述矢量寄存器堆,用于存储基带数据,基带数据与对应解扰解扩码相乘所得的结果,以及行间数据累加结果和行内两两数据累加结果;

所述读口操作单元,用于从所述矢量寄存器堆读出基带数据,并依据对应的解扰解扩码对基带数据进行数据变换;或者,从所述矢量寄存器堆中读出基带数据与解扰解扩码相乘后的数据或累加后的数据,并进行相邻两数据相加需要的数据位置变换;

所述矢量乘加器,用于将经所述读口操作单元变换后的数据进行加法处理,将所得结果保存在矢量寄存器堆中;

还用于分别对从矢量寄存器堆中读出的一行相乘所得的数据进行相邻两数据的累加,得到半行数据,并存回所述矢量寄存器堆;继续读出矢量寄存器堆上次累加的结果或保留在矢量运算器结果寄存器中的上次累加结果继续相邻两数据的累加,得到1/4行数据,继续累加,最终得到1个累加数据,以此类推,完成矢量寄存器堆中每行相乘所得的数据的累加。

优选的,所述矢量运算器还包括:解扰解扩码产生器,用于读口操作单元在从所述矢量寄存器堆读出每行基带数据时,产生与该行基带数据对应的解扰解扩码。

其中,所述矢量乘加器对矢量寄存器堆中读出的每行相乘所得的数据的累加,为:

将从矢量寄存器堆中读出的每行存储的N个相乘所得的数据,进行两两相加,得到N/2个数据,并存储于矢量寄存器堆中;再从寄存器堆读出所述N/2个数据继续进行两两相加,得到N/4个数据,并存储;以此类推,对矢量寄存器堆中每行存储的相乘所得的数据进行多次两两相加处理,直至最后每行累加得到1个数据;其中,所述N为正整数。

其中,所述矢量乘加器对矢量寄存器堆中读出的每行相乘所得的数据的累加,为:

将从矢量寄存器堆中读出的每行存储的N个相乘所得的数据,进行两两相加,得到N/2个结果数据;再从矢量运算器的结果寄存器中取出所述N/2个结果数据进行两两相加,得到N/4个数据;以此类推,对每行数据进行多次两两相加处理,直至每行累加得到1个数据;其中,所述N为正整数。

本发明提供的实现解扰解扩的方法和矢量运算器,采用数据变换和加法进行基带数据与对应解扰解扩码复数相乘的操作,并将相乘所得数据存入矢量寄存器堆;从矢量寄存器堆中读出一行所述相乘所得的数据,进行相邻两数据的累加,得到半行数据,并存回矢量寄存器堆;继续读出矢量寄存器堆上次累加的结果或保留在矢量运算器结果寄存器中的上次累加结果继续相邻两数据的累加,得到1/4行数据,继续累加,最终得到1个累加数据;以此类推,完成矢量寄存器堆中每行相乘所得的数据的累加。

可见,本发明上述实施例的解扰解扩码与基带数据相乘的实现过程仅需简单的变换和加法运算,而非通过一般的乘法来实现,解扰解扩码伴随基带数据同时产生,不需要读取,提高效率;而且,进行行内两两数据累加时,每次累加时可以充分利用所有加法器的迭代方法,同样提高效率、且功耗更低。而且,本发明实施例在不增加加法器数目的前提下仅作如下改进:

1)对X读口读出的矢量的相邻数据单元做位置交换、符号变换等操作;

2)将加法器输出反馈拉线到加法器输入。

就能在支持通常的实数模式复数模式乘加、乘累加以及fft蝶形运算的运算器基础上增加解扰解扩功能,因此实现代价小。

附图说明

在附图(其不一定是按比例绘制的)中,相似的附图标记可在不同的视图中描述相似的部件。具有不同字母后缀的相似附图标记可表示相似部件的不同示例。附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。

图1为通常并行方式实现的解扰解扩原理框图;

图2为本发明实施例的一种解扰解扩的方法实现流程图;

图3为本发明实施例所述mult 1nj指令的原理框图;

图4为本发明实施例所述mac 1nj指令的原理框图;

图5为本发明实施例图2所述的对矢量寄存器堆中读出的每行相乘所得的数据的累加方法实现流程图;

图6为本发明实施例所述sxu指令的原理框图;

图7为本发明实施例图2所述的对矢量寄存器堆中读出的每行相乘所得的数据的累加另一种方法实现流程图;

图8为本发明实施例所述sxu2指令的原理框图;

图9为本发明实施例所述一种实现解扰解扩的矢量运算器的结构示意图。

具体实施方式

图1为通常并行方式实现的解扰解扩原理框图,如图1所示,先将解扰解扩码与对应的基带数据相乘,再进行累加。图中只给出了两级累加,相当于扩频因子为4的情况,如果扩频因子为32,则需要5级累加,扩频因子为2^k,需要k级累加。采用并行累加的方式需要的加法器很多,数目为n/2(n为矢量所包含数据的个数)。

图2为本发明实施例的一种解扰解扩的方法实现流程图,如图2所示,该方法包括:

步骤201:采用数据变换和加法进行基带数据与对应解扰解扩码复数相乘的操作,并将相乘所得数据存入矢量寄存器堆;

步骤202:从矢量寄存器堆中读出一行所述相乘所得的数据,进行相邻两数据的累加,得到半行数据,并存回矢量寄存器堆;继续读出矢量寄存器堆上次累加的结果或保留在矢量运算器结果寄存器中的上次累加结果继续相邻两数据的累加,得到1/4行数据,继续累加,最终得到1个累加数据;以此类推,完成矢量寄存器堆中每行相乘所得的数据的累加。

所述步骤201具体包括:

从矢量寄存器堆读出的第一行基带数据依据对应的解扰解扩码进行变换,并将变换后所得的数据相加,所得结果保存在矢量寄存器堆中;对从矢量寄存器堆读出的第二行基带数据执行相同的变换和相加处理,完成与对应解扰解扩码的相乘;如果两行数据结果需要累加,则在完成与对应解扰解扩码的相乘后与存储在矢量运算器结果寄存器中上行结果累加,再存回矢量寄存器堆;以此类推,完成所有基带数据与对应解扰解扩码的相乘。

在实际应用过程中,对于步骤201基于矢量运算器,并采用mult 1nj和mac1nj指令实现。

其中,所述mult 1nj,即:mult vw,vx,1nj,nw;//表示vx*1nj,并写回到vw指针所指的矢量寄存器vv对中。其中,所述vx表示从矢量寄存器堆中读出的基带数据,所述1nj表示解扰解扩码,所述nw表示结果不写回矢量寄存器,可以节省功耗。

以32个基带数据为例,执行mult vw,vx,1nj,nw;以完成解扰解扩码与基带数据的相乘。如图3所示,需要将通过vx口读出的32个复数根据解扰解扩码(存在四种解扰解扩码)做如下变换:

因此,对应的在矢量运算器中,

vw(i)=ux(i)*1+ux(i+1)*1;

vw(i+1)=ux(i)*1-ux(i+1)*1;

i=0,2,4,…,62。

以(a+jb)*(1+j)=a-b+(a+b)j为例,先将a+jb变换为a-jb,送矢量运算器得到实部=a*1+(-b)*1=a-b;虚部=a*1-(-b)*1=a+b。

其中,所述mac1nj指令,即:mac vw,vx,1nj,nw;//表示vx*1nj,并加上上次的乘积,写回到vw指针所指的矢量寄存器vv对中。其中,所述vx表示从矢量寄存器堆中读出的基带数据,所述1nj表示解扰解扩码,所述nw表示结果不写回矢量寄存器,可以节省功耗。在所述mac 1nj指令前通常是mult 1nj指令。

图4为所述mac 1nj的原理框图,其与mult 1nj的原理类似,与之不同的是需要累加上一次mult 1nj的乘积。

需要说明的是,所述mult 1nj和mac 1nj指令对待处理基带数据的个数没有要求。

上述方案中,所述步骤202的实现步骤如图5所示,该方法包括:

步骤501:从矢量寄存器堆中读出每行存储的N个相乘所得的数据,进行两两相加,得到N/2个数据,并存储于矢量寄存器堆中;

步骤502:从寄存器堆读出所述N/2个数据继续进行两两相加,得到N/4个数据,并存储;以此类推,对矢量寄存器堆中每行存储的相乘所得的数据进行多次两两相加处理,直至最后每行累加得到1个数据。

上述方案中,所述N为正整数。该流程实现了矢量内减半的累加功能。

需要说明的是,不一定每行数据最后要累加到1个结果,根据配置需要累加一定次数得到一定数目的结果。比如:1行32个数,配置累加数为8则累加3次得到4个结果,如配置累加数目为32则累加5次得到1个结果。这是行内累加。

在实际应用过程中,对于步骤501和步骤502基于矢量运算器,并采用sxu指令实现。所述sxu指令,即:sxu op_num,vw,vx,nw;//表示完成32个复数累加到16个复数的过程,nw表示结果不写回矢量寄存器,可以节省功耗。

其中,Op_num=16/8/4/2/1表示累加的结果数目,用于写回时mask使需要的数据写回。Op_num=8,mask=0x0000_00ff,则表示左边8个复数可以写回。不执行的复数加法器可以关闭时钟,节省功耗。

图6为本发明实施例所述sxu指令的原理框图,如图6所示,累加数据来自vx读口,经过X口位置变换后送矢量乘加器完成相邻两数的累加,得到16个复数结果。图中虚线表示不需要连接,灰色的加法器表示在此指令执行中不需要。可以看出,上述实现解扰解扩的指令都是基于通常功能的矢量乘加器实现的,没有太多的硬件代价。

图7为本发明实施例的所述步骤202的另一种实现方法实现流程图,如图7所示,该方法包括:

步骤701:从矢量寄存器堆中读出每行存储的N个相乘所得的数据,进行两两相加,得到N/2个结果数据;

这里,与步骤501不同的是,不需将两两相加的结果存储于矢量寄存器堆中。

步骤702:从矢量运算器的结果寄存器中取出所述N/2个结果数据进行两两相加,得到N/4个数据;以此类推,对每行数据进行多次两两相加处理,直至每行累加得到1个数据;其中,所述N为正整数。

这里,除了第一次都是从寄存器堆读出N个数据外,后续累加都是从运算器的结果寄存器读出数据进行累加,好处在于比从寄存器堆读取减少很多时钟周期延时,能够连续不间断的累加。

该实施例的流程支持通过反馈完成矢量内的减半累加,反馈完成延时小,能连续进行,适合快速完成少量数据的累加需求。

在实际应用过程中,对于步骤701和步骤702基于矢量运算器,并采用sxu2指令实现,即:sxu2 op_num,vw,temp,nw;//表示将上次加法器输出寄存器结果(temp)反馈累加,只支持16个数到8个数的累加、8个数到4个数的累加、4个数到2个数的累加、2个数到1个数的累加。nw表示结果不写回矢量寄存器,可以节省功耗。

其中,Op_num=16/8/4/2/1表示累加的结果数目,用于写回时mask使需要的数据写回。Op_num=8,mask=0x0000_00ff,则表示左边8个复数可以写回。不执行的复数加法器可以关闭时钟,节省功耗。

图8为本发明实施例所述sxu2指令的原理框图,如图8所示,sxu2是一条优化的反馈累加指令,针对少量数据累加时的改进。

sxu指令在执行时需要等待上一次sxu累加的数据写入矢量寄存器堆,两条sxu指令之间需要间隔至少3条其他指令。因为执行流水线从矢量寄存器读出到写回矢量寄存器共4阶VRF->E0->E1->VWB。

当需要累加的数据很多时,可以通过安排,以使效率没有损失。如下:

sxu 16,v8,v0;//{v1,v0}->v8第一次累加

sxu 16,v9,v2;//{v3,v2}->v8

sxu 16,v10,v4;//{v5,v4}->v8

sxu 16,v11,v6;//{v7,v6}->v8

sxu 8,v0,v8;//v8->v0,可以累加第二次

但是假设只有{v1,v0}需要累加到1个复数时,两次累加指令需要间隔3条指令,效率很低。

这里设计优化累加指令sxu2 op_num,vw,temp,nw;temp表示输入累加的数据来自上次加法器输出的临时寄存器。其他参数与sxu指令相同。只支持16->8、8->4、4->2、2->1,第一次32->16的累加依然需要sxu指令。

如图8,虚线表示不需要连接,灰色的元件表示不需要,使用sxu2实现上述例子。

sxu 16,v8,v0,nw;//{v1,v0}->temp

sxu2 8,v0,temp,nw;//temp->temp累加第二次

sxu2 4,v0,temp,nw;//temp->temp累加第三次

sxu2 2,v0,temp,nw;//temp->temp累加第四次

sxu2 1,v0,temp;//temp->v0累加第五次,结果在v0[0]。

优选的,该方法还包括:在从矢量寄存器堆读出每行基带数据时,产生与该行基带数据对应的解扰解扩码。因此,可提高解扰解扩的效率,且减少解扰解扩码的存储需求和读写RAM的功耗。

其中,所述步骤201的细化描述中所述依据解扰解扩码对基带数据进行变换,为:

根据解扰解扩码对读出的基带数据进行复数实部与虚部位置交换,并进行实部或虚部符号取反的操作。

本发明实施例还提供了一种实现解扰解扩的矢量运算器,如图9所示,该矢量运算器包括:矢量寄存器堆901、读口操作单元902和矢量乘加器903;其中,

所述矢量寄存器堆901,用于存储基带数据,基带数据与对应解扰解扩码相乘所得的结果,以及行间数据累加结果和行内两两数据累加结果;

所述读口操作单元902,用于从所述矢量寄存器堆901读出基带数据,并依据对应的解扰解扩码对基带数据进行数据变换;或者,从所述矢量寄存器堆901中读出基带数据与解扰解扩码相乘后的数据或累加后的数据,并进行相邻两数据相加需要的数据位置变换;

所述矢量乘加器903,用于将经所述读口操作单元变换后的数据进行相加处理,将所得结果保存在矢量寄存器堆901中;

还用于分别对从矢量寄存器堆901中读出的一行相乘所得的数据进行相邻两数据的累加,得到半行数据,并存回所述矢量寄存器堆;继续读出矢量寄存器堆901上次累加的结果或保留在矢量运算器结果寄存器中的上次累加结果继续相邻两数据的累加,得到1/4行数据,继续累加,最终得到1个累加数据,以此类推,完成矢量寄存器堆901中每行相乘所得的数据的累加。

优选的,所述矢量运算器还包括:解扰解扩码产生器904,用于读口操作单元在从所述矢量寄存器堆901读出每行基带数据时,产生与该行基带数据对应的解扰解扩码。

其中,所述矢量乘加器对矢量寄存器堆中读出的每行相乘所得的数据的累加,为:

将从矢量寄存器堆中读出的每行存储的N个相乘所得的数据,进行两两相加,得到N/2个数据,并存储于矢量寄存器堆中;再从寄存器堆读出所述N/2个数据继续进行两两相加,得到N/4个数据,并存储;以此类推,对矢量寄存器堆中每行存储的相乘所得的数据进行多次两两相加处理,直至最后每行累加得到1个数据;其中,所述N为正整数。

其中,所述矢量乘加器对矢量寄存器堆中读出的每行相乘所得的数据的累加,为:

将从矢量寄存器堆中读出的每行存储的N个相乘所得的数据,进行两两相加,得到N/2个结果数据;再从矢量运算器的结果寄存器中取出所述N/2个结果数据进行两两相加,得到N/4个数据;以此类推,对每行数据进行多次两两相加处理,直至每行累加得到1个数据;其中,所述N为正整数。

实际应用过程中,上述图9中所述的矢量运算器中,包括:矢量寄存器堆、矢量乘加器和读口操作单元,还包括解扰解扩码产生器;其中,所述读口操作单元包括:X读口操作单元、Y读口操作单元和Z读口操作单元。当然,实际还需要其他部件,诸如:数据RAM、程序RAM、指令读取控制,指令流水线,指令译码等等,不详述。

基带数据从外部下载到RAM中,计算时从RAM读到矢量寄存器堆中。所述矢量寄存器堆作为计算数据的缓存,矢量行数和矢量宽度根据待处理数据进行设置。这里,矢量寄存器堆8行,每行分为2个半行,可以寻址1行,也可以寻址半行,每整行矢量32个复数,半行16个复数。这里8行分别设为{v1,v0},{v3,v2},…,{v15,v14},每个vv表示半行,1对vv表示1行;

所述矢量寄存器堆有3个读口X、Y、Z。读出的3对vv或3个vv(3个读口可以读取相同的vv)分别通过X读口操作单元、Y读口操作单元和Z读口操作单元进行变换,所述变换可为:取反,取共轭,实部清0,虚部清0,实部被虚部数据替换,虚部被实部数据替换,根据不同运算变换数据单元位置,X读口操作单元还可以根据输入的解扰解扩码,对数据单元进行实部取反,虚部取反,实部虚部交换3类之一或组合操作。

X、Y、Z3个数据读口操作单元,通常实现X*Y+Z的功能。本发明实施例所述解扰解扩过程只需要使用X读口操作单元,Y设置为1,Z设置为0。在X读口操作单元根据解扰解扩码对读出数据进行复数实部与虚部位置交换,实部或虚部符号取反操作。

所述矢量乘加器完成一般矢量的复数乘法,乘加,乘累加,实数乘法,乘加,乘累加,还有fft的蝶形运算。对于本发明实施例所述解扰解扩过程,矢量乘加器只使用加法器,输入数据有些需要符号取反。另外支持反馈累加时,需要将加法器输出到输入拉线。这里,由于本发明实施例没有1次累加32个数到1个数,只累加32个数到16个数,所以只使用了已有的加法器,没有增加加法器。

所述解扰解扩码产生器可以根据小区ID帧中的位置等信息设置初始状态,然后随解扰解扩指令mult 1nj或mac 1nj每次产生32个相应的码(2bit代表一个复数,共64bit)送给X读口操作单元,控制X读口读出的数据进行变换。解扰解扩码的产生不是本发明实施例的重点,这里不详细描述。

基于上述矢量运算器,编程指令顺序执行基带数据的解扰解扩,所以每执行一条mult 1nj或mac 1nj指令,解扰解扩码产生器会自动产生接下来的解扰解扩码。当数据顺序中断时,需要重新设置解扰解扩码产生器的初始值。

需要说明的是,存储在矢量寄存器堆vv中的基带数据都是与产生的解扰解扩码序列对齐的,这是通过从RAM读取数据到矢量寄存器堆中的对齐操作实现的,此处不详述。

通常简单的并行累加,以32个数据为例,需要5级累加,依次使用16、8、4、2、1共31个加法器,复数则使用31x2=62个加法器,芯片中运算单元面积很大。而本发明实施例的32个复数累加只使用32个加法器,面积减少很多,能基本复用通常乘加器的逻辑。

下面以扩频因子=32,32个复数为例说明本发明流程。

假设基带数据已经存在于矢量寄存器{v1,v0}中,采用图5所示的方法实现解扰解扩,如下:

mult v8,v0,1nj;//{v1,v0}中32个复数乘上解扰解扩码后存储到{v9,v8}

nop;

nop;

nop;

sxu 16 v8,v8,nw;//32-16表示32个数累加到16个,下面相同

nop;

nop;

nop;

sxu 8 v8,v8,nw;//16-8

nop;

nop;

nop;

sxu 4 v8,v8,nw;//8-4

nop;

nop;

nop;

sxu 2 v8,v8,nw;//4-2

nop;

nop;

nop;

sxu 1 v8,v8;//2-1

sxu指令每次只能从矢量寄存器中读出1行,相邻两数据累加后得到16个数据写回。通过多次迭代累加,可以最后累加得到1个结果。上面程序每两指令间需要间隔3个nop或其他3个无关指令。效率很低。间隔3个nop的原因是流水线从读矢量寄存器到写回矢量寄存器为VRF-E0-E1-VWB共4阶。

如使用sxu2指令,同样对上述矢量寄存器{v1,v0}中存储的基带数据进行如下处理,即采用图7所示的方法实现解扰解扩:

mult v8,v0,1nj;//{v1,v0}中32个复数乘上解扰解扩码后存储到{v9,v8}

nop;

nop;

nop;

sxu 16 v8,v8,nw;//32-16

sxu2 8 v8,temp,nw;//16-8

sxu2 4 v8,temp,nw;//8-4

sxu2 2 v8,temp,nw;//4-2

sxu2 1 v8,temp;//2-1

除mult 1nj和sxu之间的3个nop其他nop都消除了,效率提高很显著。在数据量小的时候使用sxu2指令可以提高效率。

如果使用sxu在数据量大的时候,可以通过编程拼接,得到效率的提升。以扩频因子32,数据数目8x32为例,假设都做过了mult 1nj

sxu 16 v8,v0;//{v1,v0}->v8

sxu 16 v9,v2;

sxu 16 v10,v4;

sxu 16 v11,v6;

//从ram更新v0~v7的基带数据,继续

sxu 16 v12,v0;//{v1,v0}->v12

sxu 16 v13,v2;

sxu 16 v14,v4;

sxu 16 v15,v6;

//第二轮累加

sxu 16 v0,v8;//{v9,v8}->v0

sxu 16 v1,v10;

sxu 16 v2,v12;

sxu 16 v3,v14;

//第三轮累加

nop;

sxu 16 v0,v0;//{v1,v0}->v0

nop;

sxu 16 v1,v2;//{v3,v2}->v1

//第四轮累加

Nop;

Nop;

Nop;

sxu 16 v0,v0,nw;//{v1,v0}->v0

//第五轮累加

sxu2 8 v0,temp;//temp->v08个结果

共用了21个时钟周期cycles,通过更精细的拼接这里5个nop可以利用上。而一般的使用31个复数加法器的方案需要8个cycles。

当扩频因子大于32,比如256,需要先进行8行解扰解扩,并行间累加得到1行数据

Mult 1nj;

Mac 1nj;//1累加上1行指令的乘积

Mac 1nj;//2

Mac 1nj;//7

之后运算与信道因子32类似。

不管本发明实施例还是通常实现方式都是需要行间累加这些运算cycle,8+21:8+8=29:16所以当扩频因子大于矢量数据宽度时,本发明效率更高些。

下面再举例说明本发明实施例所述mult 1nj、mac 1nj、sxu和sxu2四个指令的应用。

实施例1、使用sxu2指令,以扩频因子为128,累加数据也为128个复数为例,进行解扰解扩,如下:

mult v8,v0,1nj,nw;

mac v8,v2,1nj,nw;

mac v8,v4,1nj,nw;

mac v8,v6,1nj;//完成4行{v1,v0}{v3,v2}{v5,v4}{v7,v6}相关累加到矢量寄存器{v9,v8}行

nop;//可以为其他指令

nop;//可以为其他指令

nop;//可以为其他指令

sxu 16v8,v8,nw;//完成1行两两相加产生16个复数结果

sxu2 8v8,temp,nw;;//上次存储在temp的16个复数累加到8个复数

sxu2 4v8,temp,nw;;//上次存储在temp的8个复数累加到4个复数

sxu2 2v8,temp,nw;;//上次存储在temp的4个复数累加到2个复数

sxu2 1v8,temp;//上次存储在temp的2个复数累加到2个复数

最后硬件自动产mask=0x0000_0001,将结果的最低处1个复数写入v8[0](0~31)。共用12个cycles完成128个复数扩频因子128的解扰解扩。通常1次累加到1个数的方法需要5个cycles。本发明不考虑nop为9,那么9:5则表明本实施例方法的效率超过通常方法效率的1/2。

实施例2、使用sxu,以扩频因子=8,累加数据4x32个复数为例进行解扰解扩,如下:

//step1:

mult v8,v0,1nj;//完成1行相关

mult v10,v2,1nj;//完成1行相关

mult v12,v4,1nj;//完成1行相关

mult v14,v6,1nj;//完成1行相关

//step2:

sxu 16v0,v8;//完成{v9,v8}32个复数两两相加得到16个复数结果

sxu 16 v1,v10;//完成{v11,v10}32个复数两两相加得到16个复数结果

sxu 16 v2,v12;//完成{v13,v12}32个复数两两相加得到16个复数结果

sxu 16 v3,v14;//完成{v15,v14}32个复数两两相加得到16个复数结果

//step3:

nop;//可以为其他指令

sxu 16 v0,v0;//{v1,v0}-->v0

nop;//可以为其他指令

sxu 16v1,v2;//{v3,v2}-->v1

//step4:

nop;//可以为其他指令

nop;//可以为其他指令

nop;//可以为其他指令

sxu 16v0,v0;//{v1,v0}-->v0最后得到16个累加结果存在v0

上述例子共利用了16个cycles完成4x32个复数每8个相关和累加。如果采用一般5阶32个复数全部累加的方式,需要4个cycles相关,4个cycles累加,共8个cycles。相比来说,本发明实施例的效率为一般方法的1/2。上述方案的编程不是效率最高的排布,因为中间有5个指令周期(nop),如果编程再安排更多数据解扰解扩指令填充nop,则(16-5):8,则效率更高。

可见,本发明在很小的电路代价下,不增加加法器的数目,仅仅需作如下改进:

1)对X读口读出的矢量的相邻数据单元做位置交换、符号变换等操作;

2)将加法器输出反馈拉线到加法器输入。

就能在支持通常的实数模式复数模式乘加、乘累加以及fft蝶形运算的运算器基础上增加解扰解扩功能。

总之,本发明可在通常的矢量运算单元基础上,仅作少数连线变换,就可实现解扰解扩功能,实现代价小;而且,有专用的并且伴随指令的解扰解扩码产生器,可提高解扰解扩的效率,且减少解扰解扩码的存储需求和读写RAM的功耗。

此外,本发明的解扰解扩码与基带数据相乘的实现过程仅需加法运算,而非通过一般的乘法来实现,功耗更低。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号