解题思路

题目中是4bit*4bit,相乘的基本原理如下:
图片说明

流水线的思路是:
temp的值用组合逻辑直接产生。然后用到三个加法器:
第1个cycle:分别计算adder01 <= temp0 + temp1adder23 <= temp2 + temp3
第2个cycle:计算结果mul_out <= adder01 + adder23

代码参考

`timescale 1ns/1ns

module multi_pipe(
    input    wire              clk         ,   
    input    wire              rst_n        ,
    input    wire    [3:0]    mul_a        ,
    input    wire    [3:0]    mul_b        ,

    output   reg     [7:0]    mul_out        
);

    wire [7:0] temp [3:0];
    reg  [7:0] adder01, adder23;

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


    always@(posedge clk or negedge rst_n) begin
        if(rst_n == 1'b0) begin
            adder01 <= 8'b0;
            adder23 <= 8'b0;
            mul_out <= 8'b0;
        end
        else begin
            adder01 <= temp[0] + temp[1];
            adder23 <= temp[2] + temp[3];
            mul_out <= adder01 + adder23;
        end
    end

endmodule