| /* | |
| 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 |