/* Example from: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug901-vivado-synthesis.pdf [p. 89]. */ // Unsigned 16x24-bit Multiplier // 1 latency stage on operands // 3 latency stage after the multiplication // File: multipliers2.v // module mul_unsigned (clk, A, B, RES); parameter WIDTHA = /*16*/ 6; parameter WIDTHB = /*24*/ 9; input clk; input [WIDTHA-1:0] A; input [WIDTHB-1:0] B; output [WIDTHA+WIDTHB-1:0] RES; reg [WIDTHA-1:0] rA; reg [WIDTHB-1:0] rB; reg [WIDTHA+WIDTHB-1:0] M [3:0]; integer i; always @(posedge clk) begin rA <= A; rB <= B; M[0] <= rA * rB; for (i = 0; i < 3; i = i+1) M[i+1] <= M[i]; end assign RES = M[3]; endmodule