⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 主程序备份.txt

📁 64位乘法器
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   begin
    if(!rst)
        part_out3<=79'b0 ;
    else if(Y_reg1[63:48] == 0 || X_reg1[63:0] == 0)
        part_out3 <=79'b0 ;
    else
        part_out3 <= {part_tmp3, Y_tmp3} ;
  end
                                          

 
 
 // dao  ci shi  suo you  si  ge bu fen ji  quan bu  qiu chu .
 //xia yi bu jiang bu fen ji xiang jia    


always@(part_out0 or part_out1)
begin
if (!rst)
   part_adder0<=97'b0;
else   
   part_adder0<=part_out0 +(part_out1<<16) ;
end


always@(part_out2 or part_out3)
begin
if (!rst)
   part_adder1<=97'b0;
else   
   part_adder1<=part_out2 +(part_out3<<16) ;
end


//bring  muilt out
always@(part_adder0 or part_adder1)
begin 
if(!rst)
   muilt_out<=128'b0;
else
   muilt_out<=part_adder0 +(part_adder1<<32);
end


//**************************************************//











//adder kuai 

//Produce carry P ,G
 always@(X_reg0 or Y_reg0)
begin
   if (!rst)
     begin
     P<=64'b0;
     G<=64'b0;
     end
   else
      begin
      P<=X_reg0^ Y_reg0;
      G<=X_reg0& Y_reg0;
     end 
end 


// jiang P he G chuan dao  xia  yi ge register P_sec he G_sec shang qu 
//yi que bao  shi xu zheng que 
always@(P or G)
begin
if (!rst)
   begin
   P_sec<=64'b0;

  end
else
   begin
   P_sec<=P;

   end
end



// level 1 carry look ahead circuit 
always@(P[0]or G[0] or P[1] or G[1] or P[2] or G[2] or P[3] or G[3] or sel[0]) 
  begin
       CP[0]<=G[0]|(P[0]& sel[0]);
       CP[1]<=G[1]|(P[1]&G[0])|(P[1]&P[0]& sel[0]);
       CP[2]<=G[2]|(P[2]&G[1])|(P[2]&P[1]&G[0])|(P[2]&P[1]&P[0]& sel[0]);
       P0_a<= P[0]&P[1]&P[2]&P[3];
       G0_a<= G[3]|(P[3]&G[2])|(P[3]&P[2]&G[1])|(P[3]&P[2]&P[1]&G[0]);
  end

//carry_look_ahead n1 (P[0],G[0],P[1],G[1],P[2],G[2],P[3],G[3],1'b0,CP[0],CP[1],CP[2],P0_a,G0_a);


always@(P[4]or G[4] or P[5] or G[5] or P[6] or G[6] or P[7] or G[7] or CP[3]) 
  begin
       CP[4]<=G[4]|(P[4]& CP[3]);
       CP[5]<=G[5]|(P[5]&G[4])|(P[5]&P[4]& CP[3]);
       CP[6]<=G[6]|(P[6]&G[5])|(P[6]&P[5]&G[4])|(P[6]&P[5]&P[4]& CP[3]);
       P1_a<= P[4]&P[5]&P[6]&P[7];
       G1_a<= G[7]|(P[7]&G[6])|(P[7]&P[6]&G[5])|(P[7]&P[6]&P[5]&G[4]);
  end

//carry_look_ahead n2 (P[4],G[4],P[5],G[5],P[6],G[6],P[7],G[7],CP[3],CP[4],CP[5],CP[6],P1_a,G1_a);


always@(P[8]or G[8] or P[9] or G[9] or P[10] or G[10] or P[11] or G[11] or CP[7]) 
  begin
       CP[8]<=G[8]|(P[8]& CP[7]);
       CP[9]<=G[9]|(P[9]&G[8])|(P[9]&P[8]& CP[7]);
       CP[10]<=G[10]|(P[10]&G[9])|(P[10]&P[9]&G[8])|(P[10]&P[9]&P[8]& CP[7]);
       P2_a<= P[8]&P[9]&P[10]&P[11];
       G2_a<= G[11]|(P[11]&G[10])|(P[11]&P[10]&G[9])|(P[11]&P[10]&P[9]&G[8]);
  end

//carry_look_ahead n3 (P[8],G[8],P[9],G[9],P[10],G[10],P[11],G[11],CP[7],CP[8],CP[9],CP[10],P2_a,G2_a);


