基4-Booth编码乘法运算
本帖最后由 大笨象 于 2011-7-20 20:58 编辑`timescale 1ns / 1ps
module Booth4RadixMultiplier(a,b,c,sclr,clk,rfd
);
parameter N=8;
input a,b;
input sclr,clk;
output c;
output rfd;
reg y;
reg x,x_c,z;
reg current_state,next_state;
integer index_i;
reg finished;
parameter Init=2'b00,
Acc=2'b01,
Done=2'b11;
always@(posedge clk)//状态跳变时钟
if(!sclr)
begin
current_state<=Init;
end
else
begin
current_state<=next_state;
end
always@(current_state or index_i)//状态改变的组合电路
case(current_state)
Init:
next_state=Acc;
Acc:
if(index_i==(N>>1)-1)
next_state=Done;
else
next_state=Acc;
Done:
next_state=Init;
endcase
always@(posedge clk)//实现算法的计算程序
case(current_state)
Init:
begin
finished=0;
index_i=0;
x=a;
x_c=~a+1;
y={b,1'b0};
z=0;
end
Acc:
begin
case(y)
3'b000,3'b111:
{z,y}={z,z,z,y};
3'b001,3'b010:
begin
z=z+x;
{z,y}={z,z,z,y};
end
3'b011:
begin
z=z+(x<<1);
{z,y}={z,z,z,y};
end
3'b100:
begin
z=z+(x_c<<1);
{z,y}={z,z,z,y};
end
3'b101,3'b110:
begin
z=z+x_c;
{z,y}={z,z,z,y};
end
default:
{z,y}=0;
endcase
index_i=index_i+1;
end
Done:
finished=1;
endcase
assign rfd=finished;
assign c={z,y};
endmodule 是什么东西啊 jt202010 发表于 2011-7-21 09:39 static/image/common/back.gif
是什么东西啊
处理器对长乘法的快速计算。 但愿对大家有用,分享之~ 大神辛苦了。。。。 膜拜下,因为我真不知道是什么 非常感谢楼主!
页:
[1]