Вы находитесь на странице: 1из 17

module booth(mplr,mpcnd,result);

input [15:0]mplr,mpcnd;
output [31:0]result;
reg [31:0]pp0,pp1,pp2,pp3,pp4,pp5,pp6,pp7;
reg [31:0]pps1,pps2,result;
reg [16:0]tmp;
always@(mplr or mpcnd)
begin
tmp={mplr,1'b0};
end
always@(tmp)
begin
case(tmp[2:0])
000:
begin
pp0=32'b0;
end
001:
begin
pp0[15:0]=mpcnd[15:0];
pp0[31:16]=16'b0;
end
010:
begin
pp0[15:0]=mpcnd[15:0];
pp0[31:16]=16'b0;
end

011:
begin
pp0[15:0]= mpcnd[15:0]<<1;
pp0[31:16]=16'b0;
end
100:
begin
pp0[15:0]=~mpcnd[15:0];
pp0[16:0]=pp0[15:0]+16'b0000000000000001;
pp0[31:17]=16'b0;
pp0[31:0]=pp0<<1;
end
101:
begin
pp0[15:0]=~mpcnd[15:0];
pp0[15:0]=pp0[15:0]+16'b0000000000000001;
pp0[31:16]=16'b00;
end
110:
begin
pp0[15:0]=~mpcnd[15:0];
pp0[15:0]=pp0[15:0]+16'b0000000000000001;
pp0[31:16]=16'b00;
end
111:
begin
pp0=32'b0;

end
endcase

case(tmp[4:2])
000:
begin
pp1=32'b0;
pp1=pp1<<2;
end
001:
begin
pp1[15:0]=mpcnd[15:0];
pp1[31:16]=16'b00;
pp1=pp1<<2;
end
010:
begin
pp1[15:0]=mpcnd[15:0];
pp1[31:16]=16'b00;
pp1=pp1<<2;
end
011:
begin
pp1[15:0]=1'b0;
pp1[16:1]=mpcnd[15:0];
pp1[31:17]=15'b00;
pp1=pp1<<2;

end
100:
begin
pp1[15:0]=~mpcnd[15:0];
pp1[15:0]=pp1[15:0]+16'b0000000000000001;
pp1[31:16]=16'b00;
pp1[31:0]=pp1<<1;
pp1=pp1<<2;
end
101:
begin
pp1[15:0]=~mpcnd[15:0];
pp1[15:0]=pp1[15:0]+16'b0000000000000001;
pp1[31:16]=16'b00;
pp1=pp1<<2;
end
110:
begin
pp1[15:0]=~mpcnd[15:0];
pp1[15:0]=pp1[15:0]+16'b0000000000000001;
pp1[31:16]=16'b00;
pp1=pp1<<2;
end
111:
begin
pp1=32'b0;
pp1=pp1<<2;

end
endcase

case(tmp[6:4])
000:
begin
pp2=32'b0;
pp2=pp2<<4;
end
001:
begin
pp2[15:0]=mpcnd[15:0];
pp2[31:16]=16'b00;
pp2=pp2<<4;
end
010:
begin
pp2[15:0]=mpcnd[15:0];
pp2[31:16]=16'b00;
pp2=pp2<<4;
end
011:
begin
pp2[15:0]=1'b0;
pp2[16:1]=mpcnd[15:0];

pp2[31:17]=15'b00;
pp2=pp2<<4;
end
100:
begin
pp2[15:0]=~mpcnd[15:0];
pp2[15:0]=pp2[15:0]+16'b0000000000000001;
pp2[31:16]=16'b00;
pp2[31:0]=pp2<<1;
pp2=pp2<<4;
end
101:
begin
pp2[15:0]=~mpcnd[15:0];
pp2[15:0]=pp2[15:0]+16'b0000000000000001;
pp2[31:16]=16'b00;
pp2=pp2<<4;
end
110:
begin
pp2[15:0]=~mpcnd[15:0];
pp2[15:0]=pp2[15:0]+16'b0000000000000001;
pp2[31:16]=16'b00;
pp2=pp2<<4;
end
111:
begin

pp2=32'b0;
pp2=pp2<<4;
end
endcase

case(tmp[8:6])
000:
begin
pp3=32'b0;
pp3=pp3<<6;
end
001:
begin
pp3[15:0]=mpcnd[15:0];
pp3[31:16]=16'b00;
pp3=pp3<<6;
end
010:
begin
pp3[15:0]=mpcnd[15:0];
pp3[31:16]=16'b00;
pp3=pp3<<6;
end
011:
begin
pp3[15:0]=1'b0;

pp3[16:1]=mpcnd[15:0];
pp3[31:17]=15'b00;
pp3=pp3<<6;
end
100:
begin
pp3[15:0]=~mpcnd[15:0];
pp3[15:0]=pp3[15:0]+16'b0000000000000001;
pp3[31:16]=16'b00;
pp3[31:0]=pp3<<1;
pp3=pp3<<6;
end
101:
begin
pp3[15:0]=~mpcnd[15:0];
pp3[15:0]=pp3[15:0]+16'b0000000000000001;
pp3[31:16]=16'b00;
pp3=pp3<<6;
end
110:
begin
pp3[15:0]=~mpcnd[15:0];
pp3[15:0]=pp3[15:0]+16'b0000000000000001;
pp3[31:16]=16'b00;
pp3=pp3<<6;
end
111:

begin
pp3=32'b0;
pp3=pp3<<6;
end
endcase
pps1=pp0+pp1+pp2+pp3;
end

always@(tmp)
begin
case(tmp[10:8])
000:
begin
pp4=32'b0;
pp4=pp4<<8;
end
001:
begin
pp4[15:0]=mpcnd[15:0];
pp4[31:16]=16'b00;
pp4=pp4<<8;
end
010:
begin
pp4[15:0]=mpcnd[15:0];
pp4[31:16]=16'b00;

pp4=pp4<<8;
end
011:
begin
pp4[15:0]=1'b0;
pp4[16:1]=mpcnd[15:0];
pp4[31:17]=15'b00;
pp4=pp4<<8;
end
100:
begin
pp4[15:0]=~mpcnd[15:0];
pp4[15:0]=pp4[15:0]+16'b0000000000000001;
pp4[31:16]=16'b00;
pp4[31:0]=pp4<<1;
pp4=pp4<<8;
end
101:
begin
pp4[15:0]=~mpcnd[15:0];
pp4[15:0]=pp4[15:0]+16'b0000000000000001;
pp4[31:16]=16'b00;
pp4=pp4<<8;
end
110:
begin
pp4[15:0]=~mpcnd[15:0];

pp4[15:0]=pp4[15:0]+16'b0000000000000001;
pp4[31:16]=16'b00;
pp4=pp4<<8;
end
111:
begin
pp4=32'b0;
pp4=pp4<<8;
end
endcase

case(tmp[12:10])
000:
begin
pp5=32'b0;
pp5=pp5<<10;
end
001:
begin
pp5[15:0]=mpcnd[15:0];
pp5[31:16]=16'b00;
pp5=pp5<<10;
end
010:
begin
pp5[15:0]=mpcnd[15:0];
pp5[31:16]=16'b00;

pp5=pp5<<10;
end
011:
begin
pp5[15:0]=1'b0;
pp5[16:1]=mpcnd[15:0];
pp5[31:17]=15'b00;
pp5=pp5<<10;
end
100:
begin
pp5[15:0]=~mpcnd[15:0];
pp5[15:0]=pp5[15:0]+16'b0000000000000001;
pp5[31:16]=16'b00;
pp5[31:0]=pp5<<1;
pp5=pp5<<10;
end
101:
begin
pp5[15:0]=~mpcnd[15:0];
pp5[15:0]=pp5[15:0]+16'b0000000000000001;
pp5[31:16]=16'b00;
pp5=pp5<<10;
end
110:
begin
pp5[15:0]=~mpcnd[15:0];

pp5[15:0]=pp5[15:0]+16'b0000000000000001;
pp5[31:16]=16'b00;
pp5=pp5<<10;
end
111:
begin
pp5=32'b0;
pp5=pp5<<10;
end
endcase

case(tmp[14:12])
000:
begin
pp6=32'b0;
pp6=pp6<<12;
end
001:
begin
pp6[15:0]=mpcnd[15:0];
pp6[31:16]=16'b00;
pp6=pp6<<12;
end
010:
begin
pp6[15:0]=mpcnd[15:0];
pp6[31:16]=16'b00;

pp6=pp6<<12;
end
011:
begin
pp6[15:0]=1'b0;
pp6[16:1]=mpcnd[15:0];
pp6[31:17]=15'b00;
pp6=pp6<<12;
end
100:
begin
pp6[15:0]=~mpcnd[15:0];
pp6[15:0]=pp6[15:0]+16'b0000000000000001;
pp6[31:16]=16'b00;
pp6[31:0]=pp6<<1;
pp6=pp6<<12;
end
101:
begin
pp6[15:0]=~mpcnd[15:0];
pp6[15:0]=pp6[15:0]+16'b0000000000000001;
pp6[31:16]=16'b00;
pp6=pp6<<12;
end
110:
begin
pp6[15:0]=~mpcnd[15:0];

pp6[15:0]=pp6[15:0]+16'b0000000000000001;
pp6[31:16]=16'b00;
pp6=pp6<<12;
end
111:
begin
pp6=32'b0;
pp6=pp6<<12;
end
endcase

case(tmp[16:14])
000:
begin
pp7=32'b0;
pp7=pp7<<14;
end
001:
begin
pp7[15:0]=mpcnd[15:0];
pp7[31:16]=16'b00;
pp7=pp7<<14;
end
010:
begin
pp7[15:0]=mpcnd[15:0];

pp7[31:16]=16'b00;
pp7=pp7<<14;
end
011:
begin
pp7[15:0]=1'b0;
pp7[16:1]=mpcnd[15:0];
pp7[31:17]=15'b00;
pp7=pp7<<14;
end
100:
begin
pp7[15:0]=~mpcnd[15:0];
pp7[15:0]=pp7[15:0]+16'b0000000000000001;
pp7[31:16]=16'b00;
pp7[31:0]=pp7<<1;
pp7=pp7<<14;
end
101:
begin
pp7[15:0]=~mpcnd[15:0];
pp7[15:0]=pp7[15:0]+16'b0000000000000001;
pp7[31:16]=16'b00;
pp7=pp7<<14;
end
110:
begin

pp7[15:0]=~mpcnd[15:0];
pp7[15:0]=pp7[15:0]+16'b0000000000000001;
pp7[31:16]=16'b00;
pp7=pp7<<14;
end
111:
begin
pp7=32'b0;
pp7=pp7<<14;
end
endcase
pps2=pp4+pp5+pp6+pp7;
end
always@(pps1 or pps2)
result=pps1+pps2;
endmodule

Вам также может понравиться