tag 标签: CORDIC算法

相关博文
  • 热度 1
    2014-9-9 11:13
    1573 次阅读|
    0 个评论
    越来越多的关键应用都对精确性和计算延迟时间有严格的要求。FPGA的灵活性和性能使得它们广泛应用在工业、科学、军事以及其他的许多应用场合中,来计算复杂的数学问题或者传递函数,有许多算法,比如CORDIC算法,可以用来做为超越函数的计算处理模块。 CORDIC算法可以用来实现正弦、余弦、乘法、除法、平方根等超越函数,因此,把CORDIC算法和基本的数学模块结合起来来计算传递函数,可以得到较为精确的结果。但是,对于复杂的传递函数来说,获得精确结果的代价是花费更多的设计和验证的时间。 对于复杂的传递函数,除了在FPGA中实现精确的函数功能外,还有许多更为有效的处理方法。一个例子就是用FPGA来监控铂电阻温度计(PRT),并把铂电阻温度计的电阻值转换为温度。这个转换一般会使用Callendar-Van Dusen方程,这个方程可以用来确定0℃~660℃之间的温度值,方程如下: 其中R 0 是0℃时的电阻值,a和b是和PRT相关的系数,t表示温度。事实上,我们是想通过电阻值来转换得到温度值,因此,我们需要重新整理方程,把温度值作为方程的结果。大部分使用PRT的系统会设计一个电路来测量PRT的电阻值,而在FPGA中使用一个重新整理过的,比之前复杂得多的方程来计算温度值,方程如下: 在FPGA中实现这样一个方程,即使是一个经验丰富的FPGA工程师也会感到气馁。通过测试,把电阻值和温度值的对应关系绘图如下: 如果仔细研究,会发现这是一个非线性的曲线。 为了减少设计以及验证的工作,保证项目进度,许多工程师会寻找其它不同的方式来实现这个函数。其中一个方式是利用查找表来保存图表中曲线上的一些点,在这些点之间可以采用线性插值的方式,这个方法可能可以满足需求,但要依赖于精确度的要求以及查找表中能存储的点的个数。但这种方法会引入一个线性插值函数,这个函数通常会包括一个无二次幂限制(non-power-of-two)的除法,这会带来计算的复杂度。 现在的FPGA器件,比如Xilinx Spartan-6、7-系列Atrix、Kintex以及Virtex等FPGA器件中都会包含更多地传统意义上的查找表和触发器。同时也包含内置的DSP slices,Block RAM和一些分散的RAM单元,还有一些象PCIe、以太网端点、高速串行连接等先进的硬IP核,用这些器件可以轻松地实现传递函数。 多项式近似法可以充分利用FPGA器件中丰富的DSP和RAM资源, 使用这项技术,首先要把数学函数用图表来表达,可以用MATLAB或者Excel等数学工具来遍历输入值的范围,然后就可以得到一个多项式趋势线,这样,就可以在FPGA中实现这个方程,而不需要使用电路逻辑直接实现复杂的数序函数,这种趋势线近似方程也可以满足精度的要求。 大部分用来生成多项式趋势线的数学工具都支持选择多项式的介数或者项数,介数越大,精确度就越高,但在FPGA中就需要实现更多的项数。用这种方法通过Microsoft Excel来分析PRT曲线,可以获得下面的4介多项式: 一个多项式方程可能不能满足传递函数全部输入范围的精度要求,那么只需要产生更多的多项式方程,通过产生许多多项式常数来覆盖输入范围,一旦输入的值超出了特定的边界,只需要加载一组新的常数值就可以了。上述方法依然是有效的。 假设,我们需要把操作范围扩展到300 ℃,原来的方法就不能满足设计要求了,采用刚刚提到的分段的方法,可以通过绘制269℃ 到300℃之间的趋势线来解决这个问题,这样可以得到另一个多项式方程,该方程可以满足这个输出范围的精度要求。简言之,分段的实现方法在输入值没有超出268℃对应的预定值范围时,采用的是第一组多项式常数,而当输入值超出了268℃对应的预定值范围时,就采用第二组常数来保证精度要求。 尽管设计团队使用了内嵌微处理器的片上系统,比如内嵌ARM Cortex-A9 MPCore的Xilinx Zynq可编程SoC器件,但实现传递函数还是具有较大的挑战,首先,通过处理器执行软件来实现传递函数所花的时间要远远大于通过可编程逻辑实现传递函数的运行时间,这样就会使系统响应变慢,事实上,上面提到的传递函数的计算就是一个比较典型的例子,它的数据处理应该通过Zynq SoC器件的可编程逻辑去实现。
相关资源
  • 所需E币: 3
    时间: 2020-1-4 12:55
    大小: 207KB
    上传者: givh79_163.com
    在对传统CORDIC算法进行改进的基础上,讨论了一种基于改进型CORDIC算法的NCO实现方法,该设计占用资源少、运算速度快、易于扩展.仿真结果证明该设计具有较高的性价比.集成电路应用AppIicatjOnofIntegratedc.rcuns一种基于改进型CORDIC算法的数控振荡器朱冰莲,罗正岳,陈禧(重庆大学通信工程学院,重庆400030)摘要:在对传统CORDIC算法进行改进的基础上,讨论了一种基于改进型CORDIC算法的NCO实现方法,该设计占用资源少、运算速度快、易于扩展。仿真结果证明该设计具有较高的性价比。关键词:CORDIC算法数控振荡器FPGA(FG)两部分组成,如图1所示。其中相位累加器的设计较向量确切・旋转角度口到向量娩0弛:篓姜擞姿篙萼篓鸶茎装蒜筹拿兰皋箸蓉蓑薯::=实现函数发生器的方法为查表法(LUT),对于一个相位位数为n,输出信号幅度位数为肘的NCO,所需查找表的。弛2门‘co鲥+物。舢咿……
  • 所需E币: 3
    时间: 2019-5-26 18:20
    大小: 1.7MB
    上传者: royalark_912907664
    在指纹图像实时处理中,通常会用到三角函数的运算,然而业界大多采用软件的方式来实现这个计算过程,导致图像处理效率较低。针对该问题,本文在详细分析了用CORDIC算法实现Sine/Cosine函数和Arctan2函数共同点的基础上,提出了一种基于CORDIC算法计算正余弦、反正切函数的改进方法,采用资源共享的方式共享了两个函数核心的迭代运算部分,以16级流水线结构实现了计算正余弦和反正切两个函数功能。通过与Altera和Xilinx相同流水线结构的正余弦、反正切函数IP进行对比,本文所设计的三角函数加速核在资源开销方面有明显的优势,与C语言软件函数库在计算正余弦、反正切函数的绝对误差分别保持在10-4、10-5的数量级,其对应的运算速度分别为软件的92倍、64.5倍。
广告