tf_lerp_booth0.v 2.6 KB
// Module instances modified by /home/rws/workarea/rf/sw/bbplayer/tools/necprimfix 
//
//    10 instances of an02d1h changed to j_an02.
//    1 instance of fn01d2 changed to j_fn01.
//    1 instance of fn05d2 changed to j_fn05.
//    9 instances of mx21d1h changed to j_mx21.
//

////////////////////////////////////////////////////////////////////////
//
// Project Reality
//
// module:	tf_lerp_booth0
// description:	Pseudo-Booth encoder for bilerp for texture filter unit.
//		Generates one 10 bit partial product. Eight of these plus
//		one 9 bit sign complementing version make up one partial
//		for lerp subtract/multiply. This effectively does the
//		subtract without propagating the carries. The negative
//		input is first 1's complemented, then the two inputs are
//		considered bitwise. If none is set, mask out the multiply
//		input. If one bit is set, pass the mpy input as a partial
//		product. If both bits are set, shift up one bit.
//		This implements the sign extended interpretation of the
//		subtract inputs. The 9 bit inputs are sign extended before
//		the subtract, and all 10 bits of result are used in the
//		multiply by the other 9 bit input.
//
// designer:	Phil Gossett
// date:	6/25/94
//
////////////////////////////////////////////////////////////////////////

module tf_lerp_booth0 (x, y, a, p);

input x;
input y;
input [8:0] a;

wire [9:0] pp;

output [9:0] p;		// pseudo-booth encoded partial product

j_fn05  mux0s0 (.zn(msel), .a1(x), .b1(y));	// msel = x && !y
j_fn01  mux0e0 (.zn(menb), .a1(x), .b1(y));	// menb = x || !y
j_mx21 mux0b0 (.s(msel), .i0(a[0]), .i1(1'b0), .z(pp[0]));
j_mx21 mux0b1 (.s(msel), .i0(a[1]), .i1(a[0]), .z(pp[1]));
j_mx21 mux0b2 (.s(msel), .i0(a[2]), .i1(a[1]), .z(pp[2]));
j_mx21 mux0b3 (.s(msel), .i0(a[3]), .i1(a[2]), .z(pp[3]));
j_mx21 mux0b4 (.s(msel), .i0(a[4]), .i1(a[3]), .z(pp[4]));
j_mx21 mux0b5 (.s(msel), .i0(a[5]), .i1(a[4]), .z(pp[5]));
j_mx21 mux0b6 (.s(msel), .i0(a[6]), .i1(a[5]), .z(pp[6]));
j_mx21 mux0b7 (.s(msel), .i0(a[7]), .i1(a[6]), .z(pp[7]));
j_mx21 mux0b8 (.s(msel), .i0(a[8]), .i1(a[7]), .z(pp[8]));
assign pp[9] = a[8];				// sign extended
j_an02 and0b0 (.a1(menb), .a2(pp[0]), .z(p[0]));
j_an02 and0b1 (.a1(menb), .a2(pp[1]), .z(p[1]));
j_an02 and0b2 (.a1(menb), .a2(pp[2]), .z(p[2]));
j_an02 and0b3 (.a1(menb), .a2(pp[3]), .z(p[3]));
j_an02 and0b4 (.a1(menb), .a2(pp[4]), .z(p[4]));
j_an02 and0b5 (.a1(menb), .a2(pp[5]), .z(p[5]));
j_an02 and0b6 (.a1(menb), .a2(pp[6]), .z(p[6]));
j_an02 and0b7 (.a1(menb), .a2(pp[7]), .z(p[7]));
j_an02 and0b8 (.a1(menb), .a2(pp[8]), .z(p[8]));
j_an02 and0b9 (.a1(menb), .a2(pp[9]), .z(p[9]));

endmodule // tf_lerp_booth0