always@(P[12]or G[12] or P[13] or G[13] or P[14] or G[14] or P[15] or G[15] or CP[11]) 
  begin
       CP[12]<=G[12]|(P[12]& CP[11]);
       CP[13]<=G[13]|(P[13]&G[12])|(P[13]&P[12]& CP[11]);
       CP[14]<=G[14]|(P[14]&G[13])|(P[14]&P[13]&G[12])|(P[14]&P[13]&P[12]& CP[11]);
       P3_a<= P[12]&P[13]&P[14]&P[15];
       G3_a<= G[15]|(P[15]&G[14])|(P[15]&P[14]&G[13])|(P[15]&P[14]&P[13]&G[12]);
  end
//carry_look_ahead n4 (P[12],G[12],P[13],G[13],P[14],G[14],P[15],G[15],CP[11],CP[12],CP[13],CP[14],P3_a,G3_a);


always@(P[16]or G[16] or P[17] or G[17] or P[18] or G[18] or P[19] or G[19] or CP[15]) 
  begin
       CP[16]<=G[16]|(P[16]& CP[15]);
       CP[17]<=G[17]|(P[17]&G[16])|(P[17]&P[16]& CP[15]);
       CP[18]<=G[18]|(P[18]&G[17])|(P[18]&P[17]&G[16])|(P[18]&P[17]&P[16]& CP[15]);
       P4_a<= P[16]&P[17]&P[18]&P[19];
       G4_a<= G[19]|(P[19]&G[18])|(P[19]&P[18]&G[17])|(P[19]&P[18]&P[17]&G[16]);
  end

//carry_look_ahead n5 (P[16],G[16],P[17],G[17],P[18],G[18],P[19],G[19],CP[15],CP[16],CP[17],CP[18],P4_a,G4_a);


always@(P[20]or G[20] or P[21] or G[21] or P[22] or G[22] or P[23] or G[23] or CP[19]) 
  begin
       CP[20]<=G[20]|(P[20]& CP[19]);
       CP[21]<=G[21]|(P[21]&G[20])|(P[21]&P[20]& CP[19]);
       CP[22]<=G[22]|(P[22]&G[21])|(P[22]&P[21]&G[20])|(P[22]&P[21]&P[20]& CP[19]);
       P5_a<= P[20]&P[21]&P[22]&P[23];
       G5_a<= G[23]|(P[23]&G[22])|(P[23]&P[22]&G[21])|(P[23]&P[22]&P[21]&G[20]);
  end

//carry_look_ahead n6 (P[20],G[20],P[21],G[21],P[22],G[22],P[23],G[23],CP[19],CP[20],CP[21],CP[22],P5_a,G5_a);


always@(P[24]or G[24] or P[25] or G[25] or P[26] or G[26] or P[27] or G[27] or CP[23]) 
  begin
       CP[24]<=G[24]|(P[24]& CP[23]);
       CP[25]<=G[25]|(P[25]&G[24])|(P[25]&P[24]& CP[23]);
       CP[26]<=G[26]|(P[26]&G[25])|(P[26]&P[25]&G[24])|(P[26]&P[25]&P[24]& CP[23]);
       P6_a<= P[24]&P[25]&P[26]&P[27];
       G6_a<= G[27]|(P[27]&G[26])|(P[27]&P[26]&G[25])|(P[27]&P[26]&P[25]&G[24]);
  end

//carry_look_ahead n7 (P[24],G[24],P[25],G[25],P[26],G[26],P[27],G[27],CP[23],CP[24],CP[25],CP[26],P6_a,G6_a);


always@(P[28]or G[28] or P[29] or G[29] or P[30] or G[30] or P[31] or G[31] or CP[27]) 
  begin
       CP[28]<=G[28]|(P[28]& CP[27]);
       CP[29]<=G[29]|(P[29]&G[28])|(P[29]&P[28]& CP[27]);
       CP[30]<=G[30]|(P[30]&G[29])|(P[30]&P[29]&G[28])|(P[30]&P[29]&P[28]& CP[27]);
       P7_a<= P[28]&P[29]&P[30]&P[31];
       G7_a<= G[31]|(P[31]&G[30])|(P[31]&P[30]&G[29])|(P[31]&P[30]&P[29]&G[28]);
  end

