<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > FPGA基于CORDIC算法的求平方實現(xiàn)

          FPGA基于CORDIC算法的求平方實現(xiàn)

          作者: 時間:2017-10-11 來源:網絡 收藏

          1. 功能及原理

          是在沒有專用乘法器(最小化門數(shù)量)情況下,一組完成特定功能的算法,包括平方、超越、Log、sin/cos/artan。原理為連續(xù)的旋轉一個較小的角度,以一定精度逼近想要的角度。具體原理如下圖所示:

          本文引用地址:http://www.ex-cimer.com/article/201710/365590.htm

          2. Xilinx實現(xiàn) IP核及性能測試

          例1:無符號整數(shù)的平方操作:

          X_in[18:0],待平方的無符號整數(shù),在nd(new data)為輸入有效信號,輸出x_out[9:0]及對應的使能信號rdy,其對應的波形圖見下圖。

          (1)流水延遲

          最下方為輸入數(shù)據(jù),最上方為輸出求平方結果。從上圖可以看到,從nd到rdy,間隔了5個時鐘周期。

          (2)時鐘頻率

          在FX130-1芯片上綜合時鐘頻率結果為2.8ns,。

          例2:無符號整數(shù)的平方根操作:

          在定制平方根IP核時,選取Unsigned FracTIon,將X_IN與X_OUT設置為相同bit位,19bit。以某項目為例,待平方數(shù)據(jù)需要19bit來表示。在項目中,因為待開放的數(shù)據(jù)表示圖像坐標,因此為整數(shù),數(shù)據(jù)格式為UFIX19_0,即用19bit表示數(shù)據(jù),且小數(shù)位為零位。而CORDIX的輸入要求為UFIX19_18,即19bit數(shù)據(jù),其中18bit表示小數(shù)位,1bit整數(shù)。

          在數(shù)據(jù)格式與CORDIC核的輸入不一致情況下,需要對輸出結果的bit位進行正確解釋。

          輸入x_in=180: 000 0000 0000 1011 0100

          輸出x_dout=6869:000 0001 1010 1101 0101

          解釋:因為CORDIC期待的輸入x_in為18bit小數(shù),因此CORDIC的輸出x_dout應為9bit小數(shù),即13+0.25+0.125+0.03125+0.0078125+0.001953125 = 13.416??梢钥闯鲎钚〉木瓤梢员3值叫?shù)點第3位。在具體實現(xiàn)時,可以根據(jù)精度要求進行調整。

          注:事實上,對于x_in代表的19個bit,18bit小數(shù)位,1bit小數(shù)位這樣的數(shù)據(jù)格式下,x_dout不需要考慮移位便可得到正確解釋;而其他格式下,則需要對x_dout進行相應的移位解釋,比如上例,就是對x_dout進行了9bit的右移才得到了正確的估值。



          關鍵詞: FPGA CORDIC

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();