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

📄 multiplier_patial_product.v

📁 8*8乘法器及其测试:采用booth编码的乘法器:1. ultipler_quick_add_4 即4位的并行全加器
💻 V
字号:
//------------------------------------------------------

// file name : multiplier_patial_product

// module name : multiplier_patial_product.v

// author : hejun

// software : model sim

//------------------------------------------------------

`timescale 	 1ns/1ns

module multiplier_patial_product(
        x,
        y,
        pp1,
        pp2,
        pp3
        );


input [7:0] x;
input [7:0] y;
output [15:0] pp1;
output [15:0] pp2;
output [15:0] pp3;



wire [15:0] pp1;
wire [15:4] pp1_1;
wire [15:4] pp1_2;
wire [15:0] pp2;
wire [14:7] pp2_1;
wire [14:7] pp2_2;
wire [15:0] pp3;
wire [15:8] pp3_1;
wire [15:8] pp3_2;


wire [9:0] p;
wire [12:1] cout;
wire [12:1] cout_1;
wire [12:1] cout_2;

wire [15:0] shiftout_1;
wire [15:0] shiftout_2;
wire [15:0] shiftout_3;


assign p[0] = 1'b0;
assign p[8:1] = y[7:0];
assign p[9] = 1'b0;


multiplier_unit_4              multiplier_unit4_1(
   .y                             (p[3:0]),
   .x                             (x[3:0]),
   .shiftin                       (2'b11 & {~p[3],~p[3]} | 2'b00 & {p[3],p[3]}),
   .shiftout                      (shiftout_1[3:0]),                     
   .cin                           (1'b0),          
   .pp                            (pp1[3:0]),
   .cout                          (cout[1])
   );
  
  
multiplier_unit_4              multiplier_unit4_2_1(
   .y                             (p[3:0]),
   .x                             (x[7:4]),
   .shiftin                       (shiftout_1[3:2]),
   .shiftout                      (shiftout_1[7:4]),                     
   .cin                           (1'b0),          
   .pp                            (pp1_1[7:4]),
   .cout                          (cout_1[2])
   );  
  

multiplier_unit_4              multiplier_unit4_2_2(
   .y                             (p[3:0]),
   .x                             (x[7:4]),
   .shiftin                       (shiftout_1[3:2]),
   .shiftout                      (shiftout_1[7:4]),                     
   .cin                           (1'b1),          
   .pp                            (pp1_2[7:4]),
   .cout                          (cout_2[2])
   );  

assign pp1[7:4] = cout[1]? pp1_2[7:4] : pp1_1[7:4];
assign cout[2] = cout[1]? cout_2[2] : cout_1[2];


multiplier_unit_4              multiplier_unit4_3_1(
   .y                             (p[3:0]),
   .x                             (4'b0),
   .shiftin                       (shiftout_1[7:6]),
   .shiftout                      (shiftout_1[11:8]),                     
   .cin                           (1'b0),          
   .pp                            (pp1_1[11:8]),
   .cout                          (cout_1[3])
   );    
   
   
multiplier_unit_4              multiplier_unit4_3_2(
   .y                             (p[3:0]),
   .x                             (4'b0),
   .shiftin                       (shiftout_1[7:6]),
   .shiftout                      (shiftout_1[11:8]),                     
   .cin                           (1'b1),          
   .pp                            (pp1_2[11:8]),
   .cout                          (cout_2[3])
   );       
   
assign pp1[11:8] = cout[2]? pp1_2[11:8] : pp1_1[11:8];
assign cout[3] = cout[2]? cout_2[3] : cout_1[3];



multiplier_unit_4              multiplier_unit4_4_1(
   .y                             (p[3:0]),
   .x                             (4'b0),
   .shiftin                       (shiftout_1[11:10]),
   .shiftout                      (shiftout_1[15:12]),                     
   .cin                           (1'b0),          
   .pp                            (pp1_1[15:12]),
   .cout                          (cout_1[4])
   );     
   

multiplier_unit_4              multiplier_unit4_4_2(
   .y                             (p[3:0]),
   .x                             (4'b0),
   .shiftin                       (shiftout_1[11:10]),
   .shiftout                      (shiftout_1[15:12]),                     
   .cin                           (1'b1),          
   .pp                            (pp1_2[15:12]),
   .cout                          (cout_2[4])
   );     

assign pp1[15:12] = cout[3]? pp1_2[15:12] : pp1_1[15:12];
assign cout[4] = cout[3]? cout_2[4] : cout_1[4];


/*
multiplier_unit_4              multiplier_unit4_5(
   .y                             (p[6:3]),
   .x                             (({x[0],2'b00,p[3]} & {~p[6],~p[6],~p[6],~p[6]}) | ({~x[0],2'b11,~p[3]} & {p[6],p[6],p[6],p[6]})),
   .shiftin                       (2'b11 & {~p[6],~p[6]} | 2'b00 & {p[6],p[6]}),
   .shiftout                      (shiftout_2[3:0]),                     
   .cin                           (1'b0),          
   .pp                            (pp2[3:0]),
   .cout                          (cout[5])
   );     
*/

assign pp2[0] = p[3];
assign pp2[1] = 1'b0;
assign pp2[2] = 1'b0;
   

multiplier_unit_4              multiplier_unit4_5(
   .y                             (p[6:3]),
   .x                             (x[3:0]),
   .shiftin                       ((2'b11 & {~p[6],~p[6]}) | (2'b00 & {p[6],p[6]})),
   .shiftout                      (shiftout_2[6:3]),                     
   .cin                           (1'b0),          
   .pp                            (pp2[6:3]),
   .cout                          (cout[5])
   );     
   

multiplier_unit_4              multiplier_unit4_6_1(
   .y                             (p[6:3]),
   .x                             (x[7:4]),
   .shiftin                       (shiftout_2[6:5]),
   .shiftout                      (shiftout_2[10:7]),                     
   .cin                           (1'b0),          
   .pp                            (pp2_1[10:7]),
   .cout                          (cout_1[6])
   );     
   

multiplier_unit_4              multiplier_unit4_6_2(
   .y                             (p[6:3]),
   .x                             (x[7:4]),
   .shiftin                       (shiftout_2[6:5]),
   .shiftout                      (shiftout_2[10:7]),                     
   .cin                           (1'b1),          
   .pp                            (pp2_2[10:7]),
   .cout                          (cout_2[6])
   );     

assign pp2[10:7] = cout[5]? pp2_2[10:7] : pp2_1[10:7];
assign cout[6] = cout[5]? cout_2[6] : cout_1[6];   
 
 
multiplier_unit_4              multiplier_unit4_7_1(
   .y                             (p[6:3]),
   .x                             (4'b0),
   .shiftin                       (shiftout_2[10:9]),
   .shiftout                      (shiftout_2[14:11]),                     
   .cin                           (1'b0),          
   .pp                            (pp2_1[14:11]),
   .cout                          (cout_1[7])
   );     

multiplier_unit_4              multiplier_unit4_7_2(
   .y                             (p[6:3]),
   .x                             (4'b0),
   .shiftin                       (shiftout_2[10:9]),
   .shiftout                      (shiftout_2[14:11]),                     
   .cin                           (1'b1),          
   .pp                            (pp2_2[14:11]),
   .cout                          (cout_2[7])
   );     


assign pp2[14:11] = cout[7]? pp2_2[14:11] : pp2_1[14:11];
assign cout[7] = cout[6]? cout_2[7] : cout_1[7];

assign pp2[15] =  p[6];



assign pp3[2:0] = 3'b000;
assign pp3[3] = p[6];
   
   
multiplier_unit_4              multiplier_unit4_10(
   .y                             (p[9:6]),
   .x                             ({x[1:0],2'b00}),
   .shiftin                       (2'b11),
   .shiftout                      (shiftout_3[7:4]),                     
   .cin                           (1'b0),          
   .pp                            (pp3[7:4]),
   .cout                          (cout[10])
   );     
     

multiplier_unit_4              multiplier_unit4_11_1(
   .y                             (p[9:6]),
   .x                             (x[5:2]),
   .shiftin                       (shiftout_3[7:6]),
   .shiftout                      (shiftout_3[11:8]),                     
   .cin                           (1'b0),          
   .pp                            (pp3_1[11:8]),
   .cout                          (cout_1[11])
   );
   

multiplier_unit_4              multiplier_unit4_11_2(
   .y                             (p[9:6]),
   .x                             (x[5:2]),
   .shiftin                       (shiftout_3[7:6]),
   .shiftout                      (shiftout_3[11:8]),                     
   .cin                           (1'b1),          
   .pp                            (pp3_2[11:8]),
   .cout                          (cout_2[11])
   );   


assign pp3[11:8] = cout[10]? pp3_2[11:8] : pp3_1[11:8];
assign cout[11:8] = cout[10]? cout_2[11] : cout_1[11];


multiplier_unit_4              multiplier_unit4_12_1(
   .y                             (p[9:6]),
   .x                             ({2'b00,x[7:6]}),
   .shiftin                       (shiftout_3[11:10]),
   .shiftout                      (shiftout_3[15:12]),                     
   .cin                           (cout[11]),          
   .pp                            (pp3_1[15:12]),
   .cout                          (cout_1[12])
   );     
       
multiplier_unit_4              multiplier_unit4_12_2(
   .y                             (p[9:6]),
   .x                             ({2'b00,x[7:6]}),
   .shiftin                       (shiftout_3[11:10]),
   .shiftout                      (shiftout_3[15:12]),                     
   .cin                           (cout[11]),          
   .pp                            (pp3_2[15:12]),
   .cout                          (cout_2[12])
   );      


assign pp3[15:12] = cout[11]? pp3_2[15:12] : pp3_1[15:12];
assign cout[12] = cout[11]? cout_2[12] : cout_1[12];


endmodule     

⌨️ 快捷键说明

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