// mult_20x20_carsav_noreg.v // // 20 x 20-bit signed multiplier // with two product outputs that are meant to simulate carry-save format. // They are a valid carry-save format but are not exactly what would // normally appear with a real hardware multiplier. // Inputs and outputs are *not* registered. // // 2007/02/10 Removed registers from inputs and outputs so they should // be included in other block (to simplify external timing // in synthesis). // 2006/02/18 Written `timescale 10ps/1ps `celldefine module mult_20x20_carsav_noreg ( ina, inb, out_0, out_1 ); input [19:0] ina; input [19:0] inb; output [39:0] out_0; output [39:0] out_1; //----- declarations wire [39:0] out_0; wire [39:0] out_1; //----- main // ina = ina[18:0] - (ina[19] << 19); // inb = inb[18:0] - (inb[19] << 19); assign out_0 = inb[18:0] * (ina[18:0] - (ina[19] << 19)); assign out_1 = -(inb[19] << 19) * (ina[18:0] - (ina[19] << 19)); endmodule // mult_20x20_carsav_noreg `endcelldefine