流水线乘法器

425 阅读1分钟

实现4bit无符号数流水线乘法器设计。

4bit乘法器,最终结果不超过八位。

image.png

image.png

module multi_pipe #(parameter size =4)
(
input clk,
input rst_n,
input [size -1:0] mul_a,
input [size -1:0] mul_b,

output reg [size*2-1:0] mul_out);
    
    //寄存器暂存,实现流水线
    reg [7:0] addr01;
    reg [7:0] addr23;
    
    //寄存四个位的结果
    
    wire [7:0] temp0;
    wire [7:0] temp1;
    wire [7:0] temp2;
    wire [7:0] temp3;
    //计算对应位的与运算,相乘
    assign temp0 = mul_b[0] ?{4'b0,mul_a} : 'd0;
    assign temp1 = mul_b[1] ?{3'b0,mul_a,1'b0} : 'd0;
    assign temp2 = mul_b[0] ?{2'b0,mul_a,2'b0} : 'd0;
    assign temp3 = mul_b[0] ?{1'b0,mul_a,3'b0} : 'd0;

    always@(posedge clk or negedge rst_n)
        if(!rst_n)begin
            addr01 <= 'd0;
            addr23 <= 'd0;
        end
        
        else begin
            addr01 <= temp0 + temp1;
            addr23 <= temp2 + temp3;
            
            mul_out <= addr01 = addr23;
        end

endmodule 

使用generate简化代码:

通过移位实现对应位乘法运算。 通过左移,上面是通过位拼接实现。 计算四次乘法运算,最后相加。

//output genvar i; generate for(i = 0; i < 4; i = i + 1)begin : loop assign temp[i] = mul_b[i] ? mul_a << i : 'd0; end


module multi_pipe#(
	parameter size = 4
)(
	input 						clk 		,   
	input 						rst_n		,
	input	[size-1:0]			mul_a		,
	input	[size-1:0]			mul_b		,
 
 	output	reg	[size*2-1:0]	mul_out		
);
    //parameter 

    wire [N - 1 : 0] temp [0 : 3];
    
    reg [N - 1 : 0] adder_0;
    reg [N - 1 : 0] adder_1;
    
    //output 
    genvar i;
    generate
        for(i = 0; i < 4; i = i + 1)begin : loop
            assign temp[i] = mul_b[i] ? mul_a << i : 'd0;
        end
    endgenerate
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) adder_0 <= 'd0;
        else adder_0 <= temp[0] + temp[1];
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) adder_1 <= 'd0;
        else adder_1 <= temp[2] + temp[3];
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) mul_out <= 'd0;
        else mul_out <= adder_0 + adder_1;
    end
endmodule