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:令Q[M-n]=1,M-n后的为设为0。

step2:D*Q。

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

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

step4:n++。

step5:重复step1~step4。

猜你喜欢

转载自blog.csdn.net/ViV587/article/details/84668464