如何實(shí)現(xiàn)FPGA基于CORDIC算法的求平方?
1. CORDIC功能及原理
CORDIC是在沒有專用乘法器(最小化門數(shù)量)情況下,一組完成特定功能的算法,包括平方、超越、Log、sin/cos/artan。原理為連續(xù)的旋轉(zhuǎn)一個較小的角度,以一定精度逼近想要的角度。具體原理如下圖所示:
2. Xilinx實(shí)現(xiàn)CORDIC IP核及性能測試
例1:無符號整數(shù)的平方操作:
X_in[18:0],待平方的無符號整數(shù),在nd(new data)為輸入有效信號,輸出x_out[9:0]及對應(yīng)的使能信號rdy,其對應(yīng)的波形圖見下圖。
(1)流水延遲
最下方為輸入數(shù)據(jù),最上方為輸出求平方結(jié)果。從上圖可以看到,從nd到rdy,間隔了5個時鐘周期。
(2)時鐘頻率
在FX130-1芯片上綜合時鐘頻率結(jié)果為2.8ns,。
例2:無符號整數(shù)的平方根操作:
在定制平方根IP核時,選取Unsigned FracTIon,將X_IN與X_OUT設(shè)置為相同bit位,19bit。以某項目為例,待平方數(shù)據(jù)需要19bit來表示。在項目中,因?yàn)榇_放的數(shù)據(jù)表示圖像坐標(biāo),因此為整數(shù),數(shù)據(jù)格式為UFIX19_0,即用19bit表示數(shù)據(jù),且小數(shù)位為零位。而CORDIX的輸入要求為UFIX19_18,即19bit數(shù)據(jù),其中18bit表示小數(shù)位,1bit整數(shù)。
在數(shù)據(jù)格式與CORDIC核的輸入不一致情況下,需要對輸出結(jié)果的bit位進(jìn)行正確解釋。
輸入x_in=180: 000 0000 0000 1011 0100
輸出x_dout=6869:000 0001 1010 1101 0101
解釋:因?yàn)镃ORDIC期待的輸入x_in為18bit小數(shù),因此CORDIC的輸出x_dout應(yīng)為9bit小數(shù),即13+0.25+0.125+0.03125+0.0078125+0.001953125 = 13.416。可以看出最小的精度可以保持到小數(shù)點(diǎn)第3位。在具體實(shí)現(xiàn)時,可以根據(jù)精度要求進(jìn)行調(diào)整。
注:事實(shí)上,對于x_in代表的19個bit,18bit小數(shù)位,1bit小數(shù)位這樣的數(shù)據(jù)格式下,x_dout不需要考慮移位便可得到正確解釋;而其他格式下,則需要對x_dout進(jìn)行相應(yīng)的移位解釋,比如上例,就是對x_dout進(jìn)行了9bit的右移才得到了正確的估值。