实验一平方根求解算法的实现
3011204173 通信二班刘西瑶
:
(1)实现程序:
module sqrt(
clk,
start,
over,
data,
result,
remain);
input clk; //时钟
input start; //开始信号
input wire [9:0] data; //输入数据
output reg over; //计算完成指示信号
output reg [9:0] result; //开方结果
output reg [9:0] remain; //余数
reg [2:0] STATE;
reg [9:0] M;
reg [3:0] N;
reg [9:0] CMP;
reg [9:0] X,R;
initial
begin
STATE=0;
over=0;
end
always@(posedge clk)
begin
case(STATE)
0:begin
over<=0;
if(start)
begin
STATE<=1;
X<=0;//00…00
R<=data;
M<=data>>8;//原数据右移8位后给M,也就是M存着data的最高位和次高位
N<=8;
end
end
1:begin
if(M>=1) //如果最高位和次高位不是00也就是01 10 11三种
begin
X<=1;//00…01
R<=R-(10'd1<<N);//位宽80的十进制的1左移78位
//以上的话就是让原数据减去次高位为1的一个数
//01-01=00;10-01=01;11-01=10
end
STATE<=2;//这是2状态
end
2:begin
N<=N-2; //N=76
X<=X<<1;//X左移一位 X=00…10
CMP<=(((X<<2)+1)<<(N-2));//1001左移74位的值=001001..0000
STATE<=3;//这是状态3
end
3:begin
if(R>=CMP)
begin
X<=X+1;
R<=R-CMP;
end
STATE<=4;//这是状态4
end
4:begin
if(N==0)//N为零时
begin
result<=X; //X的值就是结果
remain<=R; //R的值是余数
over<=1; //计算结束over置为1
STATE<=0; //回到0状态
end
else
STATE<=2; //不为零也就是还没算完时,回到状态2
end
default:begin
STATE<=0; //前面出错回到0状态
en
实验一平方根求解算法的实现 来自淘豆网www.taodocs.com转载请标明出处.