Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: fbdimm_sb_fsr.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 | module fbdimm_sb_fsr(reset, | |
36 | ps_in, | |
37 | ps_in_bar, | |
38 | ps0_out, | |
39 | ps0_out_bar, | |
40 | ps1_out, | |
41 | ps1_out_bar, | |
42 | ps2_out, | |
43 | ps2_out_bar, | |
44 | ps3_out, | |
45 | ps4_out, | |
46 | ps5_out, | |
47 | ps6_out, | |
48 | ps7_out, | |
49 | ps8_out, | |
50 | ps9_out, | |
51 | ps10_out, | |
52 | ps11_out, | |
53 | link_clk, | |
54 | sb_decode_clk, | |
55 | dtm_tr_complete, | |
56 | nop_frame_detected, | |
57 | dtm_enabled_out, | |
58 | frm_begin, | |
59 | frm_begin_nb, | |
60 | frm_boundary_nb, | |
61 | init_seq_started, | |
62 | ref_clk); | |
63 | ||
64 | input reset; | |
65 | input [9:0] ps_in,ps_in_bar; | |
66 | output [9:0] ps0_out,ps0_out_bar; | |
67 | output [9:0] ps1_out,ps1_out_bar; | |
68 | output [9:0] ps2_out,ps2_out_bar; | |
69 | output [9:0] ps3_out; | |
70 | output [9:0] ps4_out; | |
71 | output [9:0] ps5_out; | |
72 | output [9:0] ps6_out; | |
73 | output [9:0] ps7_out; | |
74 | output [9:0] ps8_out; | |
75 | output [9:0] ps9_out; | |
76 | output [9:0] ps10_out; | |
77 | output [9:0] ps11_out; | |
78 | output init_seq_started; | |
79 | output frm_boundary_nb; | |
80 | output frm_begin_nb; | |
81 | output nop_frame_detected; | |
82 | output dtm_tr_complete; | |
83 | output frm_begin; | |
84 | input link_clk; | |
85 | output ref_clk; | |
86 | output sb_decode_clk; | |
87 | output dtm_enabled_out; | |
88 | ||
89 | reg [3:0] fsr_count; | |
90 | reg [9:0] ps0_out_reg,ps0_out_bar_reg; | |
91 | reg [9:0] ps1_out_reg,ps1_out_bar_reg; | |
92 | reg [9:0] ps2_out_reg,ps2_out_bar_reg; | |
93 | reg [9:0] ps3_out_reg; | |
94 | reg [9:0] ps4_out_reg; | |
95 | reg [9:0] ps5_out_reg; | |
96 | reg [9:0] ps6_out_reg; | |
97 | reg [9:0] ps7_out_reg; | |
98 | reg [9:0] ps8_out_reg; | |
99 | reg [9:0] ps9_out_reg; | |
100 | reg [9:0] ps10_out_reg; | |
101 | reg [9:0] ps11_out_reg; | |
102 | wire [9:0] ps_fsr_in,ps_fsr_in_bar; | |
103 | wire [9:0] ps_fsr_dtm_in,ps_fsr_dtm_in_bar; | |
104 | ||
105 | assign ps0_out=ps0_out_reg; | |
106 | assign ps0_out_bar=ps0_out_bar_reg; | |
107 | assign ps1_out_bar=ps1_out_bar_reg; | |
108 | assign ps2_out_bar=ps2_out_bar_reg; | |
109 | assign ps1_out=ps1_out_reg; | |
110 | assign ps2_out=ps2_out_reg; | |
111 | assign ps3_out=ps3_out_reg; | |
112 | assign ps4_out=ps4_out_reg; | |
113 | assign ps5_out=ps5_out_reg; | |
114 | assign ps6_out=ps6_out_reg; | |
115 | assign ps7_out=ps7_out_reg; | |
116 | assign ps8_out=ps8_out_reg; | |
117 | assign ps9_out=ps9_out_reg; | |
118 | assign ps10_out=ps10_out_reg; | |
119 | assign ps11_out=ps11_out_reg; | |
120 | ||
121 | reg [11:0] reg0_dtm,reg1_dtm,reg2_dtm; | |
122 | ||
123 | `ifdef AXIS_FBDIMM_NO_FSR | |
124 | wire [11:0] reg0,reg0_b; | |
125 | wire [11:0] reg1,reg1_b; | |
126 | wire [11:0] reg2,reg2_b; | |
127 | wire [11:0] reg3,reg3_b; | |
128 | wire [11:0] reg4,reg4_b; | |
129 | wire [11:0] reg5,reg5_b; | |
130 | wire [11:0] reg6,reg6_b; | |
131 | wire [11:0] reg7,reg7_b; | |
132 | wire [11:0] reg8,reg8_b; | |
133 | wire [11:0] reg9,reg9_b; | |
134 | `else | |
135 | reg [11:0] reg0,reg0_b; | |
136 | reg [11:0] reg1,reg1_b; | |
137 | reg [11:0] reg2,reg2_b; | |
138 | reg [11:0] reg3,reg3_b; | |
139 | reg [11:0] reg4,reg4_b; | |
140 | reg [11:0] reg5,reg5_b; | |
141 | reg [11:0] reg6,reg6_b; | |
142 | reg [11:0] reg7,reg7_b; | |
143 | reg [11:0] reg8,reg8_b; | |
144 | reg [11:0] reg9,reg9_b; | |
145 | `endif | |
146 | ||
147 | reg header_detected; | |
148 | reg header_detected_dtm; | |
149 | reg dtm_seq_host_started; | |
150 | reg calibrate_detected; | |
151 | reg [3:0] prev_counter,fsr_counter,prev_counter_dtm,lock_counter,lock_counter_dtm; | |
152 | reg [3:0] prev_counter2,fsr_counter2,lock_counter2; | |
153 | reg [3:0] prev_counter2_dtm,lock_counter2_dtm; | |
154 | reg sequence_start; | |
155 | reg sequence_start_dtm; | |
156 | reg bypass_init; | |
157 | wire frm_boundary; | |
158 | wire frm_boundary_dtm; | |
159 | wire frm_begin_dtm; | |
160 | wire frm_begin_nb; | |
161 | ||
162 | assign ref_clk = !sequence_start ? link_clk : frm_boundary; | |
163 | assign init_seq_started=sequence_start | calibrate_detected; | |
164 | `ifdef DTM_ENABLED | |
165 | assign frm_boundary_nb = ( fsr_counter == lock_counter ); | |
166 | `else | |
167 | assign frm_boundary_nb = ref_clk; | |
168 | `endif | |
169 | ||
170 | `ifdef AXIS_FBDIMM_NO_FSR | |
171 | assign sb_decode_clk = link_clk; | |
172 | `else | |
173 | assign sb_decode_clk = | |
174 | (lock_counter == 4'h1 ) ? ( fsr_counter == 4'hc ) | ( fsr_counter == 4'hb ) | ( fsr_counter == 4'h8 ) | ( fsr_counter == 4'h7 ) | ( fsr_counter == 4'h4 ) | ( fsr_counter == 4'h3 ) : | |
175 | (lock_counter == 4'h2 ) ? ( fsr_counter == 4'h1 ) | ( fsr_counter == 4'hc ) | ( fsr_counter == 4'h9 ) | ( fsr_counter == 4'h8 ) | ( fsr_counter == 4'h5 ) | ( fsr_counter == 4'h4 ) : | |
176 | (lock_counter == 4'h3 ) ? ( fsr_counter == 4'h2 ) | ( fsr_counter == 4'h1 ) | ( fsr_counter == 4'ha ) | ( fsr_counter == 4'h9 ) | ( fsr_counter == 4'h6 ) | ( fsr_counter == 4'h5 ) : | |
177 | (lock_counter == 4'h4 ) ? ( fsr_counter == 4'h3 ) | ( fsr_counter == 4'h2 ) | ( fsr_counter == 4'hb ) | ( fsr_counter == 4'ha ) | ( fsr_counter == 4'h7 ) | ( fsr_counter == 4'h6 ) : | |
178 | (lock_counter == 4'h5 ) ? ( fsr_counter == 4'h4 ) | ( fsr_counter == 4'h3 ) | ( fsr_counter == 4'hc ) | ( fsr_counter == 4'hb ) | ( fsr_counter == 4'h8 ) | ( fsr_counter == 4'h7 ) : | |
179 | (lock_counter == 4'h6 ) ? ( fsr_counter == 4'h5 ) | ( fsr_counter == 4'h4 ) | ( fsr_counter == 4'h1 ) | ( fsr_counter == 4'hc ) | ( fsr_counter == 4'h9 ) | ( fsr_counter == 4'h8 ) : | |
180 | (lock_counter == 4'h7 ) ? ( fsr_counter == 4'h6 ) | ( fsr_counter == 4'h5 ) | ( fsr_counter == 4'h2 ) | ( fsr_counter == 4'h1 ) | ( fsr_counter == 4'ha ) | ( fsr_counter == 4'h9 ) : | |
181 | (lock_counter == 4'h8 ) ? ( fsr_counter == 4'h7 ) | ( fsr_counter == 4'h6 ) | ( fsr_counter == 4'h3 ) | ( fsr_counter == 4'h2 ) | ( fsr_counter == 4'hb ) | ( fsr_counter == 4'ha ) : | |
182 | (lock_counter == 4'h9 ) ? ( fsr_counter == 4'h8 ) | ( fsr_counter == 4'h7 ) | ( fsr_counter == 4'h4 ) | ( fsr_counter == 4'h3 ) | ( fsr_counter == 4'hc ) | ( fsr_counter == 4'hb ) : | |
183 | (lock_counter == 4'ha ) ? ( fsr_counter == 4'h9 ) | ( fsr_counter == 4'h8 ) | ( fsr_counter == 4'h5 ) | ( fsr_counter == 4'h4 ) | ( fsr_counter == 4'h1 ) | ( fsr_counter == 4'hc ) : | |
184 | (lock_counter == 4'hb ) ? ( fsr_counter == 4'ha ) | ( fsr_counter == 4'h9 ) | ( fsr_counter == 4'h6 ) | ( fsr_counter == 4'h5 ) | ( fsr_counter == 4'h2 ) | ( fsr_counter == 4'h1 ) : | |
185 | (lock_counter == 4'hc ) ? ( fsr_counter == 4'hb ) | ( fsr_counter == 4'ha ) | ( fsr_counter == 4'h7 ) | ( fsr_counter == 4'h6 ) | ( fsr_counter == 4'h3 ) | ( fsr_counter == 4'h2 ) : | |
186 | 1'h0; | |
187 | ||
188 | `endif | |
189 | ||
190 | ||
191 | reg dtm_enabled; | |
192 | assign dtm_enabled_out = dtm_enabled; | |
193 | ||
194 | initial begin | |
195 | dtm_enabled=0; | |
196 | end | |
197 | ||
198 | `ifdef AXIS_FBDIMM_HW | |
199 | `else | |
200 | ||
201 | `ifdef FBDIMM_BUG_107438 | |
202 | always@(posedge link_clk) | |
203 | dtm_enabled <= tb_top.start_mcu_dtm_training; | |
204 | //dtm_enabled <= tb_top.cpu.mcu0.ccu_serdes_dtm; // & ~(tb_top.cpu.mcu0.drif.drif_init); | |
205 | `endif | |
206 | ||
207 | // DTM training module | |
208 | dtm_training dtm_ts0_tr(.link_clk (link_clk), | |
209 | .ps (ps_in), | |
210 | .ps_bar (ps_in_bar), | |
211 | .dtm_ps (ps_fsr_dtm_in), | |
212 | .rst (dtm_rst), | |
213 | .dtm_ps_bar (ps_fsr_dtm_in_bar), | |
214 | .dtm_enabled (dtm_enabled), | |
215 | .tr_complete (dtm_tr_complete)); | |
216 | ||
217 | `endif | |
218 | ||
219 | assign ps_fsr_in = ( dtm_enabled & !dtm_tr_complete) ? ps_fsr_dtm_in : ps_in; | |
220 | assign ps_fsr_in_bar = ( dtm_enabled & !dtm_tr_complete) ? ps_fsr_dtm_in_bar : ps_in_bar; | |
221 | //assign ps_fsr_in = ps_in; | |
222 | //assign ps_fsr_in_bar = ps_in_bar; | |
223 | ||
224 | ||
225 | reg [4:0] nop_cnt; | |
226 | reg nop_frm_detected_reg; | |
227 | ||
228 | always@(posedge header_detected_dtm ) if ( sequence_start) | |
229 | dtm_seq_host_started <= 1; | |
230 | else | |
231 | dtm_seq_host_started <= 0; | |
232 | ||
233 | always@(posedge link_clk) if ( dtm_seq_host_started ) | |
234 | begin | |
235 | if ( ps_in == 10'h0) | |
236 | nop_cnt <= nop_cnt + 1; | |
237 | else | |
238 | nop_cnt <= 0; | |
239 | ||
240 | if ( nop_cnt == 10'd11 ) | |
241 | nop_frm_detected_reg<=1; | |
242 | ||
243 | end | |
244 | else begin | |
245 | nop_cnt<=0; | |
246 | nop_frm_detected_reg<=0; | |
247 | end | |
248 | ||
249 | assign nop_frame_detected = nop_frm_detected_reg; | |
250 | ||
251 | ||
252 | ||
253 | `ifdef AXIS_FBDIMM_NO_FSR | |
254 | always@(posedge link_clk) | |
255 | begin | |
256 | if ( fsr_counter == 4'h1 ) | |
257 | fsr_counter = 4'h3; | |
258 | else | |
259 | fsr_counter = fsr_counter - 1; | |
260 | ||
261 | if ( fsr_counter2 == 4'h1 ) | |
262 | fsr_counter2 = 4'h2; | |
263 | else | |
264 | fsr_counter2 = fsr_counter2 - 1; | |
265 | ||
266 | end | |
267 | ||
268 | `else | |
269 | always@(posedge link_clk) | |
270 | begin | |
271 | if ( fsr_counter == 4'h1 ) | |
272 | fsr_counter = 4'hc; | |
273 | else | |
274 | fsr_counter = fsr_counter - 1; | |
275 | ||
276 | if ( fsr_counter2 == 4'h1 ) | |
277 | fsr_counter2 = 4'h6; | |
278 | else | |
279 | fsr_counter2 = fsr_counter2 - 1; | |
280 | ||
281 | end | |
282 | `endif | |
283 | ||
284 | initial begin | |
285 | ||
286 | dtm_seq_host_started=0; | |
287 | ||
288 | if ( $test$plusargs("bypass_init")) begin | |
289 | sequence_start = 1; | |
290 | `ifdef STINGRAY | |
291 | lock_counter=4'h7; | |
292 | `else | |
293 | lock_counter=4'h1; | |
294 | `endif | |
295 | ||
296 | bypass_init = 1; | |
297 | end else begin | |
298 | sequence_start = 0; | |
299 | sequence_start_dtm = 0; | |
300 | // lock_counter=4'h1; | |
301 | bypass_init = 0; | |
302 | end | |
303 | ||
304 | end | |
305 | ||
306 | //always@(posedge link_clk ) | |
307 | `ifdef AXIS_FBDIMM_NO_FSR | |
308 | always@(negedge ref_clk ) | |
309 | if ( reg0 == reg0_b ) | |
310 | sequence_start <= 0; | |
311 | else if (header_detected) | |
312 | sequence_start <= 1; | |
313 | ||
314 | ||
315 | `else | |
316 | always@(negedge link_clk ) | |
317 | if ( ps_fsr_in == ps_fsr_in_bar ) | |
318 | sequence_start <= 0; | |
319 | else if (header_detected) | |
320 | sequence_start <= 1; | |
321 | ||
322 | always@(negedge link_clk ) | |
323 | if ( ps_fsr_in == ps_fsr_in_bar ) | |
324 | sequence_start_dtm <= 0; | |
325 | else if (header_detected_dtm) | |
326 | sequence_start_dtm <= 1; | |
327 | ||
328 | `endif | |
329 | ||
330 | ||
331 | assign frm_boundary_dtm = ( fsr_counter == lock_counter_dtm ); | |
332 | assign frm_begin_nb = frm_begin; | |
333 | ||
334 | assign frm_boundary = (dtm_enabled & dtm_tr_complete ) ? frm_boundary_dtm : ( fsr_counter == lock_counter ); | |
335 | ||
336 | //assign frm_boundary = ( fsr_counter == lock_counter ); | |
337 | ||
338 | `ifdef DTM_ENABLED | |
339 | assign frm_begin = ( lock_counter2_dtm == 4'h6 ) ? ( fsr_counter2 == 4'h1) : ( fsr_counter2 == lock_counter2_dtm+1 ); | |
340 | `else | |
341 | assign frm_begin = ( fsr_counter2 == lock_counter2 ); | |
342 | `endif | |
343 | ||
344 | ||
345 | always@(negedge link_clk) if ( ~bypass_init ) | |
346 | begin | |
347 | if (header_detected ) begin | |
348 | lock_counter2 <= prev_counter2; | |
349 | lock_counter <= prev_counter; | |
350 | end | |
351 | else begin | |
352 | prev_counter <= fsr_counter; | |
353 | prev_counter2 <= fsr_counter2; | |
354 | end | |
355 | ||
356 | if ( header_detected_dtm ) begin | |
357 | lock_counter2_dtm <= prev_counter2_dtm; | |
358 | lock_counter_dtm <= prev_counter_dtm; | |
359 | end | |
360 | else begin | |
361 | prev_counter2_dtm <= fsr_counter2; | |
362 | prev_counter_dtm <= fsr_counter; | |
363 | end | |
364 | ||
365 | ||
366 | `ifdef STINGRAY | |
367 | if ( (reg0 == 12'hfff) && | |
368 | (reg1 == 12'hfff) && | |
369 | (reg2 == 12'hfff) && !calibrate_detected) | |
370 | begin | |
371 | // header_detected <= 1; | |
372 | lock_counter2 <= prev_counter2; | |
373 | lock_counter <= prev_counter; | |
374 | calibrate_detected <= 1; | |
375 | end | |
376 | `endif | |
377 | ||
378 | end | |
379 | ||
380 | initial calibrate_detected=0; | |
381 | wire sb_2of3_ok; | |
382 | ||
383 | voting_logic test_sb_lane (.a ( reg0 == 12'hbfe ), | |
384 | .b ( reg1 == 12'hbfe ), | |
385 | .c ( reg2 == 12'hbfe ), | |
386 | .out ( sb_2of3_ok )); | |
387 | voting_logic test_sb_lane_dtm (.a ( reg0_dtm == 12'hbfe ), | |
388 | .b ( reg1_dtm == 12'hbfe ), | |
389 | .c ( reg2_dtm == 12'hbfe ), | |
390 | .out ( sb_2of3_ok_dtm )); | |
391 | ||
392 | ||
393 | //always@(posedge link_clk) | |
394 | always@(negedge link_clk) if ( ~sequence_start_dtm ) | |
395 | begin | |
396 | if ( sb_2of3_ok_dtm ) | |
397 | header_detected_dtm <= 1; | |
398 | else | |
399 | header_detected_dtm <= 0; | |
400 | end | |
401 | ||
402 | always@(posedge link_clk) if ( ~bypass_init & ~sequence_start) | |
403 | begin | |
404 | if ( sb_2of3_ok ) | |
405 | header_detected <= 1; | |
406 | else | |
407 | header_detected <= 0; | |
408 | ||
409 | ||
410 | ||
411 | end | |
412 | ||
413 | initial begin | |
414 | lock_counter = 4'h0; | |
415 | lock_counter_dtm = 4'h0; | |
416 | fsr_counter=4'h7; | |
417 | fsr_counter2=4'hc; | |
418 | header_detected=1'b0; | |
419 | sequence_start=1'b0; | |
420 | sequence_start_dtm=1'b0; | |
421 | reg0_dtm=0; | |
422 | reg1_dtm=0; | |
423 | reg2_dtm=0; | |
424 | end | |
425 | ||
426 | `ifdef AXIS_FBDIMM_NO_FSR | |
427 | //`include "fbdimm_fsr_xmr.vh" | |
428 | `else | |
429 | always@(negedge link_clk) | |
430 | begin | |
431 | ||
432 | reg0_dtm <= { ps_in[0], reg0_dtm[11:1]}; | |
433 | reg1_dtm <= { ps_in[1], reg1_dtm[11:1]}; | |
434 | reg2_dtm <= { ps_in[2], reg2_dtm[11:1]}; | |
435 | ||
436 | reg0[11:0] <= { ps_fsr_in[0], reg0[11:1]}; | |
437 | reg1[11:0] <= { ps_fsr_in[1], reg1[11:1]}; | |
438 | reg2[11:0] <= { ps_fsr_in[2], reg2[11:1]}; | |
439 | reg3[11:0] <= { ps_fsr_in[3], reg3[11:1]}; | |
440 | reg4[11:0] <= { ps_fsr_in[4], reg4[11:1]}; | |
441 | reg5[11:0] <= { ps_fsr_in[5], reg5[11:1]}; | |
442 | reg6[11:0] <= { ps_fsr_in[6], reg6[11:1]}; | |
443 | reg7[11:0] <= { ps_fsr_in[7], reg7[11:1]}; | |
444 | reg8[11:0] <= { ps_fsr_in[8], reg8[11:1]}; | |
445 | reg9[11:0] <= { ps_fsr_in[9], reg9[11:1]}; | |
446 | ||
447 | reg0_b[11:0] <= { ps_fsr_in_bar[0], reg0_b[11:1]}; | |
448 | reg1_b[11:0] <= { ps_fsr_in_bar[1], reg1_b[11:1]}; | |
449 | reg2_b[11:0] <= { ps_fsr_in_bar[2], reg2_b[11:1]}; | |
450 | reg3_b[11:0] <= { ps_fsr_in_bar[3], reg3_b[11:1]}; | |
451 | reg4_b[11:0] <= { ps_fsr_in_bar[4], reg4_b[11:1]}; | |
452 | reg5_b[11:0] <= { ps_fsr_in_bar[5], reg5_b[11:1]}; | |
453 | reg6_b[11:0] <= { ps_fsr_in_bar[6], reg6_b[11:1]}; | |
454 | reg7_b[11:0] <= { ps_fsr_in_bar[7], reg7_b[11:1]}; | |
455 | reg8_b[11:0] <= { ps_fsr_in_bar[8], reg8_b[11:1]}; | |
456 | reg9_b[11:0] <= { ps_fsr_in_bar[9], reg9_b[11:1]}; | |
457 | ||
458 | ||
459 | if ( ref_clk) begin | |
460 | ps0_out_bar_reg <= {reg9_b[1],reg8_b[1],reg7_b[1],reg6_b[1],reg5_b[1],reg4_b[1],reg3_b[1],reg2_b[1],reg1_b[1],reg0_b[1]}; | |
461 | ps1_out_bar_reg <= {reg9_b[2],reg8_b[2],reg7_b[2],reg6_b[2],reg5_b[2],reg4_b[2],reg3_b[2],reg2_b[2],reg1_b[2],reg0_b[2]}; | |
462 | ps2_out_bar_reg <= {reg9_b[3],reg8_b[3],reg7_b[3],reg6_b[3],reg5_b[3],reg4_b[3],reg3_b[3],reg2_b[3],reg1_b[3],reg0_b[3]}; | |
463 | ||
464 | ps0_out_reg <= {reg9[1] ,reg8[1],reg7[1],reg6[1],reg5[1],reg4[1],reg3[1],reg2[1],reg1[1],reg0[1]}; | |
465 | ps1_out_reg <= {reg9[2] ,reg8[2],reg7[2],reg6[2],reg5[2],reg4[2],reg3[2],reg2[2],reg1[2],reg0[2]}; | |
466 | ps2_out_reg <= {reg9[3] ,reg8[3],reg7[3],reg6[3],reg5[3],reg4[3],reg3[3],reg2[3],reg1[3],reg0[3]}; | |
467 | ps3_out_reg <= {reg9[4] ,reg8[4],reg7[4],reg6[4],reg5[4],reg4[4],reg3[4],reg2[4],reg1[4],reg0[4]}; | |
468 | ps4_out_reg <= {reg9[5] ,reg8[5],reg7[5],reg6[5],reg5[5],reg4[5],reg3[5],reg2[5],reg1[5],reg0[5]}; | |
469 | ps5_out_reg <= {reg9[6] ,reg8[6],reg7[6],reg6[6],reg5[6],reg4[6],reg3[6],reg2[6],reg1[6],reg0[6]}; | |
470 | ps6_out_reg <= {reg9[7] ,reg8[7],reg7[7],reg6[7],reg5[7],reg4[7],reg3[7],reg2[7],reg1[7],reg0[7]}; | |
471 | ps7_out_reg <= {reg9[8] ,reg8[8],reg7[8],reg6[8],reg5[8],reg4[8],reg3[8],reg2[8],reg1[8],reg0[8]}; | |
472 | ps8_out_reg <= {reg9[9] ,reg8[9],reg7[9],reg6[9],reg5[9],reg4[9],reg3[9],reg2[9],reg1[9],reg0[9]}; | |
473 | ps9_out_reg <= {reg9[10] ,reg8[10],reg7[10],reg6[10],reg5[10],reg4[10],reg3[10],reg2[10],reg1[10],reg0[10]}; | |
474 | ps10_out_reg <= {reg9[11] ,reg8[11],reg7[11],reg6[11],reg5[11],reg4[11],reg3[11],reg2[11],reg1[11],reg0[11]}; | |
475 | ps11_out_reg <= ps_fsr_in; | |
476 | end | |
477 | ||
478 | ||
479 | end | |
480 | ||
481 | `endif | |
482 | ||
483 | `ifdef AXIS_FBDIMM_NO_FSR | |
484 | always@(negedge ref_clk) | |
485 | begin | |
486 | ps0_out_reg <= {reg9[0],reg8[0],reg7[0],reg6[0],reg5[0],reg4[0],reg3[0],reg2[0],reg1[0],reg0[0]}; | |
487 | ps0_out_bar_reg <= {reg9_b[0],reg8_b[0],reg7_b[0],reg6_b[0],reg5_b[0],reg4_b[0],reg3_b[0],reg2_b[0],reg1_b[0],reg0_b[0]}; | |
488 | ps1_out_reg <= {reg9[1],reg8[1],reg7[1],reg6[1],reg5[1],reg4[1],reg3[1],reg2[1],reg1[1],reg0[1]}; | |
489 | ps2_out_reg <= {reg9[2],reg8[2],reg7[2],reg6[2],reg5[2],reg4[2],reg3[2],reg2[2],reg1[2],reg0[2]}; | |
490 | ps3_out_reg <= {reg9[3],reg8[3],reg7[3],reg6[3],reg5[3],reg4[3],reg3[3],reg2[3],reg1[3],reg0[3]}; | |
491 | ps4_out_reg <= {reg9[4],reg8[4],reg7[4],reg6[4],reg5[4],reg4[4],reg3[4],reg2[4],reg1[4],reg0[4]}; | |
492 | ps5_out_reg <= {reg9[5],reg8[5],reg7[5],reg6[5],reg5[5],reg4[5],reg3[5],reg2[5],reg1[5],reg0[5]}; | |
493 | ps6_out_reg <= {reg9[6],reg8[6],reg7[6],reg6[6],reg5[6],reg4[6],reg3[6],reg2[6],reg1[6],reg0[6]}; | |
494 | ps7_out_reg <= {reg9[7],reg8[7],reg7[7],reg6[7],reg5[7],reg4[7],reg3[7],reg2[7],reg1[7],reg0[7]}; | |
495 | ps8_out_reg <= {reg9[8],reg8[8],reg7[8],reg6[8],reg5[8],reg4[8],reg3[8],reg2[8],reg1[8],reg0[8]}; | |
496 | ps9_out_reg <= {reg9[9],reg8[9],reg7[9],reg6[9],reg5[9],reg4[9],reg3[9],reg2[9],reg1[9],reg0[9]}; | |
497 | ps10_out_reg <= {reg9[10],reg8[10],reg7[10],reg6[10],reg5[10],reg4[10],reg3[10],reg2[10],reg1[10],reg0[10]}; | |
498 | ps11_out_reg <= {reg9[11],reg8[11],reg7[11],reg6[11],reg5[11],reg4[11],reg3[11],reg2[11],reg1[11],reg0[11]}; | |
499 | ||
500 | end | |
501 | `endif | |
502 | ||
503 | endmodule | |
504 |