//----------------------------------------------------- // Design Name : mult_36x36 // File Name : mult_36x36.v // Function : A 36-bit multiplier which can operate in fracturable modes: // 1. four 9-bit multipliers // 2. two 18-bit multipliers // 3. one 36-bit multipliers // Coder : Xifan Tang //----------------------------------------------------- module mult_36x36 ( input [0:35] a, input [0:35] b, output [0:71] out, input [0:1] mode); reg [0:71] out_reg; always @(mode, a, b) begin if (2'b01 == mode) begin out_reg[0:17] <= a[0:8] * b[0:8]; out_reg[18:35] <= a[9:17] * b[9:17]; out_reg[36:53] <= a[18:26] * b[18:26]; out_reg[54:71] <= a[27:35] * b[27:35]; end else if (2'b10 == mode) begin out_reg[0:35] <= a[0:17] * b[0:17]; out_reg[36:71] <= a[18:35] * b[18:35]; end else begin out_reg <= a * b; end end assign out = out_reg; endmodule