dp_csa32.v 4.58 KB
////////////////////////////////////////////////////////////////////////
//
// Project Reality
//
// module:	dp_csa32
// description:	32 bit carry save adder for use in replacing 
//		datapath CSA with standard cells.  Does not 
//		requires carry in bit to or a carry out bit 
//		from the CSA.
//
// designer:	Brian Ferguson
// date:	3/15/95
//
////////////////////////////////////////////////////////////////////////

module dp_csa32 (
			carryin,
			input1,
			input2,
			input3,  
			partial_sum,
			partial_carry,
			carryout
		);

input carryin ;

input [31:0] input1 ;
input [31:0] input2 ;
input [31:0] input3 ;

output [31:0] partial_sum ;
output [31:0] partial_carry ;
output carryout;

// conditional cells:

	assign partial_carry[0] = carryin ;

/*
*	The lower eight bits use high performance cells since due to
*	the late arrival of round bit 2 onto data bit 6 and the 
*	ripple affect of the adder these bits tend to be timing
*	critical.
*/

ad01d2 csab0	(	.a(input1[0]), .b(input2[0]), .ci(input3[0]),
			.s(partial_sum[0]), .co(partial_carry[1])
		);

ad01d2 csab1	(	.a(input1[1]), .b(input2[1]), .ci(input3[1]),
			.s(partial_sum[1]), .co(partial_carry[2])
		);

ad01d2 csab2	(	.a(input1[2]), .b(input2[2]), .ci(input3[2]),
			.s(partial_sum[2]), .co(partial_carry[3])
		);

ad01d1 csab3	(	.a(input1[3]), .b(input2[3]), .ci(input3[3]),
			.s(partial_sum[3]), .co(partial_carry[4])
		);

ad01d1 csab4	(	.a(input1[4]), .b(input2[4]), .ci(input3[4]),
			.s(partial_sum[4]), .co(partial_carry[5])
		);

ad01d1 csab5	(	.a(input1[5]), .b(input2[5]), .ci(input3[5]),
			.s(partial_sum[5]), .co(partial_carry[6])
		);

ad01d1 csab6	(	.a(input1[6]), .b(input2[6]), .ci(input3[6]),
			.s(partial_sum[6]), .co(partial_carry[7])
		);

ad01d1h csab7	(	.a(input1[7]), .b(input2[7]), .ci(input3[7]),
			.s(partial_sum[7]), .co(partial_carry[8])
		);

ad01d1h csab8	(	.a(input1[8]), .b(input2[8]), .ci(input3[8]),
			.s(partial_sum[8]), .co(partial_carry[9])
		);

ad01d2 csab9	(	.a(input1[9]), .b(input2[9]), .ci(input3[9]),
			.s(partial_sum[9]), .co(partial_carry[10])
		);

ad01d2 csab10	(	.a(input1[10]), .b(input2[10]), .ci(input3[10]),
			.s(partial_sum[10]), .co(partial_carry[11])
		);

ad01d1 csab11	(	.a(input1[11]), .b(input2[11]), .ci(input3[11]),
			.s(partial_sum[11]), .co(partial_carry[12])
		);

ad01d1 csab12	(	.a(input1[12]), .b(input2[12]), .ci(input3[12]),
			.s(partial_sum[12]), .co(partial_carry[13])
		);

ad01d1 csab13	(	.a(input1[13]), .b(input2[13]), .ci(input3[13]),
			.s(partial_sum[13]), .co(partial_carry[14])
		);

ad01d1 csab14	(	.a(input1[14]), .b(input2[14]), .ci(input3[14]),
			.s(partial_sum[14]), .co(partial_carry[15])
		);

ad01d2 csab15	(	.a(input1[15]), .b(input2[15]), .ci(input3[15]),
			.s(partial_sum[15]), .co(partial_carry[16])
		);

ad01d2 csab16	(	.a(input1[16]), .b(input2[16]), .ci(input3[16]),
			.s(partial_sum[16]), .co(partial_carry[17])
		);

ad01d2 csab17	(	.a(input1[17]), .b(input2[17]), .ci(input3[17]),
			.s(partial_sum[17]), .co(partial_carry[18])
		);

ad01d1 csab18	(	.a(input1[18]), .b(input2[18]), .ci(input3[18]),
			.s(partial_sum[18]), .co(partial_carry[19])
		);

ad01d1 csab19	(	.a(input1[19]), .b(input2[19]), .ci(input3[19]),
			.s(partial_sum[19]), .co(partial_carry[20])
		);

ad01d1 csab20	(	.a(input1[20]), .b(input2[20]), .ci(input3[20]),
			.s(partial_sum[20]), .co(partial_carry[21])
		);

ad01d1 csab21	(	.a(input1[21]), .b(input2[21]), .ci(input3[21]),
			.s(partial_sum[21]), .co(partial_carry[22])
		);

ad01d1 csab22	(	.a(input1[22]), .b(input2[22]), .ci(input3[22]),
			.s(partial_sum[22]), .co(partial_carry[23])
		);

ad01d1h csab23	(	.a(input1[23]), .b(input2[23]), .ci(input3[23]),
			.s(partial_sum[23]), .co(partial_carry[24])
		);

ad01d1h csab24	(	.a(input1[24]), .b(input2[24]), .ci(input3[24]),
			.s(partial_sum[24]), .co(partial_carry[25])
		);

ad01d1 csab25	(	.a(input1[25]), .b(input2[25]), .ci(input3[25]),
			.s(partial_sum[25]), .co(partial_carry[26])
		);

ad01d1 csab26	(	.a(input1[26]), .b(input2[26]), .ci(input3[26]),
			.s(partial_sum[26]), .co(partial_carry[27])
		);

ad01d1 csab27	(	.a(input1[27]), .b(input2[27]), .ci(input3[27]),
			.s(partial_sum[27]), .co(partial_carry[28])
		);

ad01d1 csab28	(	.a(input1[28]), .b(input2[28]), .ci(input3[28]),
			.s(partial_sum[28]), .co(partial_carry[29])
		);

ad01d1 csab29	(	.a(input1[29]), .b(input2[29]), .ci(input3[29]),
			.s(partial_sum[29]), .co(partial_carry[30])
		);

ad01d1 csab30	(	.a(input1[30]), .b(input2[30]), .ci(input3[30]),
			.s(partial_sum[30]), .co(partial_carry[31])
		);

ad01d1 csab31	(	.a(input1[31]), .b(input2[31]), .ci(input3[31]),
			.s(partial_sum[31]), .co(carryout)
		);



endmodule // dp_csa32