题解 | #流水线乘法器#
流水线乘法器
https://www.nowcoder.com/practice/be97f63817c543fe9260d46d971a7283
`timescale 1ns/1ns 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 [size*2-1:0] partial_products [size-1:0]; integer i, j; always @(posedge clk or negedge rst_n) begin if (~rst_n) begin for (i = 0; i < size; i++) begin partial_products[i] <= 0; end end else begin for (j = 0; j < size; j++) begin partial_products[j] <= mul_b[j] ? mul_a << j : 0; end end end reg [size*2-1:0] sum [size-1:0]; integer k; always @(posedge clk or negedge rst_n) begin for (k = 0; k < size; k++) begin if (k == 0) begin sum[k] = partial_products[k]; end else begin sum[k] = sum[k-1] + partial_products[k]; end end end always @(*) begin if (~rst_n) begin mul_out = 0; end else begin mul_out = sum[size-1]; end end endmodule