//carry_look_ahead n8 (P[28],G[28],P[29],G[29],P[30],G[30],P[31],G[31],CP[27],CP[28],CP[29],CP[30],P7_a,G7_a);


always@(P[32]or G[32] or P[33] or G[33] or P[34] or G[34] or P[35] or G[35] or CP[31]) 
  begin
       CP[32]<=G[32]|(P[32]& CP[31]);
       CP[33]<=G[33]|(P[33]&G[32])|(P[33]&P[32]& CP[31]);
       CP[34]<=G[34]|(P[34]&G[33])|(P[34]&P[33]&G[32])|(P[34]&P[33]&P[32]& CP[31]);
       P8_a<= P[32]&P[33]&P[34]&P[35];
       G8_a<= G[35]|(P[35]&G[34])|(P[35]&P[34]&G[33])|(P[35]&P[34]&P[33]&G[32]);
  end

//carry_look_ahead n9 (P[32],G[32],P[33],G[33],P[34],G[34],P[35],G[35],CP[31],CP[32],CP[33],CP[34],P8_a,G8_a);


always@(P[36]or G[36] or P[37] or G[37] or P[38] or G[38] or P[39] or G[39] or CP[35]) 
  begin
       CP[36]<=G[36]|(P[36]& CP[35]);
       CP[37]<=G[37]|(P[37]&G[36])|(P[37]&P[36]& CP[35]);
       CP[38]<=G[38]|(P[38]&G[37])|(P[38]&P[37]&G[36])|(P[38]&P[37]&P[36]& CP[35]);
       P9_a<= P[36]&P[37]&P[38]&P[39];
       G9_a<= G[39]|(P[39]&G[38])|(P[39]&P[38]&G[37])|(P[39]&P[38]&P[37]&G[36]);
  end

//carry_look_ahead n10 (P[36],G[36],P[37],G[37],P[38],G[38],P[39],G[39],CP[35],CP[36],CP[37],CP[38],P9_a,G9_a);


always@(P[40]or G[40] or P[41] or G[41] or P[42] or G[42] or P[43] or G[43] or CP[39]) 
  begin
       CP[40]<=G[40]|(P[40]& CP[39]);
       CP[41]<=G[41]|(P[41]&G[40])|(P[41]&P[40]& CP[39]);
       CP[42]<=G[42]|(P[42]&G[41])|(P[42]&P[41]&G[40])|(P[42]&P[41]&P[40]& CP[39]);
       P10_a<= P[40]&P[41]&P[42]&P[43];
       G10_a<= G[43]|(P[43]&G[42])|(P[43]&P[42]&G[41])|(P[43]&P[42]&P[41]&G[40]);
  end

//carry_look_ahead n11 (P[40],G[40],P[41],G[41],P[42],G[42],P[43],G[43],CP[39],CP[40],CP[41],CP[42],P10_a,G10_a);


always@(P[44]or G[44] or P[45] or G[45] or P[46] or G[46] or P[47] or G[47] or CP[43]) 
  begin
       CP[44]<=G[44]|(P[44]& CP[43]);
       CP[45]<=G[45]|(P[45]&G[44])|(P[45]&P[44]& CP[43]);
       CP[46]<=G[46]|(P[46]&G[45])|(P[46]&P[45]&G[44])|(P[46]&P[45]&P[44]& CP[43]);
       P11_a<= P[44]&P[45]&P[46]&P[47];
       G11_a<= G[47]|(P[47]&G[46])|(P[47]&P[46]&G[45])|(P[47]&P[46]&P[45]&G[44]);
  end

//carry_look_ahead n12 (P[44],G[44],P[45],G[45],P[46],G[46],P[47],G[47],CP[43],CP[44],CP[45],CP[46],P11_a,G11_a);


always@(P[48]or G[48] or P[49] or G[49] or P[50] or G[50] or P[51] or G[51] or CP[47]) 
  begin
       CP[48]<=G[48]|(P[48]& CP[47]);
       CP[49]<=G[49]|(P[49]&G[48])|(P[49]&P[48]& CP[47]);
       CP[50]<=G[50]|(P[50]&G[49])|(P[50]&P[49]&G[48])|(P[50]&P[49]&P[48]& CP[47]);
       P12_a<= P[48]&P[49]&P[50]&P[51];
       G12_a<= G[51]|(P[51]&G[50])|(P[51]&P[50]&G[49])|(P[51]&P[50]&P[49]&G[48]);
  end

