source: XOpenSparcT1/trunk/T1-FPU/fpu_cnt_lead0_64b.v @ 6

Revision 6, 15.6 KB checked in by pntsvt00, 13 years ago (diff)

versione iniziale opensparc

Line 
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T1 Processor File: fpu_cnt_lead0_64b.v
4// Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
5// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
6//
7// The above named program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public
9// License version 2 as published by the Free Software Foundation.
10//
11// The above named program is distributed in the hope that it will be
12// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14// General Public License for more details.
15//
16// You should have received a copy of the GNU General Public
17// License along with this work; if not, write to the Free Software
18// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19//
20// ========== Copyright Header End ============================================
21///////////////////////////////////////////////////////////////////////////////
22//
23//      64 bit lead 0 counter.
24//
25///////////////////////////////////////////////////////////////////////////////
26
27module fpu_cnt_lead0_64b (
28        din,
29
30        lead0
31);
32
33
34input [63:0]    din;                    // data in- count its leading 0's
35
36output [5:0]    lead0;                  // number of leading 0's in data in
37
38
39wire            din_63_60_eq_0;
40wire            din_63_62_eq_0;
41wire            lead0_63_60_0;
42wire            din_59_56_eq_0;
43wire            din_59_58_eq_0;
44wire            lead0_59_56_0;
45wire            din_55_52_eq_0;
46wire            din_55_54_eq_0;
47wire            lead0_55_52_0;
48wire            din_51_48_eq_0;
49wire            din_51_50_eq_0;
50wire            lead0_51_48_0;
51wire            din_47_44_eq_0;
52wire            din_47_46_eq_0;
53wire            lead0_47_44_0;
54wire            din_43_40_eq_0;
55wire            din_43_42_eq_0;
56wire            lead0_43_40_0;
57wire            din_39_36_eq_0;
58wire            din_39_38_eq_0;
59wire            lead0_39_36_0;
60wire            din_35_32_eq_0;
61wire            din_35_34_eq_0;
62wire            lead0_35_32_0;
63wire            din_31_28_eq_0;
64wire            din_31_30_eq_0;
65wire            lead0_31_28_0;
66wire            din_27_24_eq_0;
67wire            din_27_26_eq_0;
68wire            lead0_27_24_0;
69wire            din_23_20_eq_0;
70wire            din_23_22_eq_0;
71wire            lead0_23_20_0;
72wire            din_19_16_eq_0;
73wire            din_19_18_eq_0;
74wire            lead0_19_16_0;
75wire            din_15_12_eq_0;
76wire            din_15_14_eq_0;
77wire            lead0_15_12_0;
78wire            din_11_8_eq_0;
79wire            din_11_10_eq_0;
80wire            lead0_11_8_0;
81wire            din_7_4_eq_0;
82wire            din_7_6_eq_0;
83wire            lead0_7_4_0;
84wire            din_3_0_eq_0;
85wire            din_3_2_eq_0;
86wire            lead0_3_0_0;
87wire            din_63_56_eq_0;
88wire            lead0_63_56_1;
89wire            lead0_63_56_0;
90wire            din_55_48_eq_0;
91wire            lead0_55_48_1;
92wire            lead0_55_48_0;
93wire            din_47_40_eq_0;
94wire            lead0_47_40_1;
95wire            lead0_47_40_0;
96wire            din_39_32_eq_0;
97wire            lead0_39_32_1;
98wire            lead0_39_32_0;
99wire            din_31_24_eq_0;
100wire            lead0_31_24_1;
101wire            lead0_31_24_0;
102wire            din_23_16_eq_0;
103wire            lead0_23_16_1;
104wire            lead0_23_16_0;
105wire            din_15_8_eq_0;
106wire            lead0_15_8_1;
107wire            lead0_15_8_0;
108wire            din_7_0_eq_0;
109wire            lead0_7_0_1;
110wire            lead0_7_0_0;
111wire            din_63_48_eq_0;
112wire            lead0_63_48_2;
113wire            lead0_63_48_1;
114wire            lead0_63_48_0;
115wire            din_47_32_eq_0;
116wire            lead0_47_32_2;
117wire            lead0_47_32_1;
118wire            lead0_47_32_0;
119wire            din_31_16_eq_0;
120wire            lead0_31_16_2;
121wire            lead0_31_16_1;
122wire            lead0_31_16_0;
123wire            din_15_0_eq_0;
124wire            lead0_15_0_2;
125wire            lead0_15_0_1;
126wire            lead0_15_0_0;
127wire            din_63_32_eq_0;
128wire            lead0_63_32_3;
129wire            lead0_63_32_2;
130wire            lead0_63_32_1;
131wire            din_31_0_eq_0;
132wire            lead0_31_0_3;
133wire            lead0_31_0_2;
134wire            lead0_31_0_1;
135wire            lead0_31_0_0;
136wire            lead0_6;
137wire            lead0_5;
138wire            lead0_4;
139wire            lead0_3;
140wire            lead0_2;
141wire            lead0_1;
142wire            lead0_0;
143wire [5:0]      lead0;
144
145
146///////////////////////////////////////////////////////////////////////////////
147//
148//      Instantiations of lead 0 building blocks.
149//
150///////////////////////////////////////////////////////////////////////////////
151
152fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_63_60 (
153        .din                    (din[63:60]),
154
155        .din_3_0_eq_0           (din_63_60_eq_0),
156        .din_3_2_eq_0           (din_63_62_eq_0),
157        .lead0_4b_0             (lead0_63_60_0)
158);
159
160fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_59_56 (
161        .din                    (din[59:56]),
162
163        .din_3_0_eq_0           (din_59_56_eq_0),
164        .din_3_2_eq_0           (din_59_58_eq_0),
165        .lead0_4b_0             (lead0_59_56_0)
166);
167
168fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_55_52 (
169        .din                    (din[55:52]),
170
171        .din_3_0_eq_0           (din_55_52_eq_0),
172        .din_3_2_eq_0           (din_55_54_eq_0),
173        .lead0_4b_0             (lead0_55_52_0)
174);
175
176fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_51_48 (
177        .din                    (din[51:48]),
178
179        .din_3_0_eq_0           (din_51_48_eq_0),
180        .din_3_2_eq_0           (din_51_50_eq_0),
181        .lead0_4b_0             (lead0_51_48_0)
182);
183
184fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_47_44 (
185        .din                    (din[47:44]),
186
187        .din_3_0_eq_0           (din_47_44_eq_0),
188        .din_3_2_eq_0           (din_47_46_eq_0),
189        .lead0_4b_0             (lead0_47_44_0)
190);
191
192fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_43_40 (
193        .din                    (din[43:40]),
194
195        .din_3_0_eq_0           (din_43_40_eq_0),
196        .din_3_2_eq_0           (din_43_42_eq_0),
197        .lead0_4b_0             (lead0_43_40_0)
198);
199
200fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_39_36 (
201        .din                    (din[39:36]),
202
203        .din_3_0_eq_0           (din_39_36_eq_0),
204        .din_3_2_eq_0           (din_39_38_eq_0),
205        .lead0_4b_0             (lead0_39_36_0)
206);
207
208fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_35_32 (
209        .din                    (din[35:32]),
210
211        .din_3_0_eq_0           (din_35_32_eq_0),
212        .din_3_2_eq_0           (din_35_34_eq_0),
213        .lead0_4b_0             (lead0_35_32_0)
214);
215
216fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_31_28 (
217        .din                    (din[31:28]),
218
219        .din_3_0_eq_0           (din_31_28_eq_0),
220        .din_3_2_eq_0           (din_31_30_eq_0),
221        .lead0_4b_0             (lead0_31_28_0)
222);
223
224fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_27_24 (
225        .din                    (din[27:24]),
226
227        .din_3_0_eq_0           (din_27_24_eq_0),
228        .din_3_2_eq_0           (din_27_26_eq_0),
229        .lead0_4b_0             (lead0_27_24_0)
230);
231
232fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_23_20 (
233        .din                    (din[23:20]),
234
235        .din_3_0_eq_0           (din_23_20_eq_0),
236        .din_3_2_eq_0           (din_23_22_eq_0),
237        .lead0_4b_0             (lead0_23_20_0)
238);
239
240fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_19_16 (
241        .din                    (din[19:16]),
242
243        .din_3_0_eq_0           (din_19_16_eq_0),
244        .din_3_2_eq_0           (din_19_18_eq_0),
245        .lead0_4b_0             (lead0_19_16_0)
246);
247
248fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_15_12 (
249        .din                    (din[15:12]),
250
251        .din_3_0_eq_0           (din_15_12_eq_0),
252        .din_3_2_eq_0           (din_15_14_eq_0),
253        .lead0_4b_0             (lead0_15_12_0)
254);
255
256fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_11_8 (
257        .din                    (din[11:8]),
258
259        .din_3_0_eq_0           (din_11_8_eq_0),
260        .din_3_2_eq_0           (din_11_10_eq_0),
261        .lead0_4b_0             (lead0_11_8_0)
262);
263
264fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_7_4 (
265        .din                    (din[7:4]),
266
267        .din_3_0_eq_0           (din_7_4_eq_0),
268        .din_3_2_eq_0           (din_7_6_eq_0),
269        .lead0_4b_0             (lead0_7_4_0)
270);
271
272fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_3_0 (
273        .din                    (din[3:0]),
274
275        .din_3_0_eq_0           (din_3_0_eq_0),
276        .din_3_2_eq_0           (din_3_2_eq_0),
277        .lead0_4b_0             (lead0_3_0_0)
278);
279
280
281fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_63_56 (
282        .din_7_4_eq_0           (din_63_60_eq_0),
283        .din_7_6_eq_0           (din_63_62_eq_0),
284        .lead0_4b_0_hi          (lead0_63_60_0),
285        .din_3_0_eq_0           (din_59_56_eq_0),
286        .din_3_2_eq_0           (din_59_58_eq_0),
287        .lead0_4b_0_lo          (lead0_59_56_0),
288
289        .din_7_0_eq_0           (din_63_56_eq_0),
290        .lead0_8b_1             (lead0_63_56_1),
291        .lead0_8b_0             (lead0_63_56_0)
292);
293
294fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_55_48 (
295        .din_7_4_eq_0           (din_55_52_eq_0),
296        .din_7_6_eq_0           (din_55_54_eq_0),
297        .lead0_4b_0_hi          (lead0_55_52_0),
298        .din_3_0_eq_0           (din_51_48_eq_0),
299        .din_3_2_eq_0           (din_51_50_eq_0),
300        .lead0_4b_0_lo          (lead0_51_48_0),
301
302        .din_7_0_eq_0           (din_55_48_eq_0),
303        .lead0_8b_1             (lead0_55_48_1),
304        .lead0_8b_0             (lead0_55_48_0)
305);
306
307fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_47_40 (
308        .din_7_4_eq_0           (din_47_44_eq_0),
309        .din_7_6_eq_0           (din_47_46_eq_0),
310        .lead0_4b_0_hi          (lead0_47_44_0),
311        .din_3_0_eq_0           (din_43_40_eq_0),
312        .din_3_2_eq_0           (din_43_42_eq_0),
313        .lead0_4b_0_lo          (lead0_43_40_0),
314
315        .din_7_0_eq_0           (din_47_40_eq_0),
316        .lead0_8b_1             (lead0_47_40_1),
317        .lead0_8b_0             (lead0_47_40_0)
318);
319
320fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_39_32 (
321        .din_7_4_eq_0           (din_39_36_eq_0),
322        .din_7_6_eq_0           (din_39_38_eq_0),
323        .lead0_4b_0_hi          (lead0_39_36_0),
324        .din_3_0_eq_0           (din_35_32_eq_0),
325        .din_3_2_eq_0           (din_35_34_eq_0),
326        .lead0_4b_0_lo          (lead0_35_32_0),
327
328        .din_7_0_eq_0           (din_39_32_eq_0),
329        .lead0_8b_1             (lead0_39_32_1),
330        .lead0_8b_0             (lead0_39_32_0)
331);
332
333fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_31_24 (
334        .din_7_4_eq_0           (din_31_28_eq_0),
335        .din_7_6_eq_0           (din_31_30_eq_0),
336        .lead0_4b_0_hi          (lead0_31_28_0),
337        .din_3_0_eq_0           (din_27_24_eq_0),
338        .din_3_2_eq_0           (din_27_26_eq_0),
339        .lead0_4b_0_lo          (lead0_27_24_0),
340
341        .din_7_0_eq_0           (din_31_24_eq_0),
342        .lead0_8b_1             (lead0_31_24_1),
343        .lead0_8b_0             (lead0_31_24_0)
344);
345
346fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_23_16 (
347        .din_7_4_eq_0           (din_23_20_eq_0),
348        .din_7_6_eq_0           (din_23_22_eq_0),
349        .lead0_4b_0_hi          (lead0_23_20_0),
350        .din_3_0_eq_0           (din_19_16_eq_0),
351        .din_3_2_eq_0           (din_19_18_eq_0),
352        .lead0_4b_0_lo          (lead0_19_16_0),
353
354        .din_7_0_eq_0           (din_23_16_eq_0),
355        .lead0_8b_1             (lead0_23_16_1),
356        .lead0_8b_0             (lead0_23_16_0)
357);
358
359fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_15_8 (
360        .din_7_4_eq_0           (din_15_12_eq_0),
361        .din_7_6_eq_0           (din_15_14_eq_0),
362        .lead0_4b_0_hi          (lead0_15_12_0),
363        .din_3_0_eq_0           (din_11_8_eq_0),
364        .din_3_2_eq_0           (din_11_10_eq_0),
365        .lead0_4b_0_lo          (lead0_11_8_0),
366
367        .din_7_0_eq_0           (din_15_8_eq_0),
368        .lead0_8b_1             (lead0_15_8_1),
369        .lead0_8b_0             (lead0_15_8_0)
370);
371
372fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_7_0 (
373        .din_7_4_eq_0           (din_7_4_eq_0),
374        .din_7_6_eq_0           (din_7_6_eq_0),
375        .lead0_4b_0_hi          (lead0_7_4_0),
376        .din_3_0_eq_0           (din_3_0_eq_0),
377        .din_3_2_eq_0           (din_3_2_eq_0),
378        .lead0_4b_0_lo          (lead0_3_0_0),
379
380        .din_7_0_eq_0           (din_7_0_eq_0),
381        .lead0_8b_1             (lead0_7_0_1),
382        .lead0_8b_0             (lead0_7_0_0)
383);
384
385
386fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_63_48 (
387        .din_15_8_eq_0          (din_63_56_eq_0),
388        .din_15_12_eq_0         (din_63_60_eq_0),
389        .lead0_8b_1_hi          (lead0_63_56_1),
390        .lead0_8b_0_hi          (lead0_63_56_0),
391        .din_7_0_eq_0           (din_55_48_eq_0),
392        .din_7_4_eq_0           (din_55_52_eq_0),
393        .lead0_8b_1_lo          (lead0_55_48_1),
394        .lead0_8b_0_lo          (lead0_55_48_0),
395
396        .din_15_0_eq_0          (din_63_48_eq_0),
397        .lead0_16b_2            (lead0_63_48_2),
398        .lead0_16b_1            (lead0_63_48_1),
399        .lead0_16b_0            (lead0_63_48_0)
400);
401
402fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_47_32 (
403        .din_15_8_eq_0          (din_47_40_eq_0),
404        .din_15_12_eq_0         (din_47_44_eq_0),
405        .lead0_8b_1_hi          (lead0_47_40_1),
406        .lead0_8b_0_hi          (lead0_47_40_0),
407        .din_7_0_eq_0           (din_39_32_eq_0),
408        .din_7_4_eq_0           (din_39_36_eq_0),
409        .lead0_8b_1_lo          (lead0_39_32_1),
410        .lead0_8b_0_lo          (lead0_39_32_0),
411
412        .din_15_0_eq_0          (din_47_32_eq_0),
413        .lead0_16b_2            (lead0_47_32_2),
414        .lead0_16b_1            (lead0_47_32_1),
415        .lead0_16b_0            (lead0_47_32_0)
416);
417
418fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_31_16 (
419        .din_15_8_eq_0          (din_31_24_eq_0),
420        .din_15_12_eq_0         (din_31_28_eq_0),
421        .lead0_8b_1_hi          (lead0_31_24_1),
422        .lead0_8b_0_hi          (lead0_31_24_0),
423        .din_7_0_eq_0           (din_23_16_eq_0),
424        .din_7_4_eq_0           (din_23_20_eq_0),
425        .lead0_8b_1_lo          (lead0_23_16_1),
426        .lead0_8b_0_lo          (lead0_23_16_0),
427
428        .din_15_0_eq_0          (din_31_16_eq_0),
429        .lead0_16b_2            (lead0_31_16_2),
430        .lead0_16b_1            (lead0_31_16_1),
431        .lead0_16b_0            (lead0_31_16_0)
432);
433
434fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_15_0 (
435        .din_15_8_eq_0          (din_15_8_eq_0),
436        .din_15_12_eq_0         (din_15_12_eq_0),
437        .lead0_8b_1_hi          (lead0_15_8_1),
438        .lead0_8b_0_hi          (lead0_15_8_0),
439        .din_7_0_eq_0           (din_7_0_eq_0),
440        .din_7_4_eq_0           (din_7_4_eq_0),
441        .lead0_8b_1_lo          (lead0_7_0_1),
442        .lead0_8b_0_lo          (lead0_7_0_0),
443
444        .din_15_0_eq_0          (din_15_0_eq_0),
445        .lead0_16b_2            (lead0_15_0_2),
446        .lead0_16b_1            (lead0_15_0_1),
447        .lead0_16b_0            (lead0_15_0_0)
448);
449
450
451fpu_cnt_lead0_lvl4 i_fpu_cnt_lead0_lvl4_63_32 (
452        .din_31_16_eq_0         (din_63_48_eq_0),
453        .din_31_24_eq_0         (din_63_56_eq_0),
454        .lead0_16b_2_hi         (lead0_63_48_2),
455        .lead0_16b_1_hi         (lead0_63_48_1),
456        .lead0_16b_0_hi         (lead0_63_48_0),
457        .din_15_0_eq_0          (din_47_32_eq_0),
458        .din_15_8_eq_0          (din_47_40_eq_0),
459        .lead0_16b_2_lo         (lead0_47_32_2),
460        .lead0_16b_1_lo         (lead0_47_32_1),
461        .lead0_16b_0_lo         (lead0_47_32_0),
462
463        .din_31_0_eq_0          (din_63_32_eq_0),
464        .lead0_32b_3            (lead0_63_32_3),
465        .lead0_32b_2            (lead0_63_32_2),
466        .lead0_32b_1            (lead0_63_32_1),
467        .lead0_32b_0            (lead0_63_32_0)
468);
469
470fpu_cnt_lead0_lvl4 i_fpu_cnt_lead0_lvl4_31_0 (
471        .din_31_16_eq_0         (din_31_16_eq_0),
472        .din_31_24_eq_0         (din_31_24_eq_0),
473        .lead0_16b_2_hi         (lead0_31_16_2),
474        .lead0_16b_1_hi         (lead0_31_16_1),
475        .lead0_16b_0_hi         (lead0_31_16_0),
476        .din_15_0_eq_0          (din_15_0_eq_0),
477        .din_15_8_eq_0          (din_15_8_eq_0),
478        .lead0_16b_2_lo         (lead0_15_0_2),
479        .lead0_16b_1_lo         (lead0_15_0_1),
480        .lead0_16b_0_lo         (lead0_15_0_0),
481
482        .din_31_0_eq_0          (din_31_0_eq_0),
483        .lead0_32b_3            (lead0_31_0_3),
484        .lead0_32b_2            (lead0_31_0_2),
485        .lead0_32b_1            (lead0_31_0_1),
486        .lead0_32b_0            (lead0_31_0_0)
487);
488
489
490assign lead0_6= din_63_32_eq_0 && din_31_0_eq_0;
491
492assign lead0_5= (!lead0_6) && din_63_32_eq_0;
493
494assign lead0_4= ((!din_63_32_eq_0) && din_63_48_eq_0)
495                || (din_63_32_eq_0 && din_31_16_eq_0 && (!lead0_6));
496
497assign lead0_3= ((!din_63_32_eq_0) && lead0_63_32_3)
498                || (din_63_32_eq_0 && lead0_31_0_3 && (!lead0_6));
499
500assign lead0_2= ((!din_63_32_eq_0) && lead0_63_32_2)
501                || (din_63_32_eq_0 && lead0_31_0_2 && (!lead0_6));
502 
503assign lead0_1= ((!din_63_32_eq_0) && lead0_63_32_1)
504                || (din_63_32_eq_0 && lead0_31_0_1 && (!lead0_6));
505 
506assign lead0_0= ((!din_63_32_eq_0) && lead0_63_32_0)
507                || (din_63_32_eq_0 && lead0_31_0_0 && (!lead0_6));
508
509assign lead0[5:0]= {lead0_5, lead0_4, lead0_3, lead0_2, lead0_1,
510                lead0_0};
511
512
513endmodule
514
515
Note: See TracBrowser for help on using the repository browser.