Xilinx的 CODRIC IP利用的coordic算法,可以求三角函數和開方運算。
進行開方運算時,需要注意輸入和輸出位數的問題:
1)輸入為整數的情況:(如2321)
INPUT : 24bit 整數
OUTPUT : 24bit開方后,整數值占輸入總位數的一半加1 等於 13bit,即[23:11] ; 小數值占 11bit,即 [10:0]。
如: input i_value = 97 ;
output o_sqrt_bvalue[10:0] 為小數部分, o_sqrt_bvalue[23:11] 為整數部分。
2)輸入為整數+小數的情況:(如23.75 -----> 10111.11 )
input : 24bit = 整數位數 + 小數位數
output : 開方后,整數值占輸入總位數的一半 加1 即 整數位數/2+ 1, 占輸出的高位。小數占剩下的位置。
如: 輸入位為 23.75 -----> 10111.11 小數為占兩位, 整數位為 (24-2)/2 + 1 = 12 bit
即 輸出: o_sqrt_bvalue[11:0] 為小數部分, o_sqrt_bvalue[23:12] 為整數部分。
sqrt_int = o_sqrt_bvalue[23:12] = b 0100 ;
sqrt_decmail = o_sqrt_bvalue[11:0] = b 110111111001
通過和計算器求得結果比較,誤差在0.0001之內,還是比較准確的。不過crodic算法會延遲10個cycle輸出。