利用矢量旋轉求解平方根的算法及其FPGA實(shí)現*
引言
本文引用地址:http://dyxdggzs.com/article/96987.htm隨著(zhù)電子技術(shù)的不斷發(fā)展,EDA技術(shù)在數字信號處理領(lǐng)域得到了越來(lái)越多的應用。在FPGA中,應用VHDL語(yǔ)言可以進(jìn)行加法、減法、乘法等運算,但卻不能直接進(jìn)行開(kāi)平方運算。傳統的開(kāi)平方算法主要可以分為三大類(lèi):牛頓迭代法[1~3],SRT-冗余算法[4~5],非冗余算法[6~7]。
當直接利用牛頓迭代法進(jìn)行開(kāi)平方運算時(shí),涉及到復雜的除法運算。為了避免除法運算,必須首先計算出平方根的倒數,再與被開(kāi)方數相乘得到平方根。利用牛頓迭代法求根的迭代次數只和初始值與被開(kāi)方數之間的誤差有關(guān),而與被開(kāi)方數無(wú)關(guān)。另外,運算中還涉及到查表運算,要使迭代次數降低,必須相應地增加查找表的大小。而且在每次迭代運算中都涉及到乘法、加/減法運算,為了提高乘法運算速度,經(jīng)常通過(guò)采用高速并行乘法器和進(jìn)位保留加法器來(lái)輔助運算,需要較高資源。
經(jīng)典SRT-冗余算法也是基于迭代實(shí)現的,在每次迭代中都涉及到加法、乘法、條件判斷轉移、數值轉換等運算,為了減少電路的復雜度,所有的迭代運算都共用硬件資源,因此,該算法的效率較低。
非冗余算法可分為恢復余數的算法和不恢復余數的算法。與SRT算法相似,這兩種算法都需要復雜的迭代運算?;謴陀鄶档乃惴ㄓ捎诖嬖诜答佈a償機制,存在很大延時(shí),效率低;不恢復余數的算法[9]還要采用更多加法運算。
本文提出了一種基于矢量旋轉求三角函數進(jìn)而求得任意數平方根的算法,并用VHDL語(yǔ)言在A(yíng)ltera EP2S60開(kāi)發(fā)板上加以實(shí)現。該算法相比其他傳統開(kāi)平方算法具有處理速度更快、計算誤差更小、占用資源更少的顯著(zhù)優(yōu)勢。
基于矢量旋轉(VR)算法實(shí)現開(kāi)平方的算法
矢量旋轉算法簡(jiǎn)介
如圖1所示,初始向量M0(x0,y0)與x軸重合,經(jīng)逆時(shí)針旋轉Dq角度之后得到向量M1(x1,y1),依此類(lèi)推,逆時(shí)針旋轉i次之后得到向量Mi(xi,yi)。
評論