//carry_look_ahead n13 (P[48],G[48],P[49],G[49],P[50],G[50],P[51],G[51],CP[47],CP[48],CP[49],CP[50],P12_a,G12_a);


always@(P[52]or G[52] or P[53] or G[53] or P[54] or G[54] or P[55] or G[55] or CP[51]) 
  begin
       CP[52]<=G[52]|(P[52]& CP[51]);
       CP[53]<=G[53]|(P[53]&G[52])|(P[53]&P[52]& CP[51]);
       CP[54]<=G[54]|(P[54]&G[53])|(P[54]&P[53]&G[52])|(P[54]&P[53]&P[52]& CP[51]);
       P13_a<= P[52]&P[53]&P[54]&P[55];
       G13_a<= G[55]|(P[55]&G[54])|(P[55]&P[54]&G[53])|(P[55]&P[54]&P[53]&G[52]);
  end

//carry_look_ahead n14 (P[52],G[52],P[53],G[53],P[54],G[54],P[55],G[55],CP[51],CP[52],CP[53],CP[54],P13_a,G13_a);



always@(P[56]or G[56] or P[57] or G[57] or P[58] or G[58] or P[59] or G[59] or CP[55]) 
  begin
       CP[56]<=G[56]|(P[56]& CP[55]);
       CP[57]<=G[57]|(P[57]&G[56])|(P[57]&P[56]& CP[55]);
       CP[58]<=G[58]|(P[58]&G[57])|(P[58]&P[57]&G[56])|(P[58]&P[57]&P[56]& CP[55]);
       P14_a<= P[56]&P[57]&P[58]&P[59];
       G14_a<= G[59]|(P[59]&G[58])|(P[59]&P[58]&G[57])|(P[59]&P[58]&P[57]&G[56]);
  end

//carry_look_ahead n15 (P[56],G[56],P[57],G[57],P[58],G[58],P[59],G[59],CP[55],CP[56],CP[57],CP[58],P14_a,G14_a);


always@(P[60]or G[60] or P[61] or G[61] or P[62] or G[62] or P[63] or G[63] or CP[59]) 
  begin
       CP[60]<=G[60]|(P[60]& CP[59]);
       CP[61]<=G[61]|(P[61]&G[60])|(P[61]&P[60]& CP[59]);
       CP[62]<=G[62]|(P[62]&G[61])|(P[62]&P[61]&G[60])|(P[62]&P[61]&P[60]& CP[59]);
       P15_a<= P[60]&P[61]&P[62]&P[63];
       G15_a<= G[63]|(P[63]&G[62])|(P[63]&P[62]&G[61])|(P[63]&P[62]&P[61]&G[60]);
  end

//carry_look_ahead n16 (P[60],G[60],P[61],G[61],P[62],G[62],P[63],G[63],CP[59],CP[60],CP[61],CP[62],P15_a,G15_a);




//Level two carry look circuit
always@(P0_a or G0_a or P1_a or G1_a or P2_a or G2_a or P3_a or G3_a or sel[0] ) 
  begin
       CP[3]<=G0_a|(P0_a&sel[0]);
       CP[7]<=G1_a|(P1_a&G0_a)|(P1_a&P0_a&sel[0]);
       CP[11]<=G2_a|(P2_a&G1_a)|(P2_a&P1_a&G0_a)|(P2_a&P1_a&P0_a&sel[0]);
       P0_a_a<= P0_a&P1_a&P2_a&P3_a;
       G0_a_a<= G3_a|(P3_a&G2_a)|(P3_a&P2_a&G1_a)|(P3_a&P2_a&P1_a&G0_a);
  end

//carry_look_ahead n17 (P0_a,G0_a,P1_a,G1_a,P2_a,G2_a,P3_a,G3_a,1'b0,CP[3],CP[7],CP[11],P0_a_a,G0_a_a);



always@(P4_a or G4_a or P5_a or G5_a or P6_a or G6_a or P7_a or G7_a or CP[15]) 
  begin
       CP[19]<=G4_a|(P4_a& CP[15]);
       CP[23]<=G5_a|(P5_a&G4_a)|(P5_a&P4_a& CP[15]);
       CP[27]<=G6_a|(P6_a&G5_a)|(P6_a&P5_a&G4_a)|(P6_a&P5_a&P4_a& CP[15]);
       P1_a_a<= P4_a&P5_a&P6_a&P7_a;
       G1_a_a<= G7_a|(P7_a&G6_a)|(P7_a&P6_a&G5_a)|(P7_a&P6_a&P5_a&G4_a);
  end

