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输出。