-
Notifications
You must be signed in to change notification settings - Fork 17
/
mul11u_0DX.v
296 lines (293 loc) · 11.2 KB
/
mul11u_0DX.v
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
/***
* This code is a part of EvoApproxLib library (ehw.fit.vutbr.cz/approxlib) distributed under The MIT License.
* When used, please cite the following article(s): V. Mrazek, S. S. Sarwar, L. Sekanina, Z. Vasicek and K. Roy, "Design of power-efficient approximate multipliers for approximate artificial neural networks," 2016 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), Austin, TX, 2016, pp. 1-7. doi: 10.1145/2966986.2967021
* This file contains a circuit from a sub-set of pareto optimal circuits with respect to the pwr and mae parameters
***/
// MAE% = 1.18 %
// MAE = 49343
// WCE% = 6.03 %
// WCE = 252964
// WCRE% = 3051.52 %
// EP% = 99.90 %
// MRE% = 19.95 %
// MSE = 37290.89e5
// PDK45_PWR = 0.236 mW
// PDK45_AREA = 524.2 um2
// PDK45_DELAY = 1.13 ns
module mul11u_0DX(A, B, O);
input [10:0] A, B;
output [21:0] O;
wire [10:0] A, B;
wire [21:0] O;
wire sig_75, sig_76, sig_86, sig_87, sig_95, sig_96;
wire sig_97, sig_98, sig_106, sig_107, sig_108, sig_109;
wire sig_116, sig_117, sig_118, sig_119, sig_120, sig_127;
wire sig_128, sig_129, sig_130, sig_131, sig_137, sig_138;
wire sig_139, sig_140, sig_141, sig_142, sig_235, sig_238;
wire sig_239, sig_240, sig_269, sig_272, sig_273, sig_274;
wire sig_275, sig_277, sig_278, sig_279, sig_280, sig_282;
wire sig_283, sig_284, sig_285, sig_286, sig_287, sig_288;
wire sig_289, sig_376, sig_377, sig_378, sig_379, sig_380;
wire sig_381, sig_382, sig_384, sig_385, sig_386, sig_387;
wire sig_388, sig_389, sig_390, sig_391, sig_420, sig_441;
wire sig_442, sig_444, sig_473, sig_474, sig_475, sig_476;
wire sig_477, sig_478, sig_479, sig_480, sig_481, sig_482;
wire sig_483, sig_484, sig_485, sig_486, sig_487, sig_488;
wire sig_489, sig_490, sig_491, sig_493, sig_494, sig_495;
wire sig_496, sig_538, sig_539, sig_540, sig_542, sig_543;
wire sig_544, sig_545, sig_546, sig_547, sig_548, sig_549;
wire sig_550, sig_551, sig_552, sig_553, sig_554, sig_555;
wire sig_556, sig_575, sig_591, sig_592, sig_593, sig_595;
wire sig_596, sig_597, sig_598, sig_599, sig_600, sig_601;
wire sig_604, sig_605, sig_606, sig_607, sig_608, sig_609;
wire sig_610, sig_611, sig_612, sig_613, sig_615, sig_617;
wire sig_618, sig_621, sig_623, sig_625, sig_652, sig_655;
wire sig_691, sig_692, sig_693, sig_694, sig_707, sig_708;
wire sig_709, sig_711, sig_748, sig_749, sig_750, sig_751;
wire sig_752, sig_753, sig_754, sig_755, sig_756, sig_757;
wire sig_758, sig_759, sig_760, sig_761, sig_762, sig_763;
wire sig_764, sig_765, sig_766, sig_767, sig_768, sig_769;
wire sig_770, sig_771, sig_772, sig_773, sig_774, sig_775;
wire sig_776, sig_777, sig_778, sig_779, sig_780, sig_781;
wire sig_782, sig_783, sig_784, sig_785, sig_786, sig_787;
wire sig_788, sig_789, sig_791, sig_792, sig_793, sig_795;
wire sig_797, sig_799, sig_801, sig_803, sig_804, sig_805;
wire sig_806, sig_807, sig_808, sig_810, sig_811, sig_812;
wire sig_813, sig_814, sig_816, sig_817, sig_818, sig_819;
wire sig_821, sig_822, sig_823;
assign O[3] = A[8] & B[7];
assign sig_75 = !(B[0] | B[4]);
assign sig_76 = A[10] & B[4];
assign sig_86 = A[9] & B[5];
assign sig_87 = A[10] & B[5];
assign sig_95 = A[0] & B[0];
assign sig_96 = A[8] & B[6];
assign sig_97 = A[9] & B[6];
assign sig_98 = A[10] & B[6];
assign sig_106 = A[7] & B[5];
assign sig_107 = A[8] & B[7];
assign sig_108 = A[9] & B[7];
assign sig_109 = A[10] & B[7];
assign O[7] = A[4] & B[8];
assign sig_116 = A[6] & B[8];
assign sig_117 = A[7] & B[8];
assign sig_118 = A[8] & B[8];
assign sig_119 = A[9] & B[8];
assign sig_120 = A[10] & B[8];
assign sig_127 = A[6] & B[9];
assign sig_128 = A[7] & B[9];
assign sig_129 = A[8] & B[9];
assign sig_130 = A[9] & B[9];
assign sig_131 = A[10] & B[9];
assign sig_137 = A[5] & B[10];
assign sig_138 = A[6] & B[10];
assign sig_139 = A[7] & B[10];
assign sig_140 = A[8] & B[10];
assign sig_141 = A[9] & B[10];
assign sig_142 = A[10] & B[10];
assign O[8] = B[6] & A[5];
assign sig_235 = A[1] & sig_75;
assign sig_238 = sig_235;
assign sig_239 = sig_76 & sig_86;
assign sig_240 = sig_76 ^ sig_86;
assign O[6] = B[7] & A[10];
assign sig_269 = sig_95 & B[6];
assign sig_272 = sig_269 | B[4];
assign sig_273 = sig_96;
assign sig_274 = A[8] & sig_106;
assign sig_275 = sig_273 & sig_116;
assign O[4] = sig_273 ^ sig_116;
assign sig_277 = sig_274 | sig_275;
assign sig_278 = sig_97 ^ sig_107;
assign sig_279 = sig_97 & sig_107;
assign sig_280 = sig_278 & sig_117;
assign sig_282 = sig_279 | sig_280;
assign sig_283 = sig_98 ^ sig_108;
assign sig_284 = sig_98 & sig_108;
assign sig_285 = sig_283 & sig_118;
assign sig_286 = sig_283 ^ sig_118;
assign sig_287 = sig_284 | sig_285;
assign sig_288 = sig_109 & sig_119;
assign sig_289 = sig_109 ^ sig_119;
assign sig_376 = sig_238 ^ O[4];
assign sig_377 = sig_238 & O[4];
assign sig_378 = sig_376 & sig_272;
assign sig_379 = sig_376 ^ sig_272;
assign sig_380 = sig_377 | sig_378;
assign sig_381 = sig_239;
assign sig_382 = sig_239 & A[3];
assign sig_384 = sig_381 ^ sig_277;
assign sig_385 = sig_382;
assign sig_386 = sig_286 & sig_282;
assign sig_387 = sig_286 ^ sig_282;
assign sig_388 = sig_289 & sig_287;
assign sig_389 = sig_289 ^ sig_287;
assign sig_390 = sig_120 & sig_288;
assign sig_391 = sig_120 ^ sig_288;
assign sig_420 = B[3];
assign sig_441 = sig_240 & sig_379;
assign sig_442 = sig_240 ^ sig_379;
assign O[9] = sig_87 & sig_384;
assign sig_444 = sig_87 ^ sig_384;
assign O[15] = sig_380 ^ sig_127;
assign sig_473 = sig_380 & sig_127;
assign sig_474 = O[15] & sig_137;
assign sig_475 = O[15] ^ sig_137;
assign sig_476 = sig_473 | sig_474;
assign sig_477 = sig_385 ^ sig_128;
assign sig_478 = sig_385 & sig_128;
assign sig_479 = sig_477 & sig_138;
assign sig_480 = sig_477 ^ sig_138;
assign sig_481 = sig_478 | sig_479;
assign sig_482 = sig_386 ^ sig_129;
assign sig_483 = sig_386 & sig_129;
assign sig_484 = sig_482 & sig_139;
assign sig_485 = sig_482 ^ sig_139;
assign sig_486 = sig_483 | sig_484;
assign sig_487 = sig_388 ^ sig_130;
assign sig_488 = sig_388 & sig_130;
assign sig_489 = sig_487 & sig_140;
assign sig_490 = sig_487 ^ sig_140;
assign sig_491 = sig_488 | sig_489;
assign O[0] = sig_390 ^ sig_131;
assign sig_493 = sig_390 & sig_131;
assign sig_494 = O[0] & sig_141;
assign sig_495 = O[0] ^ sig_141;
assign sig_496 = sig_493 | sig_494;
assign O[5] = A[10] & sig_420;
assign sig_538 = A[5];
assign sig_539 = sig_442 & B[6];
assign sig_540 = !sig_538;
assign sig_542 = sig_539 | sig_540;
assign sig_543 = sig_444 ^ sig_441;
assign sig_544 = sig_444 | sig_441;
assign sig_545 = sig_543 & B[2];
assign sig_546 = sig_543 ^ sig_475;
assign sig_547 = sig_544 | sig_545;
assign sig_548 = sig_387 ^ O[9];
assign sig_549 = sig_387 & O[9];
assign sig_550 = sig_548 & sig_480;
assign sig_551 = sig_548 ^ sig_480;
assign sig_552 = sig_549 | sig_550;
assign sig_553 = sig_389 & sig_485;
assign sig_554 = sig_389 ^ sig_485;
assign sig_555 = sig_391 & sig_490;
assign sig_556 = sig_391 ^ sig_490;
assign sig_575 = A[8] ^ A[8];
assign sig_591 = B[8] & A[5];
assign sig_592 = sig_546 ^ sig_542;
assign sig_593 = sig_546 & sig_542;
assign sig_595 = !sig_592;
assign sig_596 = sig_593;
assign sig_597 = sig_551 ^ sig_547;
assign sig_598 = sig_551 & sig_547;
assign sig_599 = sig_597 & sig_476;
assign sig_600 = sig_597 ^ sig_476;
assign sig_601 = sig_598 | sig_599;
assign O[1] = sig_554 ^ sig_552;
assign O[2] = sig_554 & sig_552;
assign sig_604 = O[1] & sig_481;
assign sig_605 = O[1] ^ sig_481;
assign sig_606 = O[2] | sig_604;
assign sig_607 = sig_556 ^ sig_553;
assign sig_608 = sig_556 & sig_553;
assign sig_609 = sig_607 & sig_486;
assign sig_610 = sig_607 ^ sig_486;
assign sig_611 = sig_608 | sig_609;
assign sig_612 = sig_495 ^ sig_555;
assign sig_613 = sig_495 & sig_555;
assign O[13] = sig_612 & sig_491;
assign sig_615 = sig_612 ^ sig_491;
assign O[10] = sig_613 | O[13];
assign sig_617 = sig_142 & sig_496;
assign sig_618 = sig_142 ^ sig_496;
assign sig_621 = A[2];
assign sig_623 = sig_621 & B[7];
assign sig_625 = A[1] | sig_623;
assign sig_652 = sig_575 & A[5];
assign sig_655 = sig_652;
assign sig_691 = !(sig_625 | A[0]);
assign sig_692 = sig_655 & sig_691;
assign sig_693 = B[6] & sig_625;
assign sig_694 = sig_692 ^ sig_693;
assign sig_707 = sig_595 ^ sig_591;
assign sig_708 = B[3] & A[10];
assign sig_709 = sig_707 & B[6];
assign sig_711 = sig_708 | sig_709;
assign sig_748 = sig_711 & A[7];
assign sig_749 = A[6] & sig_694;
assign sig_750 = sig_748 | sig_749;
assign sig_751 = sig_600 ^ sig_596;
assign sig_752 = sig_600 & sig_596;
assign sig_753 = sig_605 ^ sig_601;
assign sig_754 = sig_605 & sig_601;
assign sig_755 = sig_753 & sig_752;
assign sig_756 = sig_753 ^ sig_752;
assign sig_757 = sig_754 | sig_755;
assign sig_758 = sig_610 ^ sig_606;
assign sig_759 = sig_610 & sig_606;
assign sig_760 = sig_758 & sig_757;
assign sig_761 = sig_758 ^ sig_757;
assign sig_762 = sig_759 | sig_760;
assign sig_763 = sig_615 ^ sig_611;
assign sig_764 = sig_615 & sig_611;
assign sig_765 = sig_763 & sig_762;
assign sig_766 = sig_763 ^ sig_762;
assign sig_767 = sig_764 | sig_765;
assign sig_768 = !(sig_600 ^ A[2]);
assign sig_769 = sig_600 & B[9];
assign sig_770 = !sig_768;
assign sig_771 = sig_769 | sig_768;
assign sig_772 = sig_605 ^ sig_601;
assign sig_773 = sig_605 & sig_601;
assign sig_774 = sig_772 & sig_771;
assign sig_775 = sig_772 ^ sig_771;
assign sig_776 = sig_773 ^ sig_774;
assign sig_777 = sig_610 ^ sig_606;
assign sig_778 = sig_610 & sig_606;
assign sig_779 = sig_777 & sig_776;
assign sig_780 = sig_777 ^ sig_776;
assign sig_781 = sig_778 | sig_779;
assign sig_782 = sig_615 ^ sig_611;
assign sig_783 = sig_615 & sig_611;
assign sig_784 = sig_782 & sig_781;
assign sig_785 = sig_782 ^ sig_781;
assign sig_786 = sig_783 | sig_784;
assign sig_787 = !sig_750;
assign sig_788 = sig_751 & sig_787;
assign sig_789 = sig_770 & sig_750;
assign O[16] = sig_788 | sig_789;
assign sig_791 = !sig_750;
assign sig_792 = sig_756 & sig_791;
assign sig_793 = sig_775 & sig_750;
assign O[11] = sig_792 | sig_793;
assign sig_795 = !sig_750;
assign O[12] = sig_761 & sig_795;
assign sig_797 = sig_780 & sig_750;
assign O[18] = O[12] | sig_797;
assign sig_799 = !sig_750;
assign O[14] = sig_766 & sig_799;
assign sig_801 = sig_785 & sig_750;
assign O[19] = O[14] ^ sig_801;
assign sig_803 = !sig_750;
assign sig_804 = sig_767 & sig_803;
assign sig_805 = sig_786 & sig_750;
assign sig_806 = sig_804 | sig_805;
assign sig_807 = sig_618 ^ O[10];
assign sig_808 = sig_618 & O[10];
assign sig_810 = sig_617 ^ sig_808;
assign sig_811 = sig_618 ^ O[10];
assign sig_812 = A[6] & O[10];
assign sig_813 = !sig_811;
assign sig_814 = sig_812 | sig_811;
assign sig_816 = sig_617 ^ sig_814;
assign sig_817 = !sig_806;
assign sig_818 = sig_807 & sig_817;
assign sig_819 = sig_813 & sig_806;
assign O[20] = sig_818 | sig_819;
assign sig_821 = !sig_806;
assign sig_822 = sig_810 & sig_821;
assign sig_823 = sig_816 & sig_806;
assign O[21] = sig_822 | sig_823;
assign O[17] = O[11];
endmodule