CN104834502A - 一种dsp中高效cordic指令实现方法 - Google Patents
一种dsp中高效cordic指令实现方法 Download PDFInfo
- Publication number
- CN104834502A CN104834502A CN201510236473.6A CN201510236473A CN104834502A CN 104834502 A CN104834502 A CN 104834502A CN 201510236473 A CN201510236473 A CN 201510236473A CN 104834502 A CN104834502 A CN 104834502A
- Authority
- CN
- China
- Prior art keywords
- instruction
- cordic
- dsp
- implementation method
- computing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Complex Calculations (AREA)
Abstract
本发明涉及一种用于DSP中高效CORDIC指令实现方法,该方法规范一种CORDIC运算的DSP指令,该指令内嵌至DSP内核流水线中,给出一套DSP内部模块化实现CORDIC计算三角函数的方法。通过内嵌至DSP内核流水线的CORDIC指令来实现CORDIC运算,简化了软件编程复杂度,降低了软硬件交互的损耗,可以高效的完成三角函数的计算。并且基于模块化设计的CORDIC运算,极大的降低了硬件的损耗,节省了芯片的成本,同时使得基于DSP实现的CORDIC运算达到相当高的精度。
Description
技术领域
本发明涉及DSP处理器的CORDIC指令集,尤其是为实现该指令集所需的硬件实现架构。
背景技术
常用的三角函数,尤其是正余弦,在各种信号处理系统中有着广泛的应用,且一般有实时性的要求。实现三角函数常用的近似计算方法主要有迭代法、级数法、查表法以及CORDIC法,相对于其他算法,CORDIC算法可以达到很高的精度。
在集成电路中,实现CORDIC算法有两种方法:DSP软件编程实现方法和硬件加速器的方法。尽管DSP编程可以实现CORDIC运算,但是DSP软件编程实现存在编程复杂、软件开销大、实时性不强、精度不高等不利因素。硬件加速器的方法,克服了软件的部分问题,但是软硬件之间存在交互,效率受限。本发明为针对这两种现有实现方法的不足,以CORDIC指令嵌入到DSP内核的流水线中,实现了编程简单、软件开销小,实时性强,精度高,无需软硬件交互等优点。
发明内容
本发明的目的在于提供一种DSP中高效CORDIC指令实现方法,以克服现有技术中的不足。
为实现上述目的,本发明提供如下技术方案:
本申请实施例公开了一种DSP中高效CORDIC指令实现方法,其特征在于,所述方法包括:
定义一种CORDIC运算的DSP指令,用于三角函数的计算。给出该指令内嵌至DSP内核流水线中的方法,详细说明一套DSP内部模块化实现CORDIC计算三角函数的方法。
优选的,其特征在于,包括指令识别码、模式选择以及输入参数通用寄存器序号。
优选的,其特征在于,基于指令实现的CORDIC运算,内嵌至DSP内核的流水线(pipeline)中,无需进行如中断或查询的方式来获取结果,简化了软硬件交互,提高了运算效率。
进一步的,其特征在于CORDIC指令所运算得到的结果,可以被下一条指令直接使用,指令与指令之间无需插入等待周期。
优选的,其特征在于,给出了该指令的实现方法,该方法通过分解CORDIC运算的过程,使得复用一套资源实现CORDIC多种模式的计算。
进一步的,其特征在于,CORDIC运算分解实现包括几大主要的组成部分:模式选择、输入归一化、CORDIC内核、结果归一化。
进一步的,其特征在于,定义了一种迭代次数为I,内部位宽为N,来得到三角函数精度为E的运算结果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为DSP架构整体框图。
图2为本法明具体实施例DSP CORDIC指令流水线图。
图3为本法明具体实施例16bit DSP CORDIC指令编码示例。
图4为本法明具体实施例CORDIC指令的实现框图。
图5为本法明具体实施例CORDIC指令实现的运行内核图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更佳清楚、明白,以下结合附图和实施例,对本发明进行进一步的详细说明,应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。
本发明的整体思路为:定义一种CORDIC运算的DSP指令,给出该指令内嵌至DSP内核流水线中的方法,详细说明一套DSP内部模块化实现CORDIC计算三角函数的方法。
CORDIC迭代在圆周系统的迭代算法为:
Xn+1=Xn-SnYn2-n↓
Yn+1=Yn+SnXn2-n↓
Zn+1=Zn-Sntan-1(2-n)
在旋转模式中(正余弦模式),Sn为Zn的符号函数:
经过N次迭代后,CORDIC公式的输出变为:
XN=K[X0cos(Z0)-Y0sin(Z0)]
YN=K[X0sin(Z0)+Y0cos(Z0)]
ZN=0
其中:
若:Y0=0,Z0=α,α∈[-pi/2,pi/2]
那么N次迭代后CORDIC公式的输出变为:
[XN,YN,ZN]=[cos(α),sin(α),0]
在向量模式中(反正切模式),Sn与Xn、Yn的相乘的符号数相关:
Sn=-sign(Xn*Yn)
CORDIC经过N次迭代后,CORDIC公式的输出变为:
YN=0↓
ZN=Z0+tan-1(Y0/X0)
若:Z0=0,那么N次迭代后CORDIC计算得到的ZN为角度,XN为开根号。
下文将以16bit的一个DSP内核为例,来说明CORDIC指令内嵌处理器流水线的方式以及指令的编码方式,本发明所述的CORDIC指令不限于所内嵌的处理器内核,不限于处理器的位宽数,也不限于指令编码每BIT所代表的含义。
如图1所示为DSP架构,108为DSP内核,和内核相连接的有程序存储器(PM)101、数据存储器0(DM0)102、数据存储器1(DM1)103以及程序总线104、数据总线105、数据总线106。DSP内核主要的模块107有PC控制、通用寄存器Register File以及运算模块(ALU、MAC、DIV、CORDIC),CORDIC也即为本发明添加至DSP内核中的模块。
DSP的CORDIC指令需要几个组成部分:指令识别码、模式选择、通用寄存器序号部分。指令识别码和通用寄存器序号部分为必须,模式选择部分可以单独提取出来,也可以通过在指令识别码来区分所计算的模式。以一个16DSP处理器为例来说明CORDIC指令的编码:设该DSP处理器高3bit为指令识别码,高3bit为101来指示该指令为CORDIC指令;通过第6bit来指示该CORDIC计算的模式,为计算正余弦模式或者反正切模式;低3bit和次低3bit为输入通用寄存器序号,指示CORDIC运算输入参数所使用的内部通用寄存器,不同的模式,这两个寄存器所代表的含义不尽相同。针对正余弦模式,低3bit代表计算正余弦角度Z0所对应的通用寄存器。针对反正切模式,低3bit代表向量(X0,Y0)的X0,所对应的通用寄存器的序号,次低3bit代表向量(X0,Y0)的Y0所对应的通用寄存器的序号。
DSP内核通过CORDIC指令实现CORDIC运算,首先DSP从PM中取出CORDIC指令202,CORDIC指令经过译码203之后,CORDIC指令进入执行阶段。CORDIC指令运算需要M个cycle即可得到结果,在M个cycle之后即可使用CORDIC的运算结果。CORDIC指令译码的同时,已经把下一条指令(指令2)205从PM中读出,在CORDIC指令执行的第一个cycle,指令2完成译码过程,待CORDIC指令执行完之后,即可立即执行指令2。另外,在CORDIC指令执行的最后一个cycle,完成接下来一条指令的读取209。从整个DSP处理的流水来看,CORDIC指令插入DSP处理器的流水线中,并且也无需插入等待周期,下一个指令即可使用CORDIC的结果。
为支持上面所述圆周系统的正余弦和反正切两种模式,CORDIC指令的实现分为几大部分,输入归一化模块408、CORDIC内核模块409、结果归一化模块410、模式选择401、输入参数402/403/404、输出结果411/412/413。模式选择用于选择是正余弦计算还是反正切计算,通过模式选择来控制归一化、运算内核、输出结果处理等在不同模式下,差异化处理的不同处理方式。输入归一化模块用于在不同模式下可以复用CORDIC内核,这样就可以使用同一套内核资源完成不同模式的运算,极大的节省了硬件的开销,降低了芯片的成本。CORDIC内核模块完成CORDIC的迭代运算,迭代完成之后把结果送至结果归一化模块。归一化模块在不同的模式下,对CORDIC迭代之后的结果进行不同的处理。
CORDIC内核409实现的内容也即上文中的迭代过程,分为XN/YN/ZN三部分迭代。实现的过程中,需要内部存储tan^(-1)(2^(-n))508定点化之后的数据以备迭代,其中501/504/507/508实现ZN的迭代,502/505/510/511/512实现XN的迭代,503/506/513/514/515实现了YN的迭代。516/517/518为迭代的过程数据,同时在完成最后一次迭代之后,也为迭代完成的数据,输入结果归一化处理。
CORDIC迭代次数与指令执行周期数成正比,与计算结果的精度成反比。CORDIC迭代的内部数据宽度与所消耗的资源成正比,与计算结果的精度成反比。迭代次数少,则执行周期数少,精度低;迭代次数多,则执行周期数多,精度高。内部数据位宽少,则所消耗资源少,精度低;内部数据位宽多,则所需资源多,精度高。
使用误差的均方根来表示CORDIC的精度,如下公式:
为得到精度为E的计算,需要迭代次数为I,内部位宽为N来配合完成。
假设内部使用16次迭代完成CORDIC算法来计算三角函数,同时把内部数据宽度扩展至33BIT进行迭代操作,CORDIC所计算的三角函数达到了相当高的精度:
CORDIC指令计算得到的正余弦和理论的正余弦(SIN/COS)误差的均方根E=Xrms=9.25e-5。
CORDIC指令计算得到的向量反正切(atan)和理论的反正切误差的均方根E=Xrms=6.45e-5。
上述说明示出并描述了本发明的优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应当看作是对其他实施例的排出,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (7)
1.一种DSP中高效CORDIC指令实现方法,其特征在于,所述方法包括:
定义一种CORDIC运算的DSP指令,用于三角函数的计算,给出该指令内嵌至DSP内核流水线中的方法,详细说明一套DSP内部模块化实现CORDIC计算三角函数的方法。
2.根据权利要求1所述的指令实现方法,其特征在于,所述DSP指令编码内容包括指令识别码、模式选择以及输入参数通用寄存器序号。
3.根据权利要求2所述的方法,其特征在于,基于指令实现的CORDIC运算,内嵌至DSP内核的流水线(pipeline)中,无需进行如中断或查询的方式来获取结果。
4.根据权利要求2所述的指令实现方法,其特征在于,CORDIC指令所运算得到的结果,可以被下一条指令直接使用,指令与指令之间无需插入等待周期。
5.根据权利要求1所述的指令实现方法,其特征在于,指令的实现方法通过分解CORDIC运算的过程,使得复用一套资源实现CORDIC多种模式的计算。
6.根据权利要求5所述的指令实现方法,其特征在于,CORDIC运算分解实现包括几大主要的组成部分:模式选择、输入归一化、CORDIC内核、结果归一化。
7.根据权利要求6所述的指令实现方法,其特征在于,定义了一种迭代次数为I,内部位宽为N,来得到三角函数精度为E的运算结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510236473.6A CN104834502A (zh) | 2015-05-11 | 2015-05-11 | 一种dsp中高效cordic指令实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510236473.6A CN104834502A (zh) | 2015-05-11 | 2015-05-11 | 一种dsp中高效cordic指令实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104834502A true CN104834502A (zh) | 2015-08-12 |
Family
ID=53812414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510236473.6A Pending CN104834502A (zh) | 2015-05-11 | 2015-05-11 | 一种dsp中高效cordic指令实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104834502A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111651200A (zh) * | 2016-04-26 | 2020-09-11 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
-
2015
- 2015-05-11 CN CN201510236473.6A patent/CN104834502A/zh active Pending
Non-Patent Citations (4)
Title |
---|
CHIH-HSIU LIN, ET.AL: "Mixed-Scaling-Rotation CORDIC (MSR-CORDIC) Algorithm and Architecture for High-Performance Vector Rotational DSP Applications", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS I: REGULAR PAPERS》 * |
RAY ANDRAKA: "A survey of CORDIC algorthims FPGA based computers", 《FPGA "98 PROCEEDINGS OF THE 1998 ACM/SIGDA SIXTH INTERNATIONAL SYMPOSIUM ON FIELD PROGRAMMABLE GATE ARRAYS》 * |
SANG YOON PARK. ET.AL: "Fixed-Point Error Analysis of CORDIC Processor", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS—I: REGULAR PAPERS》 * |
孙明革: "CORDIC 算法在定点DSP 中的应用", 《吉林化工学院学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111651200A (zh) * | 2016-04-26 | 2020-09-11 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
CN111651200B (zh) * | 2016-04-26 | 2023-09-26 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109478139B (zh) | 用于共享存储器中的访问同步的装置、方法和系统 | |
US9851970B2 (en) | Method and apparatus for performing reduction operations on a set of vector elements | |
CN117349584A (zh) | 实行16位浮点矩阵点积指令的系统和方法 | |
CN110879724A (zh) | 用于深度学习和其它算法的fp16-s7e8混合精度 | |
CN117407058A (zh) | 用于执行用于复数的融合乘-加指令的系统和方法 | |
US10929127B2 (en) | Systems, methods, and apparatuses utilizing an elastic floating-point number | |
US20140089634A1 (en) | Apparatus and method for detecting identical elements within a vector register | |
US10761849B2 (en) | Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction | |
US10909259B2 (en) | Instruction execution that broadcasts and masks data values at different levels of granularity | |
US20140052968A1 (en) | Super multiply add (super madd) instruction | |
US10860315B2 (en) | Systems, apparatuses, and methods for arithmetic recurrence | |
CN116009814A (zh) | 用于经融合的乘加的系统、装置和方法 | |
CN108804137A (zh) | 用于双目的地类型转换、累加和原子存储器操作的指令 | |
EP3398057A1 (en) | Systems, apparatuses, and methods for strided loads | |
TW201717052A (zh) | 用以提供向量包裝之直方圖功能的方法,裝置,指令及邏輯 | |
US10437562B2 (en) | Apparatus and method for processing sparse data | |
CN110909882A (zh) | 用于执行水平铺块操作的系统和方法 | |
CN108351782A (zh) | 用于跨步访问的系统、装置和方法 | |
CN104834502A (zh) | 一种dsp中高效cordic指令实现方法 | |
CN109643235B (zh) | 用于多源混合操作的装置、方法和系统 | |
US20170192789A1 (en) | Systems, Methods, and Apparatuses for Improving Vector Throughput | |
KR101539173B1 (ko) | 단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들 | |
US10241794B2 (en) | Apparatus and methods to support counted loop exits in a multi-strand loop processor | |
CN109328334B (zh) | 用于累积式求和的系统、装置和方法 | |
CN109328333B (zh) | 用于累积式乘积的系统、装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150812 |
|
WD01 | Invention patent application deemed withdrawn after publication |