📄 sqrt.v
字号:
/*
Square Root Algorithm
V1.0
Algorithm:
{2 | N && N >= 0}
i, r, b = 0;
while (i != 2*N)
{
if (4r + 2a[N - 2i - 1] + a[N - 2i - 2] >= 4b + 1)
{
r,b = 4r + 2a[N - 2i - 1] + a[N - 2i - 2] - 4b - 1, 2b + 1
}
else
{
r,b = 4r + 2a[N - 2i - 1] + a[N - 2i - 2], 2b
}
i = i + 1
}
*/
module sqrt
#(parameter N = 8)(
input [N-1:0]radical,
output [N/2-1:0]resualt,
output [N/2:0]remainder
);
parameter k = (N + N%2)/2; //to get the nearest even number of
integer i;
reg [N-1:0] r[0:k];
reg [N:0] b[0:k];
always@(radical)
begin
r[0]<=0;
b[0]<=0;
for(i=0;i<k;i = i+1)
begin
if (4*r[i] + 2*radical[N - 2*i - 1] + radical[N - 2*i - 2] >= 4*b[i] + 1)
begin
r[i+1] <= 4*r[i] + 2*radical[N - 2*i - 1] + radical[N - 2*i - 2] - 4*b[i] - 1;
b[i+1] <= 2*b[i] + 1;
end
else
begin
r[i+1] <= 4*r[i] + 2*radical[N - 2*i - 1] + radical[N - 2*i - 2];
b[i+1] <= 2*b[i];
end
end
end
assign resualt = b[k];
assign remainder = r[k];
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -