dp_csa32.v
4.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
////////////////////////////////////////////////////////////////////////
//
// 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