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

Revision 6, 12.9 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_53b.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//      53 bit lead 0 counter.
24//
25///////////////////////////////////////////////////////////////////////////////
26
27module fpu_cnt_lead0_53b (
28        din,
29
30        lead0
31);
32
33
34input [52: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_52_49_eq_0;
40wire            din_52_51_eq_0;
41wire            lead0_52_49_0;
42wire            din_48_45_eq_0;
43wire            din_48_47_eq_0;
44wire            lead0_48_45_0;
45wire            din_44_41_eq_0;
46wire            din_44_43_eq_0;
47wire            lead0_44_41_0;
48wire            din_40_37_eq_0;
49wire            din_40_39_eq_0;
50wire            lead0_40_37_0;
51wire            din_36_33_eq_0;
52wire            din_36_35_eq_0;
53wire            lead0_36_33_0;
54wire            din_32_29_eq_0;
55wire            din_32_31_eq_0;
56wire            lead0_32_29_0;
57wire            din_28_25_eq_0;
58wire            din_28_27_eq_0;
59wire            lead0_28_25_0;
60wire            din_24_21_eq_0;
61wire            din_24_23_eq_0;
62wire            lead0_24_21_0;
63wire            din_20_17_eq_0;
64wire            din_20_19_eq_0;
65wire            lead0_20_17_0;
66wire            din_16_13_eq_0;
67wire            din_16_15_eq_0;
68wire            lead0_16_13_0;
69wire            din_12_9_eq_0;
70wire            din_12_11_eq_0;
71wire            lead0_12_9_0;
72wire            din_8_5_eq_0;
73wire            din_8_7_eq_0;
74wire            lead0_8_5_0;
75wire            din_4_1_eq_0;
76wire            din_4_3_eq_0;
77wire            lead0_4_1_0;
78wire            lead0_0_0;
79wire            din_52_45_eq_0;
80wire            lead0_52_45_1;
81wire            lead0_52_45_0;
82wire            din_44_37_eq_0;
83wire            lead0_44_37_1;
84wire            lead0_44_37_0;
85wire            din_36_29_eq_0;
86wire            lead0_36_29_1;
87wire            lead0_36_29_0;
88wire            din_28_21_eq_0;
89wire            lead0_28_21_1;
90wire            lead0_28_21_0;
91wire            din_20_13_eq_0;
92wire            lead0_20_13_1;
93wire            lead0_20_13_0;
94wire            din_12_5_eq_0;
95wire            lead0_12_5_1;
96wire            lead0_12_5_0;
97wire            lead0_4_0_1;
98wire            lead0_4_0_0;
99wire            din_52_37_eq_0;
100wire            lead0_52_37_2;
101wire            lead0_52_37_1;
102wire            lead0_52_37_0;
103wire            din_36_21_eq_0;
104wire            lead0_36_21_2;
105wire            lead0_36_21_1;
106wire            lead0_36_21_0;
107wire            din_20_5_eq_0;
108wire            lead0_20_5_2;
109wire            lead0_20_5_1;
110wire            lead0_20_5_0;
111wire            lead0_4_0_2;
112wire            din_52_21_eq_0;
113wire            lead0_52_21_3;
114wire            lead0_52_21_2;
115wire            lead0_52_21_1;
116wire            lead0_52_21_0;
117wire            lead0_20_0_3;
118wire            lead0_20_0_2;
119wire            lead0_20_0_1;
120wire            lead0_20_0_0;
121wire            lead0_5;
122wire            lead0_4;
123wire            lead0_3;
124wire            lead0_2;
125wire            lead0_1;
126wire            lead0_0;
127wire [5:0]      lead0;
128
129
130///////////////////////////////////////////////////////////////////////////////
131//
132//      Instantiations of lead 0 building blocks.
133//
134///////////////////////////////////////////////////////////////////////////////
135
136fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_52_49 (
137        .din                    (din[52:49]),
138
139        .din_3_0_eq_0           (din_52_49_eq_0),
140        .din_3_2_eq_0           (din_52_51_eq_0),
141        .lead0_4b_0             (lead0_52_49_0)
142);
143
144fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_48_45 (
145        .din                    (din[48:45]),
146
147        .din_3_0_eq_0           (din_48_45_eq_0),
148        .din_3_2_eq_0           (din_48_47_eq_0),
149        .lead0_4b_0             (lead0_48_45_0)
150);
151
152fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_44_41 (
153        .din                    (din[44:41]),
154
155        .din_3_0_eq_0           (din_44_41_eq_0),
156        .din_3_2_eq_0           (din_44_43_eq_0),
157        .lead0_4b_0             (lead0_44_41_0)
158);
159
160fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_40_37 (
161        .din                    (din[40:37]),
162
163        .din_3_0_eq_0           (din_40_37_eq_0),
164        .din_3_2_eq_0           (din_40_39_eq_0),
165        .lead0_4b_0             (lead0_40_37_0)
166);
167
168fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_36_33 (
169        .din                    (din[36:33]),
170
171        .din_3_0_eq_0           (din_36_33_eq_0),
172        .din_3_2_eq_0           (din_36_35_eq_0),
173        .lead0_4b_0             (lead0_36_33_0)
174);
175
176fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_32_29 (
177        .din                    (din[32:29]),
178
179        .din_3_0_eq_0           (din_32_29_eq_0),
180        .din_3_2_eq_0           (din_32_31_eq_0),
181        .lead0_4b_0             (lead0_32_29_0)
182);
183
184fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_28_25 (
185        .din                    (din[28:25]),
186
187        .din_3_0_eq_0           (din_28_25_eq_0),
188        .din_3_2_eq_0           (din_28_27_eq_0),
189        .lead0_4b_0             (lead0_28_25_0)
190);
191
192fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_24_21 (
193        .din                    (din[24:21]),
194
195        .din_3_0_eq_0           (din_24_21_eq_0),
196        .din_3_2_eq_0           (din_24_23_eq_0),
197        .lead0_4b_0             (lead0_24_21_0)
198);
199
200fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_20_17 (
201        .din                    (din[20:17]),
202
203        .din_3_0_eq_0           (din_20_17_eq_0),
204        .din_3_2_eq_0           (din_20_19_eq_0),
205        .lead0_4b_0             (lead0_20_17_0)
206);
207
208fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_16_13 (
209        .din                    (din[16:13]),
210
211        .din_3_0_eq_0           (din_16_13_eq_0),
212        .din_3_2_eq_0           (din_16_15_eq_0),
213        .lead0_4b_0             (lead0_16_13_0)
214);
215
216fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_12_9 (
217        .din                    (din[12:9]),
218
219        .din_3_0_eq_0           (din_12_9_eq_0),
220        .din_3_2_eq_0           (din_12_11_eq_0),
221        .lead0_4b_0             (lead0_12_9_0)
222);
223
224fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_8_5 (
225        .din                    (din[8:5]),
226
227        .din_3_0_eq_0           (din_8_5_eq_0),
228        .din_3_2_eq_0           (din_8_7_eq_0),
229        .lead0_4b_0             (lead0_8_5_0)
230);
231
232fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_4_1 (
233        .din                    (din[4:1]),
234
235        .din_3_0_eq_0           (din_4_1_eq_0),
236        .din_3_2_eq_0           (din_4_3_eq_0),
237        .lead0_4b_0             (lead0_4_1_0)
238);
239
240assign lead0_0_0= (!din[0]);
241
242
243fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_52_45 (
244        .din_7_4_eq_0           (din_52_49_eq_0),
245        .din_7_6_eq_0           (din_52_51_eq_0),
246        .lead0_4b_0_hi          (lead0_52_49_0),
247        .din_3_0_eq_0           (din_48_45_eq_0),
248        .din_3_2_eq_0           (din_48_47_eq_0),
249        .lead0_4b_0_lo          (lead0_48_45_0),
250
251        .din_7_0_eq_0           (din_52_45_eq_0),
252        .lead0_8b_1             (lead0_52_45_1),
253        .lead0_8b_0             (lead0_52_45_0)
254);
255
256fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_44_37 (
257        .din_7_4_eq_0           (din_44_41_eq_0),
258        .din_7_6_eq_0           (din_44_43_eq_0),
259        .lead0_4b_0_hi          (lead0_44_41_0),
260        .din_3_0_eq_0           (din_40_37_eq_0),
261        .din_3_2_eq_0           (din_40_39_eq_0),
262        .lead0_4b_0_lo          (lead0_40_37_0),
263
264        .din_7_0_eq_0           (din_44_37_eq_0),
265        .lead0_8b_1             (lead0_44_37_1),
266        .lead0_8b_0             (lead0_44_37_0)
267);
268
269fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_36_29 (
270        .din_7_4_eq_0           (din_36_33_eq_0),
271        .din_7_6_eq_0           (din_36_35_eq_0),
272        .lead0_4b_0_hi          (lead0_36_33_0),
273        .din_3_0_eq_0           (din_32_29_eq_0),
274        .din_3_2_eq_0           (din_32_31_eq_0),
275        .lead0_4b_0_lo          (lead0_32_29_0),
276
277        .din_7_0_eq_0           (din_36_29_eq_0),
278        .lead0_8b_1             (lead0_36_29_1),
279        .lead0_8b_0             (lead0_36_29_0)
280);
281
282fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_28_21 (
283        .din_7_4_eq_0           (din_28_25_eq_0),
284        .din_7_6_eq_0           (din_28_27_eq_0),
285        .lead0_4b_0_hi          (lead0_28_25_0),
286        .din_3_0_eq_0           (din_24_21_eq_0),
287        .din_3_2_eq_0           (din_24_23_eq_0),
288        .lead0_4b_0_lo          (lead0_24_21_0),
289
290        .din_7_0_eq_0           (din_28_21_eq_0),
291        .lead0_8b_1             (lead0_28_21_1),
292        .lead0_8b_0             (lead0_28_21_0)
293);
294
295fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_20_13 (
296        .din_7_4_eq_0           (din_20_17_eq_0),
297        .din_7_6_eq_0           (din_20_19_eq_0),
298        .lead0_4b_0_hi          (lead0_20_17_0),
299        .din_3_0_eq_0           (din_16_13_eq_0),
300        .din_3_2_eq_0           (din_16_15_eq_0),
301        .lead0_4b_0_lo          (lead0_16_13_0),
302
303        .din_7_0_eq_0           (din_20_13_eq_0),
304        .lead0_8b_1             (lead0_20_13_1),
305        .lead0_8b_0             (lead0_20_13_0)
306);
307
308fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_12_5 (
309        .din_7_4_eq_0           (din_12_9_eq_0),
310        .din_7_6_eq_0           (din_12_11_eq_0),
311        .lead0_4b_0_hi          (lead0_12_9_0),
312        .din_3_0_eq_0           (din_8_5_eq_0),
313        .din_3_2_eq_0           (din_8_7_eq_0),
314        .lead0_4b_0_lo          (lead0_8_5_0),
315
316        .din_7_0_eq_0           (din_12_5_eq_0),
317        .lead0_8b_1             (lead0_12_5_1),
318        .lead0_8b_0             (lead0_12_5_0)
319);
320
321assign lead0_4_0_1= (!din_4_1_eq_0) && din_4_3_eq_0;
322
323assign lead0_4_0_0= ((!din_4_1_eq_0) && lead0_4_1_0)
324                || (din_4_1_eq_0 && lead0_0_0);
325
326
327fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_52_37 (
328        .din_15_8_eq_0          (din_52_45_eq_0),
329        .din_15_12_eq_0         (din_52_49_eq_0),
330        .lead0_8b_1_hi          (lead0_52_45_1),
331        .lead0_8b_0_hi          (lead0_52_45_0),
332        .din_7_0_eq_0           (din_44_37_eq_0),
333        .din_7_4_eq_0           (din_44_41_eq_0),
334        .lead0_8b_1_lo          (lead0_44_37_1),
335        .lead0_8b_0_lo          (lead0_44_37_0),
336
337        .din_15_0_eq_0          (din_52_37_eq_0),
338        .lead0_16b_2            (lead0_52_37_2),
339        .lead0_16b_1            (lead0_52_37_1),
340        .lead0_16b_0            (lead0_52_37_0)
341);
342
343fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_36_21 (
344        .din_15_8_eq_0          (din_36_29_eq_0),
345        .din_15_12_eq_0         (din_36_33_eq_0),           
346        .lead0_8b_1_hi          (lead0_36_29_1),
347        .lead0_8b_0_hi          (lead0_36_29_0),
348        .din_7_0_eq_0           (din_28_21_eq_0),
349        .din_7_4_eq_0           (din_28_25_eq_0),
350        .lead0_8b_1_lo          (lead0_28_21_1),
351        .lead0_8b_0_lo          (lead0_28_21_0),
352
353        .din_15_0_eq_0          (din_36_21_eq_0),
354        .lead0_16b_2            (lead0_36_21_2),
355        .lead0_16b_1            (lead0_36_21_1),
356        .lead0_16b_0            (lead0_36_21_0)
357);
358
359fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_20_5 (
360        .din_15_8_eq_0          (din_20_13_eq_0),
361        .din_15_12_eq_0         (din_20_17_eq_0),           
362        .lead0_8b_1_hi          (lead0_20_13_1),
363        .lead0_8b_0_hi          (lead0_20_13_0),
364        .din_7_0_eq_0           (din_12_5_eq_0),
365        .din_7_4_eq_0           (din_12_9_eq_0),
366        .lead0_8b_1_lo          (lead0_12_5_1),
367        .lead0_8b_0_lo          (lead0_12_5_0),
368
369        .din_15_0_eq_0          (din_20_5_eq_0),
370        .lead0_16b_2            (lead0_20_5_2),
371        .lead0_16b_1            (lead0_20_5_1),
372        .lead0_16b_0            (lead0_20_5_0)
373);
374
375assign lead0_4_0_2= din_4_1_eq_0;
376
377
378fpu_cnt_lead0_lvl4 i_fpu_cnt_lead0_lvl4_52_21 (
379        .din_31_16_eq_0         (din_52_37_eq_0),
380        .din_31_24_eq_0         (din_52_45_eq_0),
381        .lead0_16b_2_hi         (lead0_52_37_2),
382        .lead0_16b_1_hi         (lead0_52_37_1),
383        .lead0_16b_0_hi         (lead0_52_37_0),
384        .din_15_0_eq_0          (din_36_21_eq_0),
385        .din_15_8_eq_0          (din_36_29_eq_0),
386        .lead0_16b_2_lo         (lead0_36_21_2),
387        .lead0_16b_1_lo         (lead0_36_21_1),
388        .lead0_16b_0_lo         (lead0_36_21_0),
389
390        .din_31_0_eq_0          (din_52_21_eq_0),
391        .lead0_32b_3            (lead0_52_21_3),
392        .lead0_32b_2            (lead0_52_21_2),
393        .lead0_32b_1            (lead0_52_21_1),
394        .lead0_32b_0            (lead0_52_21_0)
395);
396
397fpu_cnt_lead0_lvl4 i_fpu_cnt_lead0_lvl4_20_0 (
398        .din_31_16_eq_0         (din_20_5_eq_0),
399        .din_31_24_eq_0         (din_20_13_eq_0),
400        .lead0_16b_2_hi         (lead0_20_5_2),
401        .lead0_16b_1_hi         (lead0_20_5_1),
402        .lead0_16b_0_hi         (lead0_20_5_0),
403        .din_15_0_eq_0          (1'b0),     
404        .din_15_8_eq_0          (1'b0),
405        .lead0_16b_2_lo         (lead0_4_0_2),
406        .lead0_16b_1_lo         (lead0_4_0_1),
407        .lead0_16b_0_lo         (lead0_4_0_0),
408
409        .din_31_0_eq_0          (            ),
410        .lead0_32b_3            (lead0_20_0_3),
411        .lead0_32b_2            (lead0_20_0_2),
412        .lead0_32b_1            (lead0_20_0_1),
413        .lead0_32b_0            (lead0_20_0_0)
414);
415
416assign lead0_5= din_52_21_eq_0;
417
418assign lead0_4= ((!din_52_21_eq_0) && din_52_37_eq_0)
419                || (din_52_21_eq_0 && din_20_5_eq_0);
420
421assign lead0_3= ((!din_52_21_eq_0) && lead0_52_21_3)
422                || (din_52_21_eq_0 && lead0_20_0_3);
423
424assign lead0_2= ((!din_52_21_eq_0) && lead0_52_21_2)
425                || (din_52_21_eq_0 && lead0_20_0_2);
426
427assign lead0_1= ((!din_52_21_eq_0) && lead0_52_21_1)
428                || (din_52_21_eq_0 && lead0_20_0_1);
429
430assign lead0_0= ((!din_52_21_eq_0) && lead0_52_21_0)
431                || (din_52_21_eq_0 && lead0_20_0_0);
432
433assign lead0[5:0]= {lead0_5, lead0_4, lead0_3, lead0_2, lead0_1, lead0_0};
434
435
436endmodule
437
438
Note: See TracBrowser for help on using the repository browser.