Professional Documents
Culture Documents
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]