You are on page 1of 5

Booth

module booth3(prod,mc,mp);
input [7:0]mc,mp;
output [15:0]prod;
wire [8:0]c;
wire [15:0]b1,b2,b3,b4;
assign {c[8:0]}=mp*2;
call d1(b1[15:0],mc[7:0],c[2:0]);
call d2(b2[15:0],mc[7:0],c[4:2]);
call d3(b3[15:0],mc[7:0],c[6:4]);
call d4(b4[15:0],mc[7:0],c[8:6]);
assign {prod[15:0]}=b1[15:0]+b2[15:0]*4+b3[15:0]*16+b4[15:0]*64;
endmodule

module call(c,a,b);
input [7:0]a;
input [2:0]b;
output reg[15:0]c;
wire [15:0]w;
assign w[15:0]={a[7],a[7],a[7],a[7],a[7],a[7],a[7],a[7],a[7:0]};
always @(b)
begin
if(b==3'b000||b==3'b111)
begin
c<=0;

end
if(b==3'b010||b==3'b001)
begin
c<=w;
end
if(b==3'b011)
begin
c<=w*2;
end
if(b==3'b110||b==3'b101)
begin
c<=w*(-1);
end
if(b==3'b100)
begin
c<=w*(-2);
end
end
endmodule

call:d1
mc[7..0]
mp[7..0]

Add0

3' h0 --

a[7..0]

1' h0 --

B[16..0]

b[2..0]

1' h0 --

Add1

2' h0 --

A[16..0]

c[15..0]

B[16..0]

1' h0 --

Add2

1' h0 --

A[16..0]

A[15..0]
B[15..0]

ADDER

prod[15..0]

ADDER
ADDER

call:d2
a[7..0]
c[15..0]
b[2..0]

call:d3
a[7..0]
c[15..0]
b[2..0]

call:d4
a[7..0]
c[15..0]
b[2..0]

You might also like