CN102542336A - 一种基于fpga 的三角函数实现方法 - Google Patents
一种基于fpga 的三角函数实现方法 Download PDFInfo
- Publication number
- CN102542336A CN102542336A CN2011104364821A CN201110436482A CN102542336A CN 102542336 A CN102542336 A CN 102542336A CN 2011104364821 A CN2011104364821 A CN 2011104364821A CN 201110436482 A CN201110436482 A CN 201110436482A CN 102542336 A CN102542336 A CN 102542336A
- Authority
- CN
- China
- Prior art keywords
- cordic
- module
- fpga
- post
- coredic
- 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
Images
Landscapes
- Complex Calculations (AREA)
Abstract
Description
技术领域
本发明涉及一种三角函数实现方法,具体涉及一种基于FPGA 的三角函数实现方法。
背景技术
传统上计算三角函数和其它一些硬件不易实现的函数,一般使用查表法、多项式展开或近似的方法。这些方法不能兼顾速度、精度、简单性等方面的要求。Volder于1959年在美国航空控制系统的设计中提出CORDIC(Coordinate Rotational Digital Computer,坐标旋转计算机)算法。其基本思想是用一系列与运算基数相关的角度的不断偏摆,从而逼近所需旋转的角度。从广义上讲它是一个数值计算逼近的方法。这些固定的角度与计算基数有关,运算只有移位和加减。可通过该算法不同的实现形式(如圆周模式、双曲线模式、线性模式等)来计算包括乘、除、平方根、正旋、余弦、反正切、向量旋转(即复数乘法)以及指数运算等。1971年,J.S Walther提出了统一的CORDIC算法形式,把圆周旋转、双曲旋转和直线旋转统一到同一个CORDIC迭代方程中,为统一硬件实现多功能运算奠定了基础。
CORDIC迭代方程从算法本身入手,将复杂的算法分解成一些在硬件中容易实现的基本算法,如加法、移位等,从而使得这些算法在硬件上可以得到较好的实现。由于该算法是一种规则化的算法,它满足了硬件对算法的模块化、规则化的要求,因此CORDIC算法可以充分发挥硬件的优势,利用硬件的资源,从而实现硬件与算法相结合的一种优化方案。因此,现阶段CORDIC算法的研究非常活跃,无非都在追求高速、准确以及灵活的极致。
发明内容
本发明的目的在于提供一种基于FPGA 的三角函数实现方法,该方法基于CORDIC迭代算法,再进过简单处理就可以得到正切和反正切结果,而且计算出来的结果在输出前转换成了IEEE-754 标准单精度浮点格式,使用简单方便灵活;采用16级迭代运算,精度误差小于10-3;尤其在用FPGA做算法处理用到三角函数时更能体现其高速的特点。
本发明的技术方案是:
一种基于FPGA 的三角函数实现方法,其特殊之处在于,该方法包括:
利用FPGA控制设计的三个子模块计算得出三角函数结果;所述三个子模块分别是CORDIC_PRE前预处理模块、CORDIC模块以及CORDIC_POST后处理模块;
其中CORDIC_PRE前预处理模块由于迭代本身的限制,最大旋转角度为0~99.9°,故前置处理单元就是将输入角度扩展为[ 2n](n=0,1,2…)任意角度并放大处理;在迭代开始前根据三角函数的对称性把输入角度转化到第一象限;
CORDIC模块采用流水线结构设计,即前一个步骤的输出是下一个步骤的输入;
上述CORDIC_PRE前预处理模块在迭代开始前根据三角函数的对称性把输入角度所在象限统一转化到第I象限并放大处理,在旋转模式时,由于受迭代本身的限制,最大旋转角度为:
故为了计算方便实现[-180°,+180°)(I,II,III,IV象限)全范围覆盖,就把输入角度统一到第一象限(0°~90°),而且还要把输入角度转换为向量值X,Y;所述 X,Y就是流水线的初次迭代的输入角度值,输入Z值为固定角度,根据迭代次数决定每次迭代的值,但起始值都是45°。
上述CORDIC模块中,假设CORDIC模块的第i次迭代过程,其中arctan(i)由公式算出,每迭代一次其值除二;对所有内部信号都用16bits表示,输入及输出信号都用32bits表示,16级流水线设计。
上述CORDIC_POST后处理模块将内部CORDIC 模块计算出来的结果在输出前转换成IEEE-754 单精度标准格式,即形式;单精度浮点数由符号位,指数偏置位e =E+bias(E是未偏置的指数)和小数f =.b22b21b20...b0 三个部分组成;
所述CORDIC_POST后处理模块包括导零检测电路,其功能是用来统计数据从最高位开始连续“0”的个数,再根据它把计算出来的数值转换成IEEE-754标准格式;在转换过程中需要对尾数进行左移,才能表示为(?1)s2e?127(1.f ),此位移量再与前置处理器单元传来的参考指数值相减,得到输出指数值;符号位直接由前置处理过程得到;最后将符号位、指数数值、小数按位连接得到IEEE-754 格式的数据,再根据输入角度的正负以及三角函数对称的性质进行最后处理然后输出结果。
本发明提出了一种基于FPGA的实现sin(),cos()三角函数算法,在使用时只需要输入角度,经过20个周期左右就可以同时得到sin(),cos()输出结果(图2-1),其核心算法基于CORDIC迭代算法,再进过简单处理就可以得到正切和反正切结果,而且计算出来的结果在输出前转换成了IEEE-754 标准单精度浮点格式,使用简单方便灵活。该算法的运算速度由时钟频率决定,运算精度由迭代次数决定,迭代次数越多输出精度就越高,本发明采用16级迭代运算,精度误差小于10-3。该算法与传统的迭代,查找表等算法相比具有运算速度高,使用方便灵活等特点,尤其在用FPGA做算法处理用到三角函数时更能体现其高速的特点。
附图说明
图1为本发明算法框图;
图2为CORDIC模块总体方案示意图;
图3为CORDIC_POST后处理模块硬件结构图;
图4为CORDIC模块第i次迭代硬件结构框图;
图5为浮点单精度数表示格式。
具体实施方式
参见图1,CORDIC算法的FPGA实现。
设计分为3个子模块,分别是:CORDIC_PRE前预处理模块、CORDIC模块和CORDIC_POST后处理模块,这三个子模块以及顶层CORDIC_TOP模块之间的关系参见图2。
CORDIC模块
在CORDIC模块中为了提高运算速度我们采用流水线结构设计,即前一个步骤的输出是下一个步骤的输入,流水线结构充分利用了硬件内部并行性,增加数据处理能力,提高运算速度。利用FPGA实现流水线技术的CORDIC迭代运算如图4所示,该图所描述的是CORDIC的第i次迭代过程。
其中arctan(i)由公式算出,每迭代一次其值除二。增加迭代次数可以提高运算精度,但这无疑增加了运算的复杂度,影响到信号处理数据流的速度,因此,必须在运算精度和信号处理速度之间进行权衡。本专利设计对所有内部信号都用16bits表示,输入及输出信号都用32bits表示,16级流水线设计。
CORDIC_PRE前预处理模块
由于输入角度是[2n](n=0,1,2…)任意角度的任意角度,所以前置处理单元的作用就是在迭代开始前根据三角函数的对称性把输入角度所在象限统一转化到第I象限并放大处理,这样做的原因就是在旋转模式时,由于受迭代本身的限制,最大旋转角度为:
所以为了计算方便实现[-180°,+180°)(I,II,III,IV象限)全范围覆盖,就把输入角度统一到第一象限(0°~90°),而且还要把输入角度转换为向量值X,Y。 X,Y就是流水线的初次迭代的输入角度值,输入Z值为固定角度,根据迭代次数决定每次迭代的值,但起始值都是45°。最后在后置处理单元中再将流水线计算出来的结果根据三角函数的对称性映射的所用象限中去。
CORDIC_POST后处理模块
后置处理将内部CORDIC 计算出来的结果在输出前转换成IEEE-754 单精度标准格式,即形式。单精度浮点数由符号位,指数偏置位e =E+bias(E是未偏置的指数)和小数f =.b22b21b20...b0 三个部分组成,参见图5。
后置处理单元FPGA实现结构参见图3。
导零检测电路,其功能是用来统计数据从最高位开始连续“0”的个数,再根据它把计算出来的数值转换成IEEE-754标准格式。在转换过程中需要对尾数进行左移,才能表示为(?1)s2e?127(1.f ),此位移量再与前置处理器单元传来的参考指数值相减,得到输出指数值。符号位直接由前置处理过程得到。最后将符号位、指数数值、小数按位连接得到IEEE-754 格式的数据,再根据输入角度的正负以及三角函数对称的性质进行最后处理然后输出结果。
Claims (4)
1.一种基于FPGA 的三角函数实现方法,其特征在于,该方法包括:
利用FPGA控制设计的三个子模块计算得出三角函数结果;所述三个子模块分别是CORDIC_PRE前预处理模块、CORDIC模块以及CORDIC_POST后处理模块;
其中CORDIC_PRE前预处理模块由于迭代本身的限制,最大旋转角度为0~99.9°,故前置处理单元就是将输入角度扩展为[ 2n](n=0,1,2…)任意角度并放大处理;在迭代开始前根据三角函数的对称性把输入角度转化到第一象限;
CORDIC模块采用流水线结构设计,即前一个步骤的输出是下一个步骤的输入;
2.根据权利要求1所述基于FPGA 的三角函数实现方法,其特征在于:所述CORDIC_PRE前预处理模块在迭代开始前根据三角函数的对称性把输入角度所在象限统一转化到第I象限并放大处理,在旋转模式时,由于受迭代本身的限制,最大旋转角度为:
故为了计算方便实现[-180°,+180°)(I,II,III,IV象限)全范围覆盖,就把输入角度统一到第一象限(0°~90°),而且还要把输入角度转换为向量值X,Y;所述 X,Y就是流水线的初次迭代的输入角度值,输入Z值为固定角度,根据迭代次数决定每次迭代的值,但起始值都是45°。
4.根据权利要求1所述基于FPGA 的三角函数实现方法,其特征在于:所述CORDIC_POST后处理模块将内部CORDIC 模块计算出来的结果在输出前转换成IEEE-754 单精度标准格式,即形式;单精度浮点数由符号位,指数偏置位e =E+bias(E是未偏置的指数)和小数f =.b22b21b20...b0 三个部分组成;
所述CORDIC_POST后处理模块包括导零检测电路,其功能是用来统计数据从最高位开始连续“0”的个数,再根据它把计算出来的数值转换成IEEE-754标准格式;在转换过程中需要对尾数进行左移,才能表示为(?1)s2e?127(1.f ),此位移量再与前置处理器单元传来的参考指数值相减,得到输出指数值;符号位直接由前置处理过程得到;最后将符号位、指数数值、小数按位连接得到IEEE-754 格式的数据,再根据输入角度的正负以及三角函数对称的性质进行最后处理然后输出结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104364821A CN102542336A (zh) | 2011-12-23 | 2011-12-23 | 一种基于fpga 的三角函数实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104364821A CN102542336A (zh) | 2011-12-23 | 2011-12-23 | 一种基于fpga 的三角函数实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102542336A true CN102542336A (zh) | 2012-07-04 |
Family
ID=46349182
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104364821A Pending CN102542336A (zh) | 2011-12-23 | 2011-12-23 | 一种基于fpga 的三角函数实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102542336A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150137A (zh) * | 2013-03-01 | 2013-06-12 | 北京理工大学 | 一种覆盖全圆周角度的单精度浮点三角函数的实现方法 |
CN104765713A (zh) * | 2014-12-20 | 2015-07-08 | 中国科学院西安光学精密机械研究所 | 基于分段查表三角函数实现fpga数字信号处理的方法 |
CN107608656A (zh) * | 2017-09-27 | 2018-01-19 | 郑州云海信息技术有限公司 | 一种四象限三角函数求解器的设计方法 |
CN109062540A (zh) * | 2018-06-06 | 2018-12-21 | 北京理工大学 | 一种基于cordic算法的可重构浮点运算装置 |
CN110147218A (zh) * | 2019-04-09 | 2019-08-20 | 珠海市杰理科技股份有限公司 | 基于Cordic算法的运算电路与方法 |
CN110998514A (zh) * | 2017-08-08 | 2020-04-10 | 德克萨斯仪器股份有限公司 | 可中断的三角运算 |
CN111666065A (zh) * | 2020-06-03 | 2020-09-15 | 合肥工业大学 | 基于cordic的三角函数流水线迭代求解方法和装置 |
CN111949934A (zh) * | 2020-08-20 | 2020-11-17 | 桂林电子科技大学 | 一种基于fpga的cordic优化方法 |
CN113743042A (zh) * | 2021-07-26 | 2021-12-03 | 中山大学 | 一种基于高层次综合工具的坐标旋转数字计算方法及系统 |
CN114707110A (zh) * | 2022-06-07 | 2022-07-05 | 中科亿海微电子科技(苏州)有限公司 | 一种三角函数和双曲函数扩展指令计算装置及处理器核 |
-
2011
- 2011-12-23 CN CN2011104364821A patent/CN102542336A/zh active Pending
Non-Patent Citations (6)
Title |
---|
李全,陈石平,付佃华: "用FPGA实现CORDIC算法的32位浮点三角超越函数之正余弦函数", 《电子产品世界》 * |
李全,陈石平,李晓欢,黄守麟: "正交三角函数的CORDIC实现", 《微计算机信息》 * |
李全,陈石平,李晓欢,黄守麟: "浮点正余弦函数的FPGA及自定义指令实现", 《微计算机信息》 * |
杨宏,李国辉,刘立新: "基于FPGA的CORDIC算法的实现", 《西安邮电学院学报》 * |
陈石平,李全,付佃华,段吉海: "32位浮点正余弦函数的FPGA实现", 《微计算机信息》 * |
陈石平,李全,莫丽兰,段吉海: "基于CORDIC的反双曲正切函数的FPGA实现", 《计算机工程与科学》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150137A (zh) * | 2013-03-01 | 2013-06-12 | 北京理工大学 | 一种覆盖全圆周角度的单精度浮点三角函数的实现方法 |
CN104765713A (zh) * | 2014-12-20 | 2015-07-08 | 中国科学院西安光学精密机械研究所 | 基于分段查表三角函数实现fpga数字信号处理的方法 |
CN110998514A (zh) * | 2017-08-08 | 2020-04-10 | 德克萨斯仪器股份有限公司 | 可中断的三角运算 |
CN110998514B (zh) * | 2017-08-08 | 2024-01-09 | 德克萨斯仪器股份有限公司 | 可中断的三角运算 |
CN107608656A (zh) * | 2017-09-27 | 2018-01-19 | 郑州云海信息技术有限公司 | 一种四象限三角函数求解器的设计方法 |
CN109062540B (zh) * | 2018-06-06 | 2022-11-25 | 北京理工大学 | 一种基于cordic算法的可重构浮点运算装置 |
CN109062540A (zh) * | 2018-06-06 | 2018-12-21 | 北京理工大学 | 一种基于cordic算法的可重构浮点运算装置 |
CN110147218A (zh) * | 2019-04-09 | 2019-08-20 | 珠海市杰理科技股份有限公司 | 基于Cordic算法的运算电路与方法 |
CN110147218B (zh) * | 2019-04-09 | 2021-05-11 | 珠海市杰理科技股份有限公司 | 基于Cordic算法的运算电路与方法 |
CN111666065A (zh) * | 2020-06-03 | 2020-09-15 | 合肥工业大学 | 基于cordic的三角函数流水线迭代求解方法和装置 |
CN111666065B (zh) * | 2020-06-03 | 2022-10-18 | 合肥工业大学 | 基于cordic的三角函数流水线迭代求解方法和装置 |
CN111949934A (zh) * | 2020-08-20 | 2020-11-17 | 桂林电子科技大学 | 一种基于fpga的cordic优化方法 |
CN113743042A (zh) * | 2021-07-26 | 2021-12-03 | 中山大学 | 一种基于高层次综合工具的坐标旋转数字计算方法及系统 |
CN113743042B (zh) * | 2021-07-26 | 2023-11-10 | 中山大学 | 一种基于高层次综合工具的坐标旋转数字计算方法及系统 |
CN114707110A (zh) * | 2022-06-07 | 2022-07-05 | 中科亿海微电子科技(苏州)有限公司 | 一种三角函数和双曲函数扩展指令计算装置及处理器核 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102542336A (zh) | 一种基于fpga 的三角函数实现方法 | |
CN109062540B (zh) | 一种基于cordic算法的可重构浮点运算装置 | |
CN106197484B (zh) | 一种正余弦编码器高精度信号处理系统 | |
CN109739470B (zh) | 一种基于2型双曲cordic任意指数函数的计算系统 | |
CN109146067B (zh) | 一种基于FPGA的Policy卷积神经网络加速器 | |
Hough | Applications of the proposed IEEE 754 standard for floating-point arithetic | |
CN103677738A (zh) | 基于混合模式cordic算法的低延时基本超越函数实现方法及装置 | |
CN102629189A (zh) | 基于fpga的流水浮点乘累加方法 | |
CN112241291B (zh) | 用于指数函数实施的浮点单元 | |
CN103809930A (zh) | 一种双精度浮点数除法器的设计方法及除法器 | |
CN104133656A (zh) | 一种尾码采用移位和减法运算的浮点数除法器及运算方法 | |
CN108896075A (zh) | 一种基于fpga的旋转变压器角位移闭环解码系统与方法 | |
CN103150137A (zh) | 一种覆盖全圆周角度的单精度浮点三角函数的实现方法 | |
Li et al. | Study of CORDIC algorithm based on FPGA | |
CN104536720B (zh) | 基于fpga的待测角三角函数值的测算方法及系统 | |
CN104714773B (zh) | 用于旋转角计算的基于plb总线的嵌入式ip软核及旋转角计算方法 | |
CN104166535B (zh) | 定点处理器及其防溢方法 | |
CN102799412A (zh) | 基于并行流水线设计的cordic加速器 | |
CN107423026B (zh) | 一种正余弦函数计算的实现方法及装置 | |
CN107102841A (zh) | 一种坐标变换并行计算方法和装置 | |
CN102879017B (zh) | 双速轴角数字转换器粗精组合系统 | |
RU167428U1 (ru) | Преобразователь синусно-косинусного сигнала в код положения | |
CN102789446A (zh) | 基于cordic算法的dds信号杂散抑制方法及系统 | |
CN208834289U (zh) | 一种三角函数运算电路 | |
CN102109973A (zh) | 包含超越函数计算的处理器实现装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120704 |