若a和b均有.1xxxxxx的形式,这是二进制表示(a,b在0.5到1之间)。那么有(a*r0*r1*r2...)/(b*r0*r1*r2...) = a/b。x0 = a,y0 = b,r0 = 2 - y0。
通过推导可得:
x(i+1)= x(i)*r(i);
y(i+1)= y(i)*r(i);
r(i+1) = 2 - y(i + 1);
代码实现:
//
// Company: SMIE
// Engineer: Chen Yu
// Create Date: 12:58:27 10/06/2014
// Design Name: divider
// Module Name: goldschmidt
// Project Name: divide
// Revision: 1.0
// Address: http://blog.csdn.net/c602273091
// Revision 0.01 - File Created
//
module goldschmidt(a,b,q,times,clk,stt,rst,busy,ready);
input [31:0] a,b; //input a/b