第一种实现:使用选择器再移位。
module signed_multi(a,b,result);//in this module,you can find that you can initial the value of wire
input [7:0] a,b;
output [15:0] result;
wire [7:0] a,b;
wire [15:0] result;
wire [7:0] ab0 = a[0]?b:8'b0;
wire [7:0] ab1 = a[1]?b:8'b0;
wire [7:0] ab2 = a[2]?b:8'b0;
wire [7:0] ab3 = a[3]?b:8'b0;
wire [7:0] ab4 = a[4]?b:8'b0;
wire [7:0] ab5 = a[5]?b:8'b0;
wire [7:0] ab6 = a[6]?b:8'b0;
wire [7:0] ab7 = a[7]?b:8'b0;
assign result = {8'b1,~ab0[7],ab0[6:0]} + {7'b0,~ab1[7],ab1[6:0],1'b0} + {6'b0,~ab2[7],ab2[6:0],2'b0} + {5'b0,~ab3[7],ab3[6:0],3'b0}
+ {4'b0,~ab4[7],ab4[6:0],4'b0}+ {3'b0,~ab5[7],ab5[6:0],5'b0} + {2'b0,~ab6[7],ab6[6:0],6'b0} + {1'b1,~ab7[7],ab7[6:0],7'b0};
endmodule</