⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqrt.v

📁 verilog 硬件平方根算法 采用与笔算平方根一样的算法
💻 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 + -