x393  1.0
FPGAcodeforElphelNC393camera
sata_phy_dev.v
Go to the documentation of this file.
1 
39 //`include "oob_dev.v"
40 module sata_phy_dev #(
41  parameter DATA_BYTE_WIDTH = 4
42 )
43 (
44  // initial reset, resets PLL. After pll is locked, an internal sata reset is generated.
45  input wire extrst,
46  // sata clk, generated in pll as usrclk2
47  output wire clk,
48  output wire rst,
49 
50  // state
51  output wire phy_ready,
52 
53  // top-level ifaces
54  // ref clk from an external source, shall be connected to pads
55  input wire extclk_p,
56  input wire extclk_n,
57  // sata link data pins
58  output wire txp_out,
59  output wire txn_out,
60  input wire rxp_in,
61  input wire rxn_in,
62 
63  // to link layer
64  output wire [31:0] ll_data_out,
65  output wire [3:0] ll_charisk_out,
66  output wire [3:0] ll_err_out, // TODO!!!
67 
68  // from link layer
69  input wire [31:0] ll_data_in,
70  input wire [3:0] ll_charisk_in,
71 
72  input [4:0] serial_delay // delay output to check host alignment
73 
74 );
75 
76 wire [31:0] txdata;
77 wire [31:0] txdata_oob;
78 wire [3:0] txcharisk;
79 wire [3:0] txcharisk_oob;
80 wire [63:0] rxdata;
81 wire [63:0] rxdata_gtx;
82 wire [7:0] rxcharisk;
83 wire [7:0] rxcharisk_gtx;
84 wire [7:0] rxchariscomma;
85 wire [7:0] rxchariscomma_gtx;
86 wire [7:0] rxdisperr;
87 wire [7:0] rxdisperr_gtx;
88 wire [7:0] rxnotintable;
89 wire [7:0] rxnotintable_gtx;
90 //wire [31:0] rxdata_out;
91 //wire [31:0] txdata_in;
92 //wire [3:0] txcharisk_in;
93 //wire [3:0] rxcharisk_out;
94 
97 wire cplllock;
98 wire txcominit;
99 wire txcomwake;
100 wire rxreset;
106 
108 
111 assign ll_err_out = 4'h0;
112 assign ll_charisk_out = rxcharisk[3:0];
113 assign ll_data_out = rxdata[31:0];
114 
115 
117  // sata clk = usrclk2
118  .clk (clk),
119  // reset oob
120  .rst (rst),
121  // gtx is ready = all resets are done
122  .gtx_ready (gtx_ready),
123  // oob responses
127  // oob issues
128  .txcominit (txcominit),
129  .txcomwake (txcomwake),
131 
134 
135  // output data stream to gtx
138  // input data from gtx
139  .rxdata_in (rxdata[31:0]),
140  .rxcharisk_in (rxcharisk[3:0]),
141 
142  // shows if channel is ready
143  .link_up (phy_ready)
144 );
145 
146 wire cplllockdetclk; // TODO
147 wire drpclk; // TODO
149 wire gtrefclk;
153 wire txreset;
156 wire txusrclk;
158 wire rxusrclk;
160 wire txp;
161 wire txn;
162 wire rxp;
163 wire rxn;
164 wire txoutclk;
167 
168 // tx reset sequence; waves @ ug476 p67
169 localparam TXPMARESET_TIME = 5'h1;
170 reg [2:0] txpmareset_cnt;
172 always @ (posedge gtrefclk)
174 
175 // rx reset sequence; waves @ ug476 p77
176 localparam RXPMARESET_TIME = 5'h11;
177 localparam RXCDRPHRESET_TIME = 5'h1;
178 localparam RXCDRFREQRESET_TIME = 5'h1;
179 localparam RXDFELPMRESET_TIME = 7'hf;
180 localparam RXISCANRESET_TIME = 5'h1;
182 reg [6:0] rxeyereset_cnt;
184 always @ (posedge gtrefclk)
186 
187 /*
188  Resets
189  */
191 
192 assign cpllreset = extrst;
193 assign rxreset = ~cplllock | cpllreset;
194 assign txreset = ~cplllock | cpllreset;
197 
199 
200 // issue partial tx reset to restore functionality after oob sequence. Let it lasts 8 clock lycles
201 reg [3:0] txpcsreset_cnt;
203 
204 assign txpcsreset_stop = txpcsreset_cnt[3];
207 
208 always @ (posedge clk or posedge extrst)
210 
211 // generate internal reset after a clock is established
212 // !!!ATTENTION!!!
213 // async rst block
214 reg [7:0] rst_timer;
215 reg rst_r;
216 localparam [7:0] RST_TIMER_LIMIT = 8'b1000;
217 always @ (posedge clk or posedge extrst)
219 
220 assign rst = rst_r;
221 always @ (posedge clk or posedge extrst)
222  rst_r <= extrst | ~|rst_timer ? 1'b0 : rst_timer[3] ? 1'b0 : 1'b1;
223 
224 
225 
226 /*
227  USRCLKs generation. USRCLK @ 150MHz, same as TXOUTCLK; USRCLK2 @ 75Mhz -> sata_clk === sclk
228  It's recommended to use MMCM instead of PLL, whatever
229  */
231 wire usrclk;
232 wire usrclk2;
233 
234 assign txusrclk = usrclk;
235 assign txusrclk2 = usrclk2;
236 assign rxusrclk = usrclk;
237 assign rxusrclk2 = usrclk2;
238 
240  .BANDWIDTH ("OPTIMIZED"),
241  .CLKFBOUT_MULT (8),
242  .CLKFBOUT_PHASE (0.000),
243  .CLKIN1_PERIOD (6.666),
244  .CLKIN2_PERIOD (0.000),
245  .CLKOUT0_DIVIDE (8),
246  .CLKOUT0_DUTY_CYCLE (0.500),
247  .CLKOUT0_PHASE (0.000),
248  .CLKOUT1_DIVIDE (16),
249  .CLKOUT1_DUTY_CYCLE (0.500),
250  .CLKOUT1_PHASE (0.000),
251 /* .CLKOUT2_DIVIDE = 1,
252  .CLKOUT2_DUTY_CYCLE = 0.500,
253  .CLKOUT2_PHASE = 0.000,
254  .CLKOUT3_DIVIDE = 1,
255  .CLKOUT3_DUTY_CYCLE = 0.500,
256  .CLKOUT3_PHASE = 0.000,
257  .CLKOUT4_DIVIDE = 1,
258  .CLKOUT4_DUTY_CYCLE = 0.500,
259  .CLKOUT4_PHASE = 0.000,
260  .CLKOUT5_DIVIDE = 1,
261  .CLKOUT5_DUTY_CYCLE = 0.500,
262  .CLKOUT5_PHASE = 0.000,**/
263  .COMPENSATION ("ZHOLD"),
264  .DIVCLK_DIVIDE (1),
265  .IS_CLKINSEL_INVERTED (1'b0),
266  .IS_PWRDWN_INVERTED (1'b0),
267  .IS_RST_INVERTED (1'b0),
268  .REF_JITTER1 (0.010),
269  .REF_JITTER2 (0.010),
270  .STARTUP_WAIT ("FALSE")
271 )
272 usrclk_pll(
273  .CLKFBOUT (usrpll_fb_clk),
274  .CLKOUT0 (usrclk),
275  .CLKOUT1 (usrclk2),
276  .CLKOUT2 (),
277  .CLKOUT3 (),
278  .CLKOUT4 (),
279  .CLKOUT5 (),
280  .DO (),
281  .DRDY (),
282  .LOCKED (usrpll_locked),
283 
284  .CLKFBIN (usrpll_fb_clk),
285  .CLKIN1 (txoutclk),
286  .CLKIN2 (1'b0),
287  .CLKINSEL (1'b1),
288  .DADDR (7'h0),
289  .DCLK (drpclk),
290  .DEN (1'b0),
291  .DI (16'h0),
292  .DWE (1'b0),
293  .PWRDWN (1'b0),
294  .RST (~cplllock)
295 );
296 
297 /*
298  Padding for an external input clock @ 150 MHz
299  */
300 localparam [1:0] CLKSWING_CFG = 2'b11;
302  .CLKRCV_TRST ("TRUE"),
303  .CLKCM_CFG ("TRUE"),
305 )
306 ext_clock_buf(
307  .I (extclk_p),
308  .IB (extclk_n),
309  .CEB (1'b0),
310  .O (gtrefclk),
311  .ODIV2 ()
312 );
313 
315  .SIM_RECEIVER_DETECT_PASS ("TRUE"),
316  .SIM_TX_EIDLE_DRIVE_LEVEL ("X"),
317  .SIM_RESET_SPEEDUP ("FALSE"),
318  .SIM_CPLLREFCLK_SEL (3'b001),
319  .SIM_VERSION ("4.0"),
320  .ALIGN_COMMA_DOUBLE ("FALSE"),
321  .ALIGN_COMMA_ENABLE (10'b1111111111),
322  .ALIGN_COMMA_WORD (1),
323  .ALIGN_MCOMMA_DET ("TRUE"),
324  .ALIGN_MCOMMA_VALUE (10'b1010000011),
325  .ALIGN_PCOMMA_DET ("TRUE"),
326  .ALIGN_PCOMMA_VALUE (10'b0101111100),
327  .SHOW_REALIGN_COMMA ("TRUE"),
328  .RXSLIDE_AUTO_WAIT (7),
329  .RXSLIDE_MODE ("OFF"),
330  .RX_SIG_VALID_DLY (10),
331  .RX_DISPERR_SEQ_MATCH ("TRUE"),
332  .DEC_MCOMMA_DETECT ("TRUE"),
333  .DEC_PCOMMA_DETECT ("TRUE"),
334  .DEC_VALID_COMMA_ONLY ("FALSE"),
335  .CBCC_DATA_SOURCE_SEL ("DECODED"),
336  .CLK_COR_SEQ_2_USE ("FALSE"),
337  .CLK_COR_KEEP_IDLE ("FALSE"),
338  .CLK_COR_MAX_LAT (9),
339  .CLK_COR_MIN_LAT (7),
340  .CLK_COR_PRECEDENCE ("TRUE"),
341  .CLK_COR_REPEAT_WAIT (0),
342  .CLK_COR_SEQ_LEN (1),
343  .CLK_COR_SEQ_1_ENABLE (4'b1111),
344  .CLK_COR_SEQ_1_1 (10'b0100000000),
345  .CLK_COR_SEQ_1_2 (10'b0000000000),
346  .CLK_COR_SEQ_1_3 (10'b0000000000),
347  .CLK_COR_SEQ_1_4 (10'b0000000000),
348  .CLK_CORRECT_USE ("FALSE"),
349  .CLK_COR_SEQ_2_ENABLE (4'b1111),
350  .CLK_COR_SEQ_2_1 (10'b0100000000),
351  .CLK_COR_SEQ_2_2 (10'b0000000000),
352  .CLK_COR_SEQ_2_3 (10'b0000000000),
353  .CLK_COR_SEQ_2_4 (10'b0000000000),
354  .CHAN_BOND_KEEP_ALIGN ("FALSE"),
355  .CHAN_BOND_MAX_SKEW (1),
356  .CHAN_BOND_SEQ_LEN (1),
357  .CHAN_BOND_SEQ_1_1 (10'b0000000000),
358  .CHAN_BOND_SEQ_1_2 (10'b0000000000),
359  .CHAN_BOND_SEQ_1_3 (10'b0000000000),
360  .CHAN_BOND_SEQ_1_4 (10'b0000000000),
361  .CHAN_BOND_SEQ_1_ENABLE (4'b1111),
362  .CHAN_BOND_SEQ_2_1 (10'b0000000000),
363  .CHAN_BOND_SEQ_2_2 (10'b0000000000),
364  .CHAN_BOND_SEQ_2_3 (10'b0000000000),
365  .CHAN_BOND_SEQ_2_4 (10'b0000000000),
366  .CHAN_BOND_SEQ_2_ENABLE (4'b1111),
367  .CHAN_BOND_SEQ_2_USE ("FALSE"),
368  .FTS_DESKEW_SEQ_ENABLE (4'b1111),
369  .FTS_LANE_DESKEW_CFG (4'b1111),
370  .FTS_LANE_DESKEW_EN ("FALSE"),
371  .ES_CONTROL (6'b000000),
372  .ES_ERRDET_EN ("FALSE"),
373  .ES_EYE_SCAN_EN ("TRUE"),
374  .ES_HORZ_OFFSET (12'h000),
375  .ES_PMA_CFG (10'b0000000000),
376  .ES_PRESCALE (5'b00000),
377  .ES_QUALIFIER (80'h00000000000000000000),
378  .ES_QUAL_MASK (80'h00000000000000000000),
379  .ES_SDATA_MASK (80'h00000000000000000000),
380  .ES_VERT_OFFSET (9'b000000000),
381  .RX_DATA_WIDTH (40),
382  .OUTREFCLK_SEL_INV (2'b11),
383  .PMA_RSV (32'h00018480),
384  .PMA_RSV2 (16'h2050),
385  .PMA_RSV3 (2'b00),
386  .PMA_RSV4 (32'h00000000),
387  .RX_BIAS_CFG (12'b000000000100),
388  .DMONITOR_CFG (24'h000A00),
389  .RX_CM_SEL (2'b11),
390  .RX_CM_TRIM (3'b010),
391  .RX_DEBUG_CFG (12'b000000000000),
392  .RX_OS_CFG (13'b0000010000000),
393  .TERM_RCAL_CFG (5'b10000),
394  .TERM_RCAL_OVRD (1'b0),
395  .TST_RSV (32'h00000000),
396  .RX_CLK25_DIV (6),
397  .TX_CLK25_DIV (6),
398  .UCODEER_CLR (1'b0),
399  .PCS_PCIE_EN ("FALSE"),
400  .PCS_RSVD_ATTR (48'h0100),
401  .RXBUF_ADDR_MODE ("FAST"),
402  .RXBUF_EIDLE_HI_CNT (4'b1000),
403  .RXBUF_EIDLE_LO_CNT (4'b0000),
404  .RXBUF_EN ("TRUE"),
405  .RX_BUFFER_CFG (6'b000000),
406  .RXBUF_RESET_ON_CB_CHANGE ("TRUE"),
407  .RXBUF_RESET_ON_COMMAALIGN ("FALSE"),
408  .RXBUF_RESET_ON_EIDLE ("FALSE"),
409  .RXBUF_RESET_ON_RATE_CHANGE ("TRUE"),
410  .RXBUFRESET_TIME (5'b00001),
411  .RXBUF_THRESH_OVFLW (61),
412  .RXBUF_THRESH_OVRD ("FALSE"),
413  .RXBUF_THRESH_UNDFLW (4),
414  .RXDLY_CFG (16'h001F),
415  .RXDLY_LCFG (9'h030),
416  .RXDLY_TAP_CFG (16'h0000),
417  .RXPH_CFG (24'h000000),
418  .RXPHDLY_CFG (24'h084020),
419  .RXPH_MONITOR_SEL (5'b00000),
420  .RX_XCLK_SEL ("RXREC"),
421  .RX_DDI_SEL (6'b000000),
422  .RX_DEFER_RESET_BUF_EN ("TRUE"),
423  .RXCDR_CFG (72'h03000023ff10200020),
424  .RXCDR_FR_RESET_ON_EIDLE (1'b0),
425  .RXCDR_HOLD_DURING_EIDLE (1'b0),
426  .RXCDR_PH_RESET_ON_EIDLE (1'b0),
427  .RXCDR_LOCK_CFG (6'b010101),
431  .RXPCSRESET_TIME (5'b00001),
433  .RXOOB_CFG (7'b0000110),
434  .RXGEARBOX_EN ("FALSE"),
435  .GEARBOX_MODE (3'b000),
436  .RXPRBS_ERR_LOOPBACK (1'b0),
437  .PD_TRANS_TIME_FROM_P2 (12'h03c),
438  .PD_TRANS_TIME_NONE_P2 (8'h3c),
439  .PD_TRANS_TIME_TO_P2 (8'h64),
440  .SAS_MAX_COM (64),
441  .SAS_MIN_COM (36),
442  .SATA_BURST_SEQ_LEN (4'b0111),
443  .SATA_BURST_VAL (3'b110),
444  .SATA_EIDLE_VAL (3'b110),
445  .SATA_MAX_BURST (8),
446  .SATA_MAX_INIT (21),
447  .SATA_MAX_WAKE (7),
448  .SATA_MIN_BURST (4),
449  .SATA_MIN_INIT (12),
450  .SATA_MIN_WAKE (4),
451  .TRANS_TIME_RATE (8'h0E),
452  .TXBUF_EN ("TRUE"),
453  .TXBUF_RESET_ON_RATE_CHANGE ("TRUE"),
454  .TXDLY_CFG (16'h001F),
455  .TXDLY_LCFG (9'h030),
456  .TXDLY_TAP_CFG (16'h0000),
457  .TXPH_CFG (16'h0780),
458  .TXPHDLY_CFG (24'h084020),
459  .TXPH_MONITOR_SEL (5'b00000),
460  .TX_XCLK_SEL ("TXOUT"),
461  .TX_DATA_WIDTH (40),
462  .TX_DEEMPH0 (5'b00000),
463  .TX_DEEMPH1 (5'b00000),
464  .TX_EIDLE_ASSERT_DELAY (3'b110),
465  .TX_EIDLE_DEASSERT_DELAY (3'b100),
466  .TX_LOOPBACK_DRIVE_HIZ ("FALSE"),
467  .TX_MAINCURSOR_SEL (1'b0),
468  .TX_DRIVE_MODE ("DIRECT"),
469  .TX_MARGIN_FULL_0 (7'b1001110),
470  .TX_MARGIN_FULL_1 (7'b1001001),
471  .TX_MARGIN_FULL_2 (7'b1000101),
472  .TX_MARGIN_FULL_3 (7'b1000010),
473  .TX_MARGIN_FULL_4 (7'b1000000),
474  .TX_MARGIN_LOW_0 (7'b1000110),
475  .TX_MARGIN_LOW_1 (7'b1000100),
476  .TX_MARGIN_LOW_2 (7'b1000010),
477  .TX_MARGIN_LOW_3 (7'b1000000),
478  .TX_MARGIN_LOW_4 (7'b1000000),
479  .TXGEARBOX_EN ("FALSE"),
480  .TXPCSRESET_TIME (5'b00001),
482  .TX_RXDETECT_CFG (14'h1832),
483  .TX_RXDETECT_REF (3'b100),
484  .CPLL_CFG (24'hBC07DC),
485  .CPLL_FBDIV (4),
486  .CPLL_FBDIV_45 (5),
487  .CPLL_INIT_CFG (24'h00001E),
488  .CPLL_LOCK_CFG (16'h01E8),
489  .CPLL_REFCLK_DIV (1),
490  .RXOUT_DIV (2),
491  .TXOUT_DIV (2),
492  .SATA_CPLL_CFG ("VCO_3000MHZ"),
494  .RXLPM_HF_CFG (14'b00000011110000),
495  .RXLPM_LF_CFG (14'b00000011110000),
496  .RX_DFE_GAIN_CFG (23'h020FEA),
497  .RX_DFE_H2_CFG (12'b000000000000),
498  .RX_DFE_H3_CFG (12'b000001000000),
499  .RX_DFE_H4_CFG (11'b00011110000),
500  .RX_DFE_H5_CFG (11'b00011100000),
501  .RX_DFE_KL_CFG (13'b0000011111110),
502  .RX_DFE_LPM_CFG (16'h0954),
503  .RX_DFE_LPM_HOLD_DURING_EIDLE (1'b0),
504  .RX_DFE_UT_CFG (17'b10001111000000000),
505  .RX_DFE_VP_CFG (17'b00011111100000011),
506  .RX_CLKMUX_PD (1'b1),
507  .TX_CLKMUX_PD (1'b1),
508  .RX_INT_DATAWIDTH (0),
509  .TX_INT_DATAWIDTH (0),
510  .TX_QPI_STATUS_EN (1'b0),
511  .RX_DFE_KL_CFG2 (32'h301148AC),
512  .RX_DFE_XYD_CFG (13'b0000000000000),
513  .TX_PREDRIVER_MODE (1'b0)
514 )
515 gtx_wrapper(
516  .CPLLFBCLKLOST (),
517  .CPLLLOCK (cplllock),
519  .CPLLLOCKEN (1'b1),
520  .CPLLPD (1'b0),
521  .CPLLREFCLKLOST (),
522  .CPLLREFCLKSEL (3'b001),
523  .CPLLRESET (cpllreset),
524  .GTRSVD (16'b0),
525  .PCSRSVDIN (16'b0),
526  .PCSRSVDIN2 (5'b0),
527  .PMARSVDIN (5'b0),
528  .PMARSVDIN2 (5'b0),
529  .TSTIN (20'b1),
530  .TSTOUT (),
531  .CLKRSVD (4'b0000),
532  .GTGREFCLK (1'b0),
533  .GTNORTHREFCLK0 (1'b0),
534  .GTNORTHREFCLK1 (1'b0),
535  .GTREFCLK0 (gtrefclk),
536  .GTREFCLK1 (1'b0),
537  .GTSOUTHREFCLK0 (1'b0),
538  .GTSOUTHREFCLK1 (1'b0),
539  .DRPADDR (9'b0),
540  .DRPCLK (drpclk),
541  .DRPDI (16'b0),
542  .DRPDO (),
543  .DRPEN (1'b0),
544  .DRPRDY (),
545  .DRPWE (1'b0),
546  .GTREFCLKMONITOR (),
547  .QPLLCLK (gtrefclk),
548  .QPLLREFCLK (gtrefclk),
549  .RXSYSCLKSEL (2'b00),
550  .TXSYSCLKSEL (2'b00),
551  .DMONITOROUT (),
552  .TX8B10BEN (1'b1),
553  .LOOPBACK (3'd0),
554  .PHYSTATUS (),
555  .RXRATE (3'd0),
556  .RXVALID (),
557  .RXPD (2'b00),
558  .TXPD (2'b00),
559  .SETERRSTATUS (1'b0),
560  .EYESCANRESET (1'b0),//rxreset), // p78
561  .RXUSERRDY (rxuserrdy),
562  .EYESCANDATAERROR (),
563  .EYESCANMODE (1'b0),
564  .EYESCANTRIGGER (1'b0),
565  .RXCDRFREQRESET (1'b0),
566  .RXCDRHOLD (1'b0),
567  .RXCDRLOCK (),
568  .RXCDROVRDEN (1'b0),
569  .RXCDRRESET (1'b0),
570  .RXCDRRESETRSV (1'b0),
571  .RXCLKCORCNT (),
572  .RX8B10BEN (1'b1),
573  .RXUSRCLK (rxusrclk),
574  .RXUSRCLK2 (rxusrclk2),
575  .RXDATA (rxdata_gtx),
576  .RXPRBSERR (),
577  .RXPRBSSEL (3'd0),
578  .RXPRBSCNTRESET (1'b0),
579  .RXDFEXYDEN (1'b1),
580  .RXDFEXYDHOLD (1'b0),
581  .RXDFEXYDOVRDEN (1'b0),
584  .GTXRXP (rxp),
585  .GTXRXN (rxn),
586  .RXBUFRESET (1'b0),
587  .RXBUFSTATUS (),
588  .RXDDIEN (1'b0),
589  .RXDLYBYPASS (1'b1),
590  .RXDLYEN (1'b0),
591  .RXDLYOVRDEN (1'b0),
592  .RXDLYSRESET (1'b0),
593  .RXDLYSRESETDONE (),
594  .RXPHALIGN (1'b0),
595  .RXPHALIGNDONE (),
596  .RXPHALIGNEN (1'b0),
597  .RXPHDLYPD (1'b0),
598  .RXPHDLYRESET (1'b0),
599  .RXPHMONITOR (),
600  .RXPHOVRDEN (1'b0),
601  .RXPHSLIPMONITOR (),
602  .RXSTATUS (),
604  .RXBYTEREALIGN (),
605  .RXCOMMADET (),
606  .RXCOMMADETEN (1'b1),
607  .RXMCOMMAALIGNEN (1'b1),
608  .RXPCOMMAALIGNEN (1'b1),
609  .RXCHANBONDSEQ (),
610  .RXCHBONDEN (1'b0),
611  .RXCHBONDLEVEL (3'd0),
612  .RXCHBONDMASTER (1'b0),
613  .RXCHBONDO (),
614  .RXCHBONDSLAVE (1'b0),
615  .RXCHANISALIGNED (),
616  .RXCHANREALIGN (),
617  .RXLPMHFHOLD (1'b0),
618  .RXLPMHFOVRDEN (1'b0),
619  .RXLPMLFHOLD (1'b0),
620  .RXDFEAGCHOLD (1'b0),
621  .RXDFEAGCOVRDEN (1'b0),
622  .RXDFECM1EN (1'b0),
623  .RXDFELFHOLD (1'b0),
624  .RXDFELFOVRDEN (1'b1),
626  .RXDFETAP2HOLD (1'b0),
627  .RXDFETAP2OVRDEN (1'b0),
628  .RXDFETAP3HOLD (1'b0),
629  .RXDFETAP3OVRDEN (1'b0),
630  .RXDFETAP4HOLD (1'b0),
631  .RXDFETAP4OVRDEN (1'b0),
632  .RXDFETAP5HOLD (1'b0),
633  .RXDFETAP5OVRDEN (1'b0),
634  .RXDFEUTHOLD (1'b0),
635  .RXDFEUTOVRDEN (1'b0),
636  .RXDFEVPHOLD (1'b0),
637  .RXDFEVPOVRDEN (1'b0),
638 // .RXDFEVSEN (1'b0),
639  .RXLPMLFKLOVRDEN (1'b0),
640  .RXMONITOROUT (),
641  .RXMONITORSEL (2'b01),
642  .RXOSHOLD (1'b0),
643  .RXOSOVRDEN (1'b0),
644  .RXRATEDONE (),
645  .RXOUTCLK (),
646  .RXOUTCLKFABRIC (),
647  .RXOUTCLKPCS (),
648  .RXOUTCLKSEL (3'b010),
649  .RXDATAVALID (),
650  .RXHEADER (),
651  .RXHEADERVALID (),
652  .RXSTARTOFSEQ (),
653  .RXGEARBOXSLIP (1'b0),
654  .GTRXRESET (rxreset),
655  .RXOOBRESET (1'b0),
656  .RXPCSRESET (1'b0),
657  .RXPMARESET (1'b0),//rxreset), // p78
658  .RXLPMEN (1'b0),
659  .RXCOMSASDET (),
663  .RXELECIDLEMODE (2'b00),
664  .RXPOLARITY (1'b0),
665  .RXSLIDE (1'b0),
668  .RXCHBONDI (5'b00000),
670  .RXQPIEN (1'b0),
671  .RXQPISENN (),
672  .RXQPISENP (),
673  .TXPHDLYTSTCLK (1'b0),
674  .TXPOSTCURSOR (5'b00000),
675  .TXPOSTCURSORINV (1'b0),
676  .TXPRECURSOR (5'd0),
677  .TXPRECURSORINV (1'b0),
678  .TXQPIBIASEN (1'b0),
679  .TXQPISTRONGPDOWN (1'b0),
680  .TXQPIWEAKPUP (1'b0),
681  .CFGRESET (1'b0),
682  .GTTXRESET (txreset),
683  .PCSRSVDOUT (),
684  .TXUSERRDY (txuserrdy),
685  .GTRESETSEL (1'b0),
686  .RESETOVRD (1'b0),
687  .TXCHARDISPMODE (8'd0),
688  .TXCHARDISPVAL (8'd0),
689  .TXUSRCLK (txusrclk),
690  .TXUSRCLK2 (txusrclk2),
692  .TXMARGIN (3'd0),
693  .TXRATE (3'd0),
694  .TXSWING (1'b0),
695  .TXPRBSFORCEERR (1'b0),
696  .TXDLYBYPASS (1'b1),
697  .TXDLYEN (1'b0),
698  .TXDLYHOLD (1'b0),
699  .TXDLYOVRDEN (1'b0),
700  .TXDLYSRESET (1'b0),
701  .TXDLYSRESETDONE (),
702  .TXDLYUPDOWN (1'b0),
703  .TXPHALIGN (1'b0),
704  .TXPHALIGNDONE (),
705  .TXPHALIGNEN (1'b0),
706  .TXPHDLYPD (1'b0),
707  .TXPHDLYRESET (1'b0),
708  .TXPHINIT (1'b0),
709  .TXPHINITDONE (),
710  .TXPHOVRDEN (1'b0),
711  .TXBUFSTATUS (),
712  .TXBUFDIFFCTRL (3'b100),
713  .TXDEEMPH (1'b0),
714  .TXDIFFCTRL (4'b1000),
715  .TXDIFFPD (1'b0),
716  .TXINHIBIT (1'b0),
717  .TXMAINCURSOR (7'b0000000),
718  .TXPISOPD (1'b0),
719  .TXDATA ({32'h0, txdata}),
720  .GTXTXN (txn),
721  .GTXTXP (txp),
722  .TXOUTCLK (txoutclk),
723  .TXOUTCLKFABRIC (),
724  .TXOUTCLKPCS (),
725  .TXOUTCLKSEL (3'b010),
726  .TXRATEDONE (),
727  .TXCHARISK ({4'b0, txcharisk}),
728  .TXGEARBOXREADY (),
729  .TXHEADER (3'd0),
730  .TXSEQUENCE (7'd0),
731  .TXSTARTSEQ (1'b0),
733  .TXPMARESET (1'b0),
735  .TXCOMFINISH (),
736  .TXCOMINIT (txcominit),
737  .TXCOMSAS (1'b0),
738  .TXCOMWAKE (txcomwake),
739  .TXPDELECIDLEMODE (1'b0),
740  .TXPOLARITY (1'b0),
741  .TXDETECTRX (1'b0),
742  .TX8B10BBYPASS (8'd0),
743  .TXPRBSSEL (3'd0),
744  .TXQPISENN (),
745  .TXQPISENP ()/*,
746  .TXSYNCMODE (1'b0),
747  .TXSYNCALLIN (1'b0),
748  .TXSYNCIN (1'b0)**/
749 );
750 // Serial data bit shift to check host alignment
751 wire tx_serial_clk=gtx_wrapper.gtx_gpl.channel.tx_serial_clk;
752 //reg [4:0] serial_delay = 0;
753 reg [31:0] txp_r;
754 reg [31:0] txn_r;
755 always @(posedge tx_serial_clk) begin
756  txp_r = {txp_r[30:0],txp};
757  txn_r = {txn_r[30:0],txn};
758 end
759 
760 // align to 4-byte boundary
762 always @ (posedge clk)
763  twobytes_shift <= rst ? 1'b0 : rxchariscomma_gtx[0] === 1'bx ? 1'b0 : rxchariscomma_gtx[2] === 1'bx ? 1'b0 : rxchariscomma_gtx[2] ? 1'b1 : rxchariscomma_gtx[0] ? 1'b0 : twobytes_shift;
764 assign rxdata = twobytes_shift ? {rxdata_gtx[63:32] , rxdata_gtx[15:0] , rxdata_gtx[31:16] } : rxdata_gtx;
769 
770 assign ll_err_out = rxdisperr[3:0] | rxnotintable[3:0];
771 
772 /*
773  Interfaces
774  */
775 assign cplllockdetclk = gtrefclk; //TODO
776 assign drpclk = gtrefclk;
777 
778 assign clk = usrclk2;
779 assign rxn = rxn_in;
780 assign rxp = rxp_in;
781 
782 ///assign txn_out = txn;
783 ///assign txp_out = txp;
784 assign txn_out = txn_r[serial_delay];
785 assign txp_out = txp_r[serial_delay];
786 
787 //assign ll_data_out = rxdata_out;
788 //assign ll_charisk_out = rxcharisk_out;
789 //assign txdata_in = ll_data_in;
790 //assign txcharisk_in = ll_charisk_in;
791 
792 endmodule
14490RXISCANRESET_TIME5'h1
Definition: sata_phy_dev.v:180
wire [DATA_BYTE_WIDTH - 1:0] 14386rxcharisk_in
Definition: oob_dev.v:73
wire 14427txp_out
Definition: sata_phy_dev.v:58
14483rxeyereset_donewire
Definition: sata_phy_dev.v:166
14493usrpll_lockedwire
Definition: sata_phy_dev.v:190
14494txpcsreset_cntreg[3:0]
Definition: sata_phy_dev.v:201
[1:0] 14502CLKSWING_CFG2'b11
Definition: sata_phy_dev.v:300
14489RXDFELPMRESET_TIME7'hf
Definition: sata_phy_dev.v:179
14442rxdata_gtxwire[63:0]
Definition: sata_phy_dev.v:81
wire 14430rxn_in
Definition: sata_phy_dev.v:61
wire 14381txpcsreset_req
Definition: oob_dev.v:65
wire 14421extrst
Definition: sata_phy_dev.v:45
14495txpcsreset_stopwire
Definition: sata_phy_dev.v:202
14461recal_tx_donewire
Definition: sata_phy_dev.v:105
14485txpmareset_cntreg[2:0]
Definition: sata_phy_dev.v:170
14457rxelecidlewire
Definition: sata_phy_dev.v:101
14486RXPMARESET_TIME5'h11
Definition: sata_phy_dev.v:176
14491RXEYERESET_TIME7'h0 + RXPMARESET_TIME + RXCDRPHRESET_TIME + RXCDRFREQRESET_TIME + RXDFELPMRESET_TIME + RXISCANRESET_TIME
Definition: sata_phy_dev.v:181
14459rxbyteisalignedwire
Definition: sata_phy_dev.v:103
reg 14378txcominit
Definition: oob_dev.v:61
14447rxdisperrwire[7:0]
Definition: sata_phy_dev.v:86
14439txchariskwire[3:0]
Definition: sata_phy_dev.v:78
wire 14429rxp_in
Definition: sata_phy_dev.v:60
14482txpmareset_donewire
Definition: sata_phy_dev.v:165
wire 14426extclk_n
Definition: sata_phy_dev.v:56
wire 14425extclk_p
Definition: sata_phy_dev.v:55
wire [DATA_BYTE_WIDTH*8 - 1:0] 14383txdata_out
Definition: oob_dev.v:69
ext_clock_buf IBUFDS_GTE2
Definition: sata_phy_dev.v:301
wire [DATA_BYTE_WIDTH - 1:0] 14384txcharisk_out
Definition: oob_dev.v:70
wire [31:0] 14434ll_data_in
Definition: sata_phy_dev.v:69
wire [DATA_BYTE_WIDTH*8 - 1:0] 14385rxdata_in
Definition: oob_dev.v:72
14503tx_serial_clkwire
Definition: sata_phy_dev.v:751
gtx_wrapper gtxe2_channel_wrapper
Definition: sata_phy_dev.v:314
14440txcharisk_oobwire[3:0]
Definition: sata_phy_dev.v:79
wire 14376rxcomwakedet_in
Definition: oob_dev.v:58
oob_dev oob_dev
Definition: sata_phy_dev.v:116
14454txcominitwire
Definition: sata_phy_dev.v:98
wire 14424phy_ready
Definition: sata_phy_dev.v:51
14499usrpll_fb_clkwire
Definition: sata_phy_dev.v:230
14452rxcominitdetwire
Definition: sata_phy_dev.v:96
14476rxusrclk2wire
Definition: sata_phy_dev.v:159
14469txpcsresetwire
Definition: sata_phy_dev.v:152
14465cpllresetwire
Definition: sata_phy_dev.v:148
14505txn_rreg[31:0]
Definition: sata_phy_dev.v:754
14451rxcomwakedetwire
Definition: sata_phy_dev.v:95
14450rxnotintable_gtxwire[7:0]
Definition: sata_phy_dev.v:89
14449rxnotintablewire[7:0]
Definition: sata_phy_dev.v:88
reg 14380txelecidle
Definition: oob_dev.v:63
14441rxdatawire[63:0]
Definition: sata_phy_dev.v:80
14462gtx_readywire
Definition: sata_phy_dev.v:107
14453cplllockwire
Definition: sata_phy_dev.v:97
14472rxuserrdywire
Definition: sata_phy_dev.v:155
14467rxresetdonewire
Definition: sata_phy_dev.v:150
14488RXCDRFREQRESET_TIME5'h1
Definition: sata_phy_dev.v:178
wire [3:0] 14435ll_charisk_in
Definition: sata_phy_dev.v:70
14443rxchariskwire[7:0]
Definition: sata_phy_dev.v:82
14458txelecidlewire
Definition: sata_phy_dev.v:102
14487RXCDRPHRESET_TIME5'h1
Definition: sata_phy_dev.v:177
wire 14373rst
Definition: oob_dev.v:53
14471txuserrdywire
Definition: sata_phy_dev.v:154
14463cplllockdetclkwire
Definition: sata_phy_dev.v:146
wire 14428txn_out
Definition: sata_phy_dev.v:59
14438txdata_oobwire[31:0]
Definition: sata_phy_dev.v:77
wire 14372clk
Definition: oob_dev.v:51
14444rxcharisk_gtxwire[7:0]
Definition: sata_phy_dev.v:83
14448rxdisperr_gtxwire[7:0]
Definition: sata_phy_dev.v:87
14455txcomwakewire
Definition: sata_phy_dev.v:99
14506twobytes_shiftreg
Definition: sata_phy_dev.v:761
usrclk_pll PLLE2_ADV
Definition: sata_phy_dev.v:239
reg 14379txcomwake
Definition: oob_dev.v:62
14460txpcsreset_reqwire
Definition: sata_phy_dev.v:104
14468txresetdonewire
Definition: sata_phy_dev.v:151
wire 14382recal_tx_done
Definition: oob_dev.v:66
14496rst_timerreg[7:0]
Definition: sata_phy_dev.v:214
wire [3:0] 14433ll_err_out
Definition: sata_phy_dev.v:66
[7:0] 14498RST_TIMER_LIMIT8'b1000
Definition: sata_phy_dev.v:216
14474txusrclk2wire
Definition: sata_phy_dev.v:157
14504txp_rreg[31:0]
Definition: sata_phy_dev.v:753
wire [3:0] 14432ll_charisk_out
Definition: sata_phy_dev.v:65
wire 14377rxelecidle_in
Definition: oob_dev.v:59
14484TXPMARESET_TIME5'h1
Definition: sata_phy_dev.v:169
14446rxchariscomma_gtxwire[7:0]
Definition: sata_phy_dev.v:85
14445rxchariscommawire[7:0]
Definition: sata_phy_dev.v:84
wire [31:0] 14431ll_data_out
Definition: sata_phy_dev.v:64
wire 14374gtx_ready
Definition: oob_dev.v:55
14437txdatawire[31:0]
Definition: sata_phy_dev.v:76
[4:0] 14436serial_delay
Definition: sata_phy_dev.v:72
wire 14375rxcominitdet_in
Definition: oob_dev.v:57
wire 14387link_up
Definition: oob_dev.v:75
14492rxeyereset_cntreg[6:0]
Definition: sata_phy_dev.v:182