FPGA两种实现除法的方法和一种实现平方根的方法

1、基于减法的除

N / D = Q + R

设N共M位。

step1:将R各位置零,令n = 0。

step2:将R左移一位,并将N[M-n]移入R的最低位。

step3:R - D。

step4:若R - D为正或零,令Q[M-n] = 1,R = R-D;

            若R - D为负,令Q[M-n] = 0,R = R。

step5:n++。

step6:重复step2~step5,直到填满Q。

理解:step2相当于将N右移M-n-1位,即除以2^(M-n-1),并将值与D比较,若大于D,表示N/2^(M-n-1)的值除以D商为1(tip1),则N'/D的商Q的Q[M-n]=1,而余数则为R-D,并将此余数应用于下一次移位。

tip1:n=0时因为只有一位,商不会大于1,n>0时因为上一步如果R>D,R会减去D,确保下一步商不会大于1。

2、基于乘法的除

N = D * (Q + R)

设N共M位。

step1:n=0。

step2:令Q[M-n]=1,M-n后的为设为0。

step3:D*Q。

step4:计算N-D*Q。若为非负,N>D*Q,则令Q[M-n]=1;

                                  若为负,N<D*Q,则令Q[M-n]=0。

step5:n++。

step6:重复step2~step5。

3、基于乘法的平方根

X^1/2 = Y.Z

其中Y为整数部分,Z为小数部分。将Y.Z存放于A中。

X为M位,Y为M/2位,具体需要几位小数部分取决于精度需求。

M/2个周期计算整数部分,小数部分取决于精度。

在FPGA中计算时将X后补零来使得补零后的长度为A的两倍。

step1:n=0。

step2:令A[MSB-n]=1,该位右边各位均为0。

step3:计算X - A * A。

step4:若X - A * A为非负,则A[MSB-n]=1;

            若X - A * A为负,则A[MSB-n]=0。

step5:n++。

step6:重复step2~step5。

理解:可以看到,基于乘法的除和基于乘法的平方根是同一个思路。从最高位开始对每一位进行尝试设为1,之后进行判断该位设为1是否正确,若不正确,则改为0。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值