Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / pcs_tx_disparity.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: pcs_tx_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_tx_disparity.v 1.1G
36/**********************************************************************/
37/* Project Name : CASSINI */
38/* Module Name : PCS Tx Running Disparity Calculator */
39/* Description : Calculates new running disparity based on */
40/* disparity and incoming data for use by encoder. */
41/* */
42/* Assumptions : none. */
43/* */
44/* Parent module : pcs_decoder.v */
45/* Child modules : none. */
46/* Author Name : Linda Chen */
47/* Date Created : 10/21/96 */
48/* */
49/* Copyright (c) 1994, Sun Microsystems, Inc. */
50/* Sun Proprietary and Confidential */
51/* */
52/* Modifications : none yet */
53/* Synthesis Notes : none yet */
54/**********************************************************************/
55
56`include "pcs_define.h"
57
58module pcs_tx_disparity (reset_tx, txclk,special_char, tx_enc_sel,// inputs
59 data, RDreg,
60
61 RD); // outputs
62
63input reset_tx; // reset to initial RD to neg
64input txclk; // 125 MHz Tx clk
65input special_char; // special char indication
66input [3:0] tx_enc_sel; // encoder control
67input [7:0] data; // non-encoded data
68input RDreg; // running disparity calculated
69
70output RD; // running disparity final
71
72wire rst_reg; // delayed reset by one clock to init rundisp
73
74assign RD = rst_reg ? 1'b0 : rd_fn (special_char,tx_enc_sel,data,RDreg);
75
76REG #(1) r_rstreg( .din(reset_tx), .clk(txclk), .qout(rst_reg) );
77
78 function rd_fn;
79
80 input special_char;
81 input [3:0] tx_enc_sel;
82 input [7:0] data;
83 input RDreg;
84 if (!special_char)
85 case (data[7:0]) //synopsys parallel_case full_case
86
87 8'h00: rd_fn = RDreg;
88 8'h01: rd_fn = RDreg;
89 8'h02: rd_fn = RDreg;
90 8'h03: rd_fn = ~RDreg;
91
92 8'h04: rd_fn = RDreg;
93 8'h05: rd_fn = ~RDreg;
94 8'h06: rd_fn = ~RDreg;
95 8'h07: rd_fn = ~RDreg;
96
97 8'h08: rd_fn = RDreg;
98 8'h09: rd_fn = ~RDreg;
99 8'h0a: rd_fn = ~RDreg;
100 8'h0b: rd_fn = ~RDreg;
101
102 8'h0c: rd_fn = ~RDreg;
103 8'h0d: rd_fn = ~RDreg;
104 8'h0e: rd_fn = ~RDreg;
105 8'h0f: rd_fn = RDreg;
106
107 8'h10: rd_fn = RDreg;
108 8'h11: rd_fn = ~RDreg;
109 8'h12: rd_fn = ~RDreg;
110 8'h13: rd_fn = ~RDreg;
111
112 8'h14: rd_fn = ~RDreg;
113 8'h15: rd_fn = ~RDreg;
114 8'h16: rd_fn = ~RDreg;
115 8'h17: rd_fn = RDreg;
116
117 8'h18: rd_fn = RDreg;
118 8'h19: rd_fn = ~RDreg;
119 8'h1a: rd_fn = ~RDreg;
120 8'h1b: rd_fn = RDreg;
121
122 8'h1c: rd_fn = ~RDreg;
123 8'h1d: rd_fn = RDreg;
124 8'h1e: rd_fn = RDreg;
125 8'h1f: rd_fn = RDreg;
126
127 8'h20: rd_fn = ~RDreg;
128 8'h21: rd_fn = ~RDreg;
129 8'h22: rd_fn = ~RDreg;
130 8'h23: rd_fn = RDreg;
131
132 8'h24: rd_fn = ~RDreg;
133 8'h25: rd_fn = RDreg;
134 8'h26: rd_fn = RDreg;
135 8'h27: rd_fn = RDreg;
136
137 8'h28: rd_fn = ~RDreg;
138 8'h29: rd_fn = RDreg;
139 8'h2a: rd_fn = RDreg;
140 8'h2b: rd_fn = RDreg;
141
142 8'h2c: rd_fn = RDreg;
143 8'h2d: rd_fn = RDreg;
144 8'h2e: rd_fn = RDreg;
145 8'h2f: rd_fn = ~RDreg;
146
147 8'h30: rd_fn = ~RDreg;
148 8'h31: rd_fn = RDreg;
149 8'h32: rd_fn = RDreg;
150 8'h33: rd_fn = RDreg;
151
152 8'h34: rd_fn = RDreg;
153 8'h35: rd_fn = RDreg;
154 8'h36: rd_fn = RDreg;
155 8'h37: rd_fn = ~RDreg;
156
157 8'h38: rd_fn = ~RDreg;
158 8'h39: rd_fn = RDreg;
159 8'h3a: rd_fn = RDreg;
160 8'h3b: rd_fn = ~RDreg;
161
162 8'h3c: rd_fn = RDreg;
163 8'h3d: rd_fn = ~RDreg;
164 8'h3e: rd_fn = ~RDreg;
165 8'h3f: rd_fn = ~RDreg;
166
167 8'h40: rd_fn = ~RDreg;
168 8'h41: rd_fn = ~RDreg;
169 8'h42: rd_fn = ~RDreg;
170 8'h43: rd_fn = RDreg;
171
172 8'h44: rd_fn = ~RDreg;
173 8'h45: rd_fn = RDreg;
174 8'h46: rd_fn = RDreg;
175 8'h47: rd_fn = RDreg;
176
177 8'h48: rd_fn = ~RDreg;
178 8'h49: rd_fn = RDreg;
179 8'h4a: rd_fn = RDreg;
180 8'h4b: rd_fn = RDreg;
181
182 8'h4c: rd_fn = RDreg;
183 8'h4d: rd_fn = RDreg;
184 8'h4e: rd_fn = RDreg;
185 8'h4f: rd_fn = ~RDreg;
186
187 8'h50: rd_fn = ~RDreg;
188 8'h51: rd_fn = RDreg;
189 8'h52: rd_fn = RDreg;
190 8'h53: rd_fn = RDreg;
191
192 8'h54: rd_fn = RDreg;
193 8'h55: rd_fn = RDreg;
194 8'h56: rd_fn = RDreg;
195 8'h57: rd_fn = ~RDreg;
196
197 8'h58: rd_fn = ~RDreg;
198 8'h59: rd_fn = RDreg;
199 8'h5a: rd_fn = RDreg;
200 8'h5b: rd_fn = ~RDreg;
201
202 8'h5c: rd_fn = RDreg;
203 8'h5d: rd_fn = ~RDreg;
204 8'h5e: rd_fn = ~RDreg;
205 8'h5f: rd_fn = ~RDreg;
206
207 8'h60: rd_fn = ~RDreg;
208 8'h61: rd_fn = ~RDreg;
209 8'h62: rd_fn = ~RDreg;
210 8'h63: rd_fn = RDreg;
211
212 8'h64: rd_fn = ~RDreg;
213 8'h65: rd_fn = RDreg;
214 8'h66: rd_fn = RDreg;
215 8'h67: rd_fn = RDreg;
216
217 8'h68: rd_fn = ~RDreg;
218 8'h69: rd_fn = RDreg;
219 8'h6a: rd_fn = RDreg;
220 8'h6b: rd_fn = RDreg;
221
222 8'h6c: rd_fn = RDreg;
223 8'h6d: rd_fn = RDreg;
224 8'h6e: rd_fn = RDreg;
225 8'h6f: rd_fn = ~RDreg;
226
227 8'h70: rd_fn = ~RDreg;
228 8'h71: rd_fn = RDreg;
229 8'h72: rd_fn = RDreg;
230 8'h73: rd_fn = RDreg;
231
232 8'h74: rd_fn = RDreg;
233 8'h75: rd_fn = RDreg;
234 8'h76: rd_fn = RDreg;
235 8'h77: rd_fn = ~RDreg;
236
237 8'h78: rd_fn = ~RDreg;
238 8'h79: rd_fn = RDreg;
239 8'h7a: rd_fn = RDreg;
240 8'h7b: rd_fn = ~RDreg;
241
242 8'h7c: rd_fn = RDreg;
243 8'h7d: rd_fn = ~RDreg;
244 8'h7e: rd_fn = ~RDreg;
245 8'h7f: rd_fn = ~RDreg;
246
247 8'h80: rd_fn = RDreg;
248 8'h81: rd_fn = RDreg;
249 8'h82: rd_fn = RDreg;
250 8'h83: rd_fn = ~RDreg;
251
252 8'h84: rd_fn = RDreg;
253 8'h85: rd_fn = ~RDreg;
254 8'h86: rd_fn = ~RDreg;
255 8'h87: rd_fn = ~RDreg;
256
257 8'h88: rd_fn = RDreg;
258 8'h89: rd_fn = ~RDreg;
259 8'h8a: rd_fn = ~RDreg;
260 8'h8b: rd_fn = ~RDreg;
261
262 8'h8c: rd_fn = ~RDreg;
263 8'h8d: rd_fn = ~RDreg;
264 8'h8e: rd_fn = ~RDreg;
265 8'h8f: rd_fn = RDreg;
266
267 8'h90: rd_fn = RDreg;
268 8'h91: rd_fn = ~RDreg;
269 8'h92: rd_fn = ~RDreg;
270 8'h93: rd_fn = ~RDreg;
271
272 8'h94: rd_fn = ~RDreg;
273 8'h95: rd_fn = ~RDreg;
274 8'h96: rd_fn = ~RDreg;
275 8'h97: rd_fn = RDreg;
276
277 8'h98: rd_fn = RDreg;
278 8'h99: rd_fn = ~RDreg;
279 8'h9a: rd_fn = ~RDreg;
280 8'h9b: rd_fn = RDreg;
281
282 8'h9c: rd_fn = ~RDreg;
283 8'h9d: rd_fn = RDreg;
284 8'h9e: rd_fn = RDreg;
285 8'h9f: rd_fn = RDreg;
286
287 8'ha0: rd_fn = ~RDreg;
288 8'ha1: rd_fn = ~RDreg;
289 8'ha2: rd_fn = ~RDreg;
290 8'ha3: rd_fn = RDreg;
291
292 8'ha4: rd_fn = ~RDreg;
293 8'ha5: rd_fn = RDreg;
294 8'ha6: rd_fn = RDreg;
295 8'ha7: rd_fn = RDreg;
296
297 8'ha8: rd_fn = ~RDreg;
298 8'ha9: rd_fn = RDreg;
299 8'haa: rd_fn = RDreg;
300 8'hab: rd_fn = RDreg;
301
302 8'hac: rd_fn = RDreg;
303 8'had: rd_fn = RDreg;
304 8'hae: rd_fn = RDreg;
305 8'haf: rd_fn = ~RDreg;
306
307 8'hb0: rd_fn = ~RDreg;
308 8'hb1: rd_fn = RDreg;
309 8'hb2: rd_fn = RDreg;
310 8'hb3: rd_fn = RDreg;
311
312 8'hb4: rd_fn = RDreg;
313 8'hb5: rd_fn = RDreg;
314 8'hb6: rd_fn = RDreg;
315 8'hb7: rd_fn = ~RDreg;
316
317 8'hb8: rd_fn = ~RDreg;
318 8'hb9: rd_fn = RDreg;
319 8'hba: rd_fn = RDreg;
320 8'hbb: rd_fn = ~RDreg;
321
322 8'hbc: rd_fn = RDreg;
323 8'hbd: rd_fn = ~RDreg;
324 8'hbe: rd_fn = ~RDreg;
325 8'hbf: rd_fn = ~RDreg;
326
327 8'hc0: rd_fn = ~RDreg;
328 8'hc1: rd_fn = ~RDreg;
329 8'hc2: rd_fn = ~RDreg;
330 8'hc3: rd_fn = RDreg;
331
332 8'hc4: rd_fn = ~RDreg;
333 8'hc5: rd_fn = RDreg;
334 8'hc6: rd_fn = RDreg;
335 8'hc7: rd_fn = RDreg;
336
337 8'hc8: rd_fn = ~RDreg;
338 8'hc9: rd_fn = RDreg;
339 8'hca: rd_fn = RDreg;
340 8'hcb: rd_fn = RDreg;
341
342 8'hcc: rd_fn = RDreg;
343 8'hcd: rd_fn = RDreg;
344 8'hce: rd_fn = RDreg;
345 8'hcf: rd_fn = ~RDreg;
346
347 8'hd0: rd_fn = ~RDreg;
348 8'hd1: rd_fn = RDreg;
349 8'hd2: rd_fn = RDreg;
350 8'hd3: rd_fn = RDreg;
351
352 8'hd4: rd_fn = RDreg;
353 8'hd5: rd_fn = RDreg;
354 8'hd6: rd_fn = RDreg;
355 8'hd7: rd_fn = ~RDreg;
356
357 8'hd8: rd_fn = ~RDreg;
358 8'hd9: rd_fn = RDreg;
359 8'hda: rd_fn = RDreg;
360 8'hdb: rd_fn = ~RDreg;
361
362 8'hdc: rd_fn = RDreg;
363 8'hdd: rd_fn = ~RDreg;
364 8'hde: rd_fn = ~RDreg;
365 8'hdf: rd_fn = ~RDreg;
366
367 8'he0: rd_fn = RDreg;
368 8'he1: rd_fn = RDreg;
369 8'he2: rd_fn = RDreg;
370 8'he3: rd_fn = ~RDreg;
371
372 8'he4: rd_fn = RDreg;
373 8'he5: rd_fn = ~RDreg;
374 8'he6: rd_fn = ~RDreg;
375 8'he7: rd_fn = ~RDreg;
376
377 8'he8: rd_fn = RDreg;
378 8'he9: rd_fn = ~RDreg;
379 8'hea: rd_fn = ~RDreg;
380 8'heb: rd_fn = ~RDreg;
381
382 8'hec: rd_fn = ~RDreg;
383 8'hed: rd_fn = ~RDreg;
384 8'hee: rd_fn = ~RDreg;
385 8'hef: rd_fn = RDreg;
386
387 8'hf0: rd_fn = RDreg;
388 8'hf1: rd_fn = ~RDreg;
389 8'hf2: rd_fn = ~RDreg;
390 8'hf3: rd_fn = ~RDreg;
391
392 8'hf4: rd_fn = ~RDreg;
393 8'hf5: rd_fn = ~RDreg;
394 8'hf6: rd_fn = ~RDreg;
395 8'hf7: rd_fn = RDreg;
396
397 8'hf8: rd_fn = RDreg;
398 8'hf9: rd_fn = ~RDreg;
399 8'hfa: rd_fn = ~RDreg;
400 8'hfb: rd_fn = RDreg;
401
402 8'hfc: rd_fn = ~RDreg;
403 8'hfd: rd_fn = RDreg;
404 8'hfe: rd_fn = RDreg;
405 8'hff: rd_fn = RDreg;
406
407 endcase
408
409 else
410 case (tx_enc_sel) // synopsys parallel_case full_case
411 `PCS_ENC_K285 : // 4'h0 - K28.5
412 rd_fn = ~RDreg;
413 `PCS_ENC_IDLE2 : // 4'h1 - D16.2
414 rd_fn = ~RDreg;
415 `PCS_ENC_SOP : // 4'h2 - K27.7
416 rd_fn = RDreg;
417 `PCS_ENC_T_CHAR : // 4'h4 - K29.7
418 rd_fn = RDreg;
419 `PCS_ENC_R_CHAR : // 4'h5 - K23.7
420 rd_fn = RDreg;
421 `PCS_ENC_IDLE1 : // 4'h6 - D5.6
422 rd_fn = RDreg;
423 `PCS_ENC_H_CHAR : // 4'h7 - K30.7
424 rd_fn = RDreg;
425 `PCS_ENC_LINK_CONFA : // 4'h8 - D21.5
426 rd_fn = RDreg;
427 `PCS_ENC_LINK_CONFB : // 4'h9 - D2.2
428 rd_fn = ~RDreg;
429 endcase
430
431 endfunction
432
433endmodule