verilog实现开根号运算
FPGA自学笔记分享 2023-03-06
verilog的开根号是二进制的开根号,在讲二进制开根号之前我们先说一下十进制的开根号方法。十进制开平方的常规计算方法:1.将被开方数的整数部分从个位起向左每隔两位划为一段,用撇号分开,分成几段,表示所求平方根是几位数;2.根据左边第一段里的数,求得平方根的最高位上的数;3.从第一段的数减去最高位上数的平方,在它们的差的右边写上第二段数组成第一个余数;4.把求得的最高位数乘以20去试除第一个余数,所得的最大整数作为试商;5.用所求的平方根的最高位数的20倍加上这个试商再乘以试商.如果所得的积小于或等于余数,试商就是平方根的第二位数;如果所得的积大于余数,就把试商减小再试;6.用同样的方法,继续求平方根的其他各位上的数.

例如下边的计算:

1、将65536每两位分开,第一步找最高位的商2,余数2;2、余数2和55组成新数255,计算255=b*(2*20+b),得到b=5;3、余数为30,将30和36组合得到数据3066,计算3066 = c*(25*20+c),得到c=6.

计算过程用到的计算公式就是:

平方运算: (a+b)² = a²+2ab+b²开平方运算: (a+b)² - a² = b(2a+b)

实现10进制的开根号相对复杂,对于二进制的开根号,由于数据要么是0,要么是1,所以比较好处理,可以大大简化处理流程。

二进制开平方,由于数据全部是0或者1组成,所以二进制数据开方可以简化为:1、将被开方数向左每隔两位划为一段,分成几段,表示所求平方根是几位数;2、最高位开方: 最高两bit大于1,高位为1;3、从第一段的数减去最高位上数的平方,在它们的差的右边写上第二段数组成第一个余数;4、余数大于2a+1,第二位是1,否则是0;

如上:

1q31

2、余数为0011,小于101q20

3、余数为1101,大于(2a+1) = 1001q11


原理就是这样,大家可以考虑一下代码怎么实现、


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • FPGA
  • 可编程
  • PLC
  • verilog
下载排行榜
更多
评测报告
更多
广告