与非门实现硬件乘法器

基本思想:对于两个一位的数a、b的和

低位 sum=a^b

向高位的进位 carry=a&b

 

代码如下

/*
四位无符号数硬件乘法器
2010-9-27
CYF

multi_4.v
*/
module multi_4(
 input [3:0] x,
 input [3:0] y,
 output [7:0] mul
);

wire [3:0] t0=x&{4{y[0]}};
wire [3:0] t1=x&{4{y[1]}};
wire [3:0] t2=x&{4{y[2]}};
wire [3:0] t3=x&{4{y[3]}};

assign mul[0]=t0[0];
assign mul[1]=t0[1]^t1[0];
wire mul_1=t0[1]&t1[0];
wire t_1=t0[2]^t1[1];
wire t_2=t2[0]^mul_1;
assign mul[2]=t_1^t_2;
wire mul_2=t0[2]&t1[1];
wire mul_3=t2[0]&mul_1;
wire mul_4=t_1&t_2;
wire t_3=t0[3]^t1[2];
wire t_4=t2[1]^t3[0];
wire t_5=mul_2^mul_3;
wire t_6=t_3^t_4;
wire t_7=t_5^mul_4;
assign mul[3]=t_6^t_7;
wire mul_5=t0[3]&t1[2];
wire mul_6=t2[1]&t3[0];
wire mul_7=mul_2&mul_3;
wire mul_8=t_3&t_4;
wire mul_9=t_5&mul_4;
wire mul_10=t_6&t_7;
wire t_8=t1[3]^t2[2];
wire t_9=t3[1]^mul_5;
wire t_10=mul_6^mul_7;
wire t_11=mul_8^mul_9;
wire t_12=t_8^t_9;
wire t_13=t_10^t_11;
wire t_14=t_12^t_13;
assign mul[4]=t_14^mul_10;
wire mul_11=t1[3]&t2[2];
wire mul_12=t3[1]&mul_5;
wire mul_13=mul_6&mul_7;
wire mul_14=mul_8&mul_9;
wire mul_15=t_8&t_9;
wire mul_16=t_10&t_11;
wire mul_17=t_12&t_13;
wire mul_18=t_14&mul_10;
wire t_15=t2[3]^t3[2];
wire t_16=mul_11^mul_12;
wire t_17=mul_13^mul_14;
wire t_18=mul_15^mul_16;
wire t_19=mul_17^mul_18;
wire t_20=t_15^t_16;
wire t_21=t_17^t_18;
wire t_22=t_21^t_19;
assign mul[5]=t_20^t_22;
wire mul_19=t2[3]&t3[2];
wire mul_20=mul_11&mul_12;
wire mul_21=mul_13&mul_14;
wire mul_22=mul_15&mul_16;
wire mul_23=mul_17&mul_18;
wire mul_24=t_15&t_16;
wire mul_25=t_17&t_18;
wire mul_26=t_21&t_19;
wire mul_27=t_20&t_22;
wire t_23=t3[3]^mul_19;
wire t_24=mul_20^mul_21;
wire t_25=mul_22^mul_23;
wire t_26=mul_24^mul_25;
wire t_27=mul_26^mul_27;
wire t_28=t_23^t_24;
wire t_29=t_25^t_26;
wire t_30=t_29^t_27;
assign mul[6]=t_28^t_30;
wire mul_28=t3[3]&mul_19;
wire mul_29=mul_20&mul_21;
wire mul_30=mul_22&mul_23;
wire mul_31=mul_24&mul_25;
wire mul_32=mul_26&mul_27;
wire mul_33=t_23&t_24;
wire mul_34=t_25&t_26;
wire mul_35=t_29&t_27;
wire mul_36=t_28&t_30;
wire t_31=mul_28^mul_29;
wire t_32=mul_30^mul_31;
wire t_33=mul_32^mul_33;
wire t_34=mul_34^mul_35;
wire t_35=t_31^t_32;
wire t_36=t_34^mul_36;
wire t_37=t_35^t_33;
assign mul[7]=t_36^t_37;
endmodule

你可能感兴趣的:(input,output,2010)