Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / pcs_rx_disparity.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: pcs_rx_disparity.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35// @(#)pcs_rx_disparity.v 1.1G
36/**********************************************************************/
37/* Project Name : CASSINI */
38/* Module Name : PCS Running Disparity Calculator */
39/* Description : Calculates new running disparity based on */
40/* disparity for both most significant 6 bits and */
41/* least significant 4 bits. The running disparity */
42/* of the most significant 6 bits is called new_RD. */
43/* The final running disparity for all 10 bits is */
44/* called RD. */
45/* */
46/* Assumptions : none. */
47/* */
48/* Parent module : pcs_decoder.v */
49/* Child modules : none. */
50/* Author Name : Linda Chen */
51/* Date Created : 10/21/96 */
52/* */
53/* Copyright (c) 1994, Sun Microsystems, Inc. */
54/* Sun Proprietary and Confidential */
55/* */
56/* Modifications : none yet */
57/* Synthesis Notes : none yet */
58/**********************************************************************/
59
60module pcs_rx_disparity (data, RDreg, // inputs
61 newRD, RD); // outputs
62
63 input [9:0] data; // 8b10b encoded data
64 input RDreg; // current running disparity
65
66 output newRD, // mid character running disparity
67 RD; // final value for running disparity
68
69 wire noneof6, oneof6, twoof6, threeof6, fourof6, fiveof6, sixof6;
70 //no. of 1#s in data[9:4]
71 wire noneof4, oneof4, twoof4, threeof4, fourof4;
72 //no. of 1#s in data[3:0]
73
74 assign noneof4 = ~(data[0] | data[1] | data[2] | data[3]),
75 fourof4 = data[0] & data[1] & data[2] & data[3],
76 threeof4 = ((data[0]^data[1]) & (~(data[2]^data[3]) &
77 (data[2]&data[3]))) | ((data[2]^data[3]) &
78 (~(data[0]^data[1]) & (data[0]&data[1]))),
79 oneof4 = ((~data[0]^~data[1]) & (~(~data[2]^~data[3]) &
80 (~data[2]&~data[3]))) | ((~data[2]^~data[3]) &
81 (~(~data[0]^~data[1]) & (~data[0]&~data[1]))),
82 twoof4 = ((data[0]^data[1]) & (data[2]^data[3])) |
83 ((data[0]&data[1]) ^ (data[2]&data[3])),
84 noneof6 = ~(data[4] | data[5] | data[6] | data[7] |
85 data[8] | data[9]),
86 sixof6 = data[4] & data[5] & data[6] & data[7] & data[8] &
87 data[9],
88 fiveof6 = ( (((data[4]^data[5]) & (~(data[6]^data[7]) &
89 (data[6]&data[7]))) | ((data[6]^data[7]) &
90 (~(data[4]^data[5]) & (data[4]&data[5])))) &
91 (data[8] & data[9]) ) | ((data[4] & data[5] &
92 data[6] & data[7]) & (data[8] ^ data[9])),
93 oneof6 = ( (((~data[4]^~data[5]) & (~(~data[6]^~data[7]) &
94 (~data[6]&~data[7]))) | ((~data[6]^~data[7]) &
95 (~(~data[4]^~data[5]) & (~data[4]&~data[5]))))
96 & (~data[8] & ~data[9]) ) | ((~data[4] & ~data[5] &
97 ~data[6] & ~data[7]) & (~data[8] ^ ~data[9])),
98 fourof6 = ( (((data[4]^data[5]) & (data[6]^data[7])) |
99 ((data[4]&data[5]) ^ (data[6]&data[7]))) &
100 (data[8] & data[9]) ) | ( (((data[4]^data[5]) &
101 (~(data[6]^data[7]) & (data[6]&data[7]))) |
102 ((data[6]^data[7]) & (~(data[4]^data[5]) &
103 (data[4]&data[5])))) & (data[8] ^ data[9]) ) |
104 ( (data[4] & data[5] & data[6] & data[7]) &
105 (~(data[8]|data[9])) ),
106 twoof6 = ( (((~data[4]^~data[5]) & (~data[6]^~data[7])) |
107 ((~data[4]&~data[5]) ^ (~data[6]&~data[7]))) &
108 (~data[8] & ~data[9]) ) | ( (((~data[4]^~data[5]) &
109 (~(~data[6]^~data[7]) & (~data[6]&~data[7])))
110 | ((~data[6]^~data[7]) & (~(~data[4]^~data[5]) &
111 (~data[4]&~data[5])))) & (~data[8] ^ ~data[9]) ) |
112 ( (~data[4] & ~data[5] & ~data[6] & ~data[7]) &
113 (~(~data[8]|~data[9])) ),
114 threeof6 = ( (((~data[4]^~data[5]) & (~(~data[6]^~data[7]) &
115 (~data[6]&~data[7]))) | ((~data[6]^~data[7]) &
116 (~(~data[4]^~data[5]) & (~data[4]&~data[5])))) &
117 (data[8] & data[9]) ) | ( (((data[4]^data[5]) &
118 (data[6]^data[7])) |
119 ((data[4]&data[5]) ^ (data[6]&data[7]))) &
120 (data[8] ^ data[9]) ) | ( (((data[4]^data[5]) &
121 (~(data[6]^data[7]) & (data[6]&data[7])))
122 | ((data[6]^data[7]) & (~(data[4]^data[5]) &
123 (data[6]&data[7])))) & ( ~(data[8] | data[9])) ),
124 newRD = ((noneof6 | oneof6 | twoof6) |
125 (threeof6 & (data[9:4]==6'b111000))) ? 1'b0 :
126 ((fourof6 | fiveof6 | sixof6) | (threeof6 &
127 (data[9:4]==6'b000111))) ? 1'b1 : RDreg,
128 RD = ((noneof4 | oneof4) | (twoof4 &
129 (data[3:0]==4'b1100))) ? 1'b0 : ((threeof4 | fourof4)
130 | (twoof4 & (data[3:0]==4'b0011))) ? 1'b1 : newRD;
131
132endmodule