解题思路
题目中是4bit*4bit,相乘的基本原理如下:
流水线的思路是:
temp的值用组合逻辑直接产生。然后用到三个加法器:
第1个cycle:分别计算adder01 <= temp0 + temp1
和adder23 <= 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