//carry_look_ahead n18 (P4_a,G4_a,P5_a,G5_a,P6_a,G6_a,P7_a,G7_a,CP[15],CP[19],CP[23],CP[27],P1_a_a,G1_a_a);



always@(P8_a or G8_a or P9_a or G9_a or P10_a or G10_a or P11_a or G11_a or CP[31]) 
  begin
       CP[35]<=G8_a|(P8_a& CP[31]);
       CP[39]<=G9_a|(P9_a&G8_a)|(P9_a&P8_a& CP[31]);
       CP[43]<=G10_a|(P10_a&G9_a)|(P10_a&P9_a&G8_a)|(P10_a&P9_a&P8_a& CP[31]);
       P2_a_a<= P8_a&P9_a&P10_a&P11_a;
       G2_a_a<= G11_a|(P11_a&G10_a)|(P11_a&P10_a&G9_a)|(P11_a&P10_a&P9_a&G8_a);
  end

//carry_look_ahead n19 (P8_a,G8_a,P9_a,G9_a,P10_a,G10_a,P11_a,G11_a,CP[31],CP[35],CP[39],CP[43],P2_a_a,G2_a_a);



always@(P12_a or G12_a or P13_a or G13_a or P14_a or G14_a or P15_a or G15_a or CP[47]) 
  begin
       CP[51]<=G12_a|(P12_a& CP[47]);
       CP[55]<=G13_a|(P13_a&G12_a)|(P13_a&P12_a& CP[47]);
       CP[59]<=G14_a|(P14_a&G13_a)|(P14_a&P13_a&G12_a)|(P14_a&P13_a&P12_a& CP[47]);
       P3_a_a<= P12_a&P13_a&P14_a&P15_a;
       G3_a_a<= G15_a|(P15_a&G14_a)|(P15_a&P14_a&G13_a)|(P15_a&P14_a&P13_a&G12_a);
  end

//carry_look_ahead n20 (P12_a,G12_a,P13_a,G13_a,P14_a,G14_a,P15_a,G15_a,CP[47],CP[51],CP[55],CP[59],P3_a_a,G3_a_a);



// Level 3  carry look ahead circuit


always@(P0_a_a or G0_a_a or P1_a_a or G1_a_a or P2_a_a or G2_a_a or P3_a_a or G3_a_a or sel[0]) 
  begin
       CP[15]<=G0_a_a|(P0_a_a&sel[0]);
       CP[31]<=G1_a_a|(P1_a_a&G0_a_a) |(P1_a_a&P0_a_a&sel[0]);
       CP[47]<=G2_a_a|(P2_a_a&G1_a_a)|(P2_a_a&P1_a_a&G0_a_a)|(P2_a_a&P1_a_a&P0_a_a&sel[0]);
       P0_a_a_a<= P0_a_a&P1_a_a&P2_a_a&P3_a_a;
       G0_a_a_a<= G3_a_a|(P3_a_a&G2_a_a)|(P3_a_a&P2_a_a&G1_a_a)|(P3_a_a&P2_a_a&P1_a_a&G0_a_a);
  end


//carry_look_ahead n21 (P0_a_a,G0_a_a,P1_a_a,G1_a_a,P2_a_a,G2_a_a,P3_a_a,G3_a_a,1'b0,CP[15],CP[31],CP[47],P0_a_a_a,G0_a_a_a);

//********************************************************************************


//produce the top carry
always@(G[63:59] or P[63:60] )
begin
    if(!rst)
      CP[63]<=1'b0;
    else
      CP[63]=G[63]|(P[63] & G[62])|(P[63] & P[62] & G[61])|(P[63]&P[62]&P[61]&G[60])|(P[63]&P[62]&P[61]&P[60]&G[59]);
end



//  bring result,
always@(P_sec or  CP or sel[0])
    begin
        if(!rst)
           sum[64:0]<=65'b0;
        else
           sum[64:0]<={CP[63],(P_sec[63:0]^{CP[62:0],sel[0]})};
    end 

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -