x393  1.0
FPGAcodeforElphelNC393camera
ahci_sata_layers.v
Go to the documentation of this file.
1 
26 `timescale 1ns/1ps
27 
29 `ifdef USE_DATASCOPE
30  parameter ADDRESS_BITS = 10, //for datascope
31  parameter DATASCOPE_START_BIT = 14, // bit of DRP "other_control" to start recording after 0->1 (needs DRP)
32  parameter DATASCOPE_POST_MEAS = 16, // number of measurements to perform after event
33 `endif
34  parameter BITS_TO_START_XMIT = 6, // wait H2D FIFO to have 1 << BITS_TO_START_XMIT to start FIS transmission (or all FIS fits)
35  parameter DATA_BYTE_WIDTH = 4,
36  parameter ELASTIC_DEPTH = 4, //5, With 4/7 got infrequent overflows!
37  parameter ELASTIC_OFFSET = 7, // 5 //10
38  parameter FREQ_METER_WIDTH = 12
39 
40 )(
41  input exrst, // master reset that resets PLL and GTX
42  input reliable_clk, // use aclk that runs independently of the GTX
43  output rst, // PHY-generated reset after PLL lock
44  output clk, // PHY-generated clock, 75MHz for SATA2
45 // Data/type FIFO, host -> device
46  // Data System memory or FIS -> device
47  input [31:0] h2d_data, // 32-bit data from the system memory to HBA (dma data)
48  input [ 1:0] h2d_mask, // set to 2'b11
49  input [ 1:0] h2d_type, // 0 - data, 1 - FIS head, 2 - FIS LAST
50  input h2d_valid, // output register full
51  output h2d_ready, // h2d FIFO has room for data (>= 8? dwords)
52 
53 // Data/type FIFO, device -> host
54  output [31:0] d2h_data, // FIFO input data
55  output [ 1:0] d2h_mask, // set to 2'b11
56  output [ 1:0] d2h_type, // 0 - data, 1 - FIS head, 2 - R_OK, 3 - R_ERR (last two - after data, so ignore data with R_OK/R_ERR)
57  output d2h_valid, // Data available from the transport layer in FIFO
58  output d2h_many, // Multiple DWORDs available from the transport layer in FIFO
59  input d2h_ready, // This module or DMA consumes DWORD
60 
61  // communication with link/phys layers
62  output [ 1:0] phy_speed, // 0 - not ready, 1..3 - negotiated speed (Now 0/2)
63  output gtx_ready, // How to use it?
64  output xmit_ok, // received R_OK after transmission
65  output xmit_err, // Error during/after sending of a FIS (got R_ERR)
66  output x_rdy_collision, // X_RDY/X_RDY collision on interface
67  output syncesc_recv, // Where to get it?
68 
69  input pcmd_st_cleared, // PxCMD.ST 1->0 transition by software
70  input syncesc_send, // Send sync escape
71  output syncesc_send_done, // "SYNC escape until the interface is quiescent..."
72  input comreset_send, // Not possible yet?
73  output cominit_got,
74  input set_offline, // electrically idle
75 
76  input send_R_OK, // Should it be originated in this layer SM?
77  input send_R_ERR,
78 
79  // additional errors from SATA layers (single-clock pulses):
80 
81  output serr_DT, // RWC: Transport state transition error
82  output serr_DS, // RWC: Link sequence error
83  output serr_DH, // RWC: Handshake Error (i.e. Device got CRC error)
84  output serr_DC, // RWC: CRC error in Link layer
85  output serr_DB, // RWC: 10B to 8B decode error
86  output serr_DW, // RWC: COMMWAKE signal was detected
87  output serr_DI, // RWC: PHY Internal Error
88  // sirq_PRC,
89  output serr_EE, // RWC: Internal error (such as elastic buffer overflow or primitive mis-alignment)
90  output serr_EP, // RWC: Protocol Error - a violation of SATA protocol detected
91  output serr_EC, // RWC: Persistent Communication or Data Integrity Error
92  output serr_ET, // RWC: Transient Data Integrity Error (error not recovered by the interface)
93  output serr_EM, // RWC: Communication between the device and host was lost but re-established
94  output serr_EI, // RWC: Recovered Data integrity Error
95  // additional control signals for SATA layers
96  input [3:0] sctl_ipm, // Interface power management transitions allowed // @SuppressThisWarning Veditor Unused (yet)
97  input [3:0] sctl_spd, // Interface maximal speed // @SuppressThisWarning Veditor Unused (yet)
98 
99  // Device high speed pads and clock inputs
100  // ref clk from an external source, shall be connected to pads
101  input wire extclk_p,
102  input wire extclk_n,
103  // sata link data pins
104  output wire txp_out,
105  output wire txn_out,
106  input wire rxp_in,
107  input wire rxn_in,
108 `ifdef USE_DATASCOPE
109 // Datascope interface (write to memory that can be software-read)
112  output datascope_we,
113  output [31:0] datascope_di,
114 `endif
115 
116 `ifdef USE_DRP
117  input drp_rst,
118  input drp_clk,
119  input drp_en, // @aclk strobes drp_ad
120  input drp_we,
121  input [14:0] drp_addr,
122  input [15:0] drp_di,
123  output drp_rdy,
124  output [15:0] drp_do ,
125 `endif
126  output [FREQ_METER_WIDTH - 1:0] xclk_period, // relative (to 2*clk) xclk period
127  output [31:0] debug_phy,
128  output [31:0] debug_link,
129  input hclk // just for testing
130 
131 
132 );
133  localparam PHY_SPEED = 2; // SATA2
134  localparam FIFO_ADDR_WIDTH = 9;
135 
136  localparam D2H_TYPE_DMA = 0;
137  localparam D2H_TYPE_FIS_HEAD = 1;
138  localparam D2H_TYPE_OK = 2;
139  localparam D2H_TYPE_ERR = 3;
140 
141  localparam H2D_TYPE_FIS_DATA = 0; // @SuppressThisWarning VEditor unused
142  localparam H2D_TYPE_FIS_HEAD = 1;
143  localparam H2D_TYPE_FIS_LAST = 2;
144 
145  wire phy_ready; // active when GTX gets aligned output
146  wire link_established; // Received 3 back-to-back non-ALIGNp
147  wire [31:0] ll_h2d_data_in;
148  wire [1:0] ll_h2d_mask_in;
151  wire [1:0] h2d_type_out;
152 
153  wire [31:0] ll_d2h_data_out;
154  wire [ 1:0] ll_d2h_mask_out;
157  reg [1:0] d2h_type_in;
158  reg fis_over_r; // push 1 more DWORD (ignore) + type (ERR/OK) when received FIS is done/error
159 
160  reg ll_frame_req; // -> link // request for a new frame transition
161  wire ll_frame_ackn; // acknowledge for ll_frame_req
162 
163  wire ll_incom_start; // link -> // if started an incoming transaction assuming this and next 2 are single-cycle
164  wire ll_incom_done; // link -> // if incoming transition was completed
165  wire ll_incom_invalidate; // link -> // if incoming transition had errors
166  reg ll_incom_invalidate_r; // error delayed by 1 clock - if eof was incorrect (because of earlier data error)
167  // let last data dword to pass through
168 
169  wire ll_link_reset = ~phy_ready; // -> link // oob sequence is reinitiated and link now is not established or rxelecidle //TODO Alexey:mb it shall be independent
170 
172  wire [DATA_BYTE_WIDTH - 1:0] ph2ll_charisk_out; // charisk
173  wire [DATA_BYTE_WIDTH - 1:0] ph2ll_err_out; // disperr | notintable
175  wire [DATA_BYTE_WIDTH - 1:0] ll2ph_charisk_in; // charisk
176 
178  wire [1:0] h2d_fifo_re_regen;
182 
184  wire [1:0] d2h_fifo_re_regen;
188  wire h2d_fifo_rd = h2d_nempty && ll_strobe_out; // TODO: check latency in link.v
190 
192  wire d2h_fifo_wr = ll_d2h_valid || fis_over_r; // fis_over_r will push FIS end to FIFO
193  reg h2d_pending; // HBA started sending FIS to fifo
194 
195  wire rxelsfull;
196  wire rxelsempty;
197  wire xclk; // output receive clock, just to measure frequency
198 
199  wire debug_detected_alignp; // oob detects ALIGNp, but not the link layer
200  wire [31:0] debug_phy0;
201 `ifdef USE_DATASCOPE
202  wire [31:0] datascope0_di;
203 `endif
205 assign d2h_valid = d2h_nempty;
206 assign d2h_many = |d2h_fill[FIFO_ADDR_WIDTH:3]; //
207 
209 assign ll_d2h_almost_full = d2h_fill[FIFO_ADDR_WIDTH] || &d2h_fill[FIFO_ADDR_WIDTH-1:6]; // 63 dwords (maybe use :5?) - time to tell device to stop
210 
211 // assign ll_frame_req_w = !ll_frame_busy && h2d_pending && (((h2d_type == H2D_TYPE_FIS_LAST) && h2d_fifo_wr ) || (|h2d_fill[FIFO_ADDR_WIDTH : BITS_TO_START_XMIT]));
212 // Separating different types of errors, sync_escape from other problems. TODO: route individual errors to set SERR bits
213 //assign incom_invalidate = state_rcvr_eof & crc_bad & ~alignes_pair | state_rcvr_data & dword_val & rcvd_dword[CODE_WTRMP];
214 // assign phy_speed = phy_ready ? PHY_SPEED:0;
215 // assign serr_DB = phy_ready && (|ph2ll_err_out);
216 // assign serr_DH = phy_ready && (xmit_err);
218 assign serr_DB = link_established && (|ph2ll_err_out);
219 assign serr_DH = link_established && (xmit_err);
220 //
221 
222 // not yet assigned errors
223 /// assign serr_DT = phy_ready && (comreset_send); // RWC: Transport state transition error
224 /// assign serr_DS = phy_ready && (cominit_got); // RWC: Link sequence error
225 /// assign serr_DC = phy_ready && (serr_DW); // RWC: CRC error in Link layer
226 assign serr_DT = phy_ready && (0); // RWC: Transport state transition error
227 // assign serr_DS = phy_ready && (0); // RWC: Link sequence error
228 // assign serr_DC = phy_ready && (0); // RWC: CRC error in Link layer
229 // assign serr_DB = phy_ready && (0); // RWC: 10B to 8B decode error
230 assign serr_EE = phy_ready && (rxelsfull || rxelsempty);
231 assign serr_DI = phy_ready && (0); // rxelsfull); // RWC: PHY Internal Error // just debugging
232 assign serr_EP = phy_ready && (0); // rxelsempty); // RWC: Protocol Error - a violation of SATA protocol detected // just debugging
233 assign serr_EC = phy_ready && (0); // RWC: Persistent Communication or Data Integrity Error
234 assign serr_ET = phy_ready && (0); // RWC: Transient Data Integrity Error (error not recovered by the interface)
235 assign serr_EM = phy_ready && (0); // RWC: Communication between the device and host was lost but re-established
236 assign serr_EI = phy_ready && (0); // RWC: Recovered Data integrity Error
237 
240 
241 always @ (posedge clk) begin
244 end
245 assign debug_phy = debug_phy0;
246 
247 `ifdef USE_DATASCOPE
248  `ifdef DATASCOPE_INCOMING_RAW
249  assign datascope_di = {5'b0,debug_link[5],datascope0_di[25:0]};// aligns_pair tx
250  `else
251  // Mix transmitted alignes pair, but only to the closest group of 6 primitives
252  reg dbg_was_link5; // alignes pair sent
253  wire dbg_was_link5_xclk; // alignes pair sent
254 
255  always @ (posedge datascope_clk) begin
257  else if (datascope_we) dbg_was_link5 <= 0;
258  end
259 
261  .EXTRA_DLY(0)
262  ) dbg_was_link5_i (
263  .rst (rst), // input
264  .src_clk (clk), // input
265  .dst_clk (datascope_clk), // input
266  .in_pulse (debug_link[5]), // input// is actually a two-cycle
267  .out_pulse (dbg_was_link5_xclk), // output
268  .busy() // output
269  );
270 
271  assign datascope_di = {dbg_was_link5,datascope0_di[30:0]};// aligns_pair tx
272  `endif
273 `endif
274  link #(
275  .DATA_BYTE_WIDTH(4)
276  ) link (
277  .rst (rst), // input wire
278  .clk (clk), // input wire
279  // data inputs from transport layer
280  .data_in (ll_h2d_data_in), // input[31:0] wire // input data stream (if any data during OOB setting => ignored)
281  // TODO, for now not supported, all mask bits are assumed to be set
282  .data_mask_in (ll_h2d_mask_in), // input[1:0] wire
283  .data_strobe_out (ll_strobe_out), // output wire // buffer read strobe
284  .data_last_in (ll_h2d_last), // input wire // transaction's last data budle pulse
285  .data_val_in (h2d_nempty), // input wire // read data is valid (if 0 while last pulse wasn't received => need to hold the line)
286 
287  .data_out (ll_d2h_data_out), // output[31:0] wire // read data, same as related inputs
288  .data_mask_out (ll_d2h_mask_out), // output[1:0] wire // same thing - all 1s for now. TODO
289  .data_val_out (ll_d2h_valid), // output wire // count every data bundle read by transport layer, even if busy flag is set // let the transport layer handle oveflows by himself
290  .data_busy_in (ll_d2h_almost_full), // input wire // transport layer tells if its inner buffer is almost full
291  .data_last_out (), // ll_d2h_last), // output wire not used
292 
293  .frame_req (ll_frame_req), // input wire // request for a new frame transmission
294  .frame_busy (), // ll_frame_busy), // output wire // a little bit of overkill with the cound of response signals, think of throwing out 1 of them // LL tells back if it cant handle the request for now
295  .frame_ack (ll_frame_ackn), // ll_frame_ack), // output wire // LL tells if the request is transmitting
296  .frame_rej (x_rdy_collision), // output wire // or if it was cancelled because of simultanious incoming transmission
297  .frame_done_good (xmit_ok), // output wire // TL tell if the outcoming transaction is done and how it was done
298  .frame_done_bad (xmit_err), // output wire
299 
300  .incom_start (ll_incom_start), // output wire // if started an incoming transaction
301  .incom_done (ll_incom_done), // output wire // if incoming transition was completed
302  .incom_invalidate (ll_incom_invalidate), // output wire // if incoming transition had errors
303  .incom_sync_escape(syncesc_recv), // output wire - received sync escape
304  .incom_ack_good (send_R_OK), // input wire // transport layer responds on a completion of a FIS
305  .incom_ack_bad (send_R_ERR), // input wire // oob sequence is reinitiated and link now is not established or rxelecidle
306  .link_reset (ll_link_reset), // input wire // oob sequence is reinitiated and link now is not established or rxelecidle
307  .sync_escape_req (syncesc_send), // input wire // TL demands to brutally cancel current transaction
308  .sync_escape_ack (syncesc_send_done), // output wire // acknowlegement of a successful reception?
309  .incom_stop_req (pcmd_st_cleared), // input wire // TL demands to stop current receiving session
310  .link_established (link_established), // output wire
311  .link_bad_crc (serr_DC), // output wire // Bad CRC at EOF
312  // inputs from phy
313  .phy_ready (phy_ready), // input wire // phy is ready - link is established
314  // data-primitives stream from phy
315  .phy_data_in (ph2ll_data_out), // input[31:0] wire // phy_data_in
316  .phy_isk_in (ph2ll_charisk_out), // input[3:0] wire // charisk
317  .phy_err_in (ph2ll_err_out), // input[3:0] wire // disperr | notintable
318  // to phy
319  .phy_data_out (ll2ph_data_in), // output[31:0] wire
320  .phy_isk_out (ll2ph_charisk_in), // output[3:0] wire // charisk
322  );
323 
324  always @ (posedge clk) begin
326  // FIS receive D2H
327  // add head if ll_d2h_valid and (d2h_type_in == D2H_TYPE_OK) || (d2h_type_in == D2H_TYPE_ERR)? Or signal some internal error
328  if (rst || ll_incom_start) d2h_type_in <= D2H_TYPE_FIS_HEAD; // FIS head
329  else if (ll_d2h_valid) d2h_type_in <= D2H_TYPE_DMA; // FIS BODY
331 
332  if (rst) fis_over_r <= 0;
333  else fis_over_r <= (ll_incom_done || ll_incom_invalidate_r) && (d2h_type_in == D2H_TYPE_DMA); // make sure it is only once
334  // Second - generate internal error?
335 
336  // FIS transmit H2D
337  // Start if all FIS is in FIFO (last word received) or at least that many is in FIFO
338  if (rst || ll_frame_req) h2d_pending <= 0; // ?
339  else if ((h2d_type == H2D_TYPE_FIS_HEAD) && h2d_fifo_wr) h2d_pending <= 1;
340 
341  if (rst) ll_frame_req <= 0;
342 // else ll_frame_req <= ll_frame_req_w;
343  else if (h2d_pending &&
344  (((h2d_type == H2D_TYPE_FIS_LAST) && h2d_fifo_wr ) ||
346  else if (ll_frame_ackn) ll_frame_req <= 0;
347 
348 
349  end
351 
352  sata_phy #(
353 `ifdef USE_DATASCOPE
354  .ADDRESS_BITS (ADDRESS_BITS), // for datascope
357 `endif
361  ) phy (
362  .extrst (exrst), // input wire
363  .clk (clk), // output wire
364  .rst (rst), // output wire
365  .reliable_clk (reliable_clk), // input wire
366  .phy_ready (phy_ready), // output wire
367  .gtx_ready (gtx_ready), // output wire
368  .debug_cnt (), // output[11:0] wire
369  .extclk_p (extclk_p), // input wire
370  .extclk_n (extclk_n), // input wire
371  .txp_out (txp_out), // output wire
372  .txn_out (txn_out), // output wire
373  .rxp_in (rxp_in), // input wire
374  .rxn_in (rxn_in), // input wire
375  .ll_data_out (ph2ll_data_out), // output[31:0] wire
376  .ll_charisk_out (ph2ll_charisk_out), // output[3:0] wire
377  .ll_err_out (ph2ll_err_out), // output[3:0] wire
378  .ll_data_in (ll2ph_data_in), // input[31:0] wire
379  .ll_charisk_in (ll2ph_charisk_in), // input[3:0] wire
380  .set_offline (set_offline), // input
381  .comreset_send (comreset_send), // input
382  .cominit_got (cominit_got), // output wire
383  .comwake_got (serr_DW), // output wire
384  .rxelsfull (rxelsfull), // output wire
385  .rxelsempty (rxelsempty), // output wire
386 
387  .cplllock_debug (),
389  .re_aligned (serr_DS), // output reg
390  .xclk (xclk), // output receive clock, just to measure frequency
391 
392 `ifdef USE_DATASCOPE
393  .datascope_clk (datascope_clk), // output
394  .datascope_waddr (datascope_waddr), // output[9:0]
395  .datascope_we (datascope_we), // output
396  .datascope_di (datascope0_di), // output[31:0]
397  .datascope_trig (ll_incom_invalidate ), // ll_frame_ackn), // input datascope external trigger
398 // .datascope_trig (debug_link[4:0] == 'h0a), // state_send_eof // input datascope external trigger
399 /// .datascope_trig (debug_link[4:0] == 'h02), // state_rcvr_goodcrc // input datascope external trigger
400  //debug_link
401 `endif
402 
403 `ifdef USE_DRP
404  .drp_rst (drp_rst), // input
405  .drp_clk (drp_clk), // input
406  .drp_en (drp_en), // input
407  .drp_we (drp_we), // input
408  .drp_addr (drp_addr), // input[14:0]
409  .drp_di (drp_di), // input[15:0]
410  .drp_rdy (drp_rdy), // output
411  .drp_do (drp_do), // output[15:0]
412 `endif
415  );
416 
418  .WIDTH(9)
419  ) fifo_h2d_control_i (
420  .clk (clk), // input
421  .rst (rst || pcmd_st_cleared), // input
422  .wr (h2d_fifo_wr), // input
423  .rd (h2d_fifo_rd), // input
424  .nempty (h2d_nempty), // output
425  .fill_in (h2d_fill), // output[9:0]
426  .mem_wa (h2d_waddr), // output[8:0] reg
427  .mem_ra (h2d_raddr), // output[8:0] reg
428  .mem_re (h2d_fifo_re_regen[0]), // output
429  .mem_regen(h2d_fifo_re_regen[1]), // output
430  .over (), // output reg
431  .under () //h2d_under) // output reg
432  );
433 
435  .REGISTERS (1),
436  .LOG2WIDTH_WR (5),
437  .LOG2WIDTH_RD (5)
438  ) fifo_h2d_i (
439  .rclk (clk), // input
440  .raddr (h2d_raddr), // input[8:0]
441  .ren (h2d_fifo_re_regen[0]), // input
442  .regen (h2d_fifo_re_regen[1]), // input
443  .data_out ({h2d_type_out, ll_h2d_mask_in, ll_h2d_data_in}), // output[35:0]
444  .wclk (clk), // input
445  .waddr (h2d_waddr), // input[8:0]
446  .we (h2d_fifo_wr), // input
447  .web (4'hf), // input[3:0]
448  .data_in ({h2d_type,h2d_mask,h2d_data}) // input[35:0]
449  );
450 
452  .WIDTH(9)
453  ) fifo_d2h_control_i (
454  .clk (clk), // input
455  .rst (rst || pcmd_st_cleared), // input
456  .wr (d2h_fifo_wr), // input
457  .rd (d2h_fifo_rd), // input
458  .nempty (d2h_nempty), // output
459  .fill_in (d2h_fill), // output[9:0]
460  .mem_wa (d2h_waddr), // output[8:0] reg
461  .mem_ra (d2h_raddr), // output[8:0] reg
462  .mem_re (d2h_fifo_re_regen[0]), // output
463  .mem_regen(d2h_fifo_re_regen[1]), // output
464  .over (), //d2h_over), // output reg
465  .under () // output reg
466  );
467 
469  .REGISTERS (1),
470  .LOG2WIDTH_WR (5),
471  .LOG2WIDTH_RD (5)
472  ) fifo_d2h_i (
473  .rclk (clk), // input
474  .raddr (d2h_raddr), // input[8:0]
475  .ren (d2h_fifo_re_regen[0]), // input
476  .regen (d2h_fifo_re_regen[1]), // input
477  .data_out ({d2h_type, d2h_mask, d2h_data}), // output[35:0]
478  .wclk (clk), // input
479  .waddr (d2h_waddr), // input[8:0]
480  .we (d2h_fifo_wr), // input
481  .web (4'hf), // input[3:0]
482  .data_in ({d2h_type_in, ll_d2h_mask_out, ll_d2h_data_out}) // input[35:0]
483  );
484 
485  freq_meter #(
486  .WIDTH (FREQ_METER_WIDTH),
487  .PRESCALE (1)
488  ) freq_meter_i (
489  .rst (rst), // input
490  .clk (clk), // input
491  .xclk (xclk), // hclk), //xclk), // input
492  .dout (xclk_period) // output[11:0] reg
493  );
494 
495 endmodule
496 
497 
15476cplllock_debug
Definition: sata_phy.v:95
15488drp_we
Definition: sata_phy.v:114
[14:0] 15489drp_addr
Definition: sata_phy.v:115
13646ll_d2h_mask_outwire[1:0]
wire 15461txp_out
Definition: sata_phy.v:72
13641ll_h2d_mask_inwire[1:0]
fifo_d2h_control_i fifo_sameclock_control
wire 15463rxp_in
Definition: sata_phy.v:74
wire [DATA_BYTE_WIDTH * 8 - 1:0] 15465ll_data_out
Definition: sata_phy.v:78
13682debug_phy0wire[31:0]
13668d2h_raddrwire[FIFO_ADDR_WIDTH-1:0]
wire 15457gtx_ready
Definition: sata_phy.v:64
15471comreset_send
Definition: sata_phy.v:87
13684debug_last_d2h_type_inreg[1:0]
[31:0] 15493debug_sata
Definition: sata_phy.v:120
[ADDRESS_BITS-1:0] 13614datascope_waddr
reg [WIDTH - 1:0] 14209dout
Definition: freq_meter.v:35
13683datascope0_diwire[31:0]
15482datascope_we
Definition: sata_phy.v:104
13671d2h_fillwire[FIFO_ADDR_WIDTH:0]
wire [DATA_BYTE_WIDTH - 1:0] 15469ll_charisk_in
Definition: sata_phy.v:84
15477usrpll_locked_debug
Definition: sata_phy.v:96
[9 << LOG2WIDTH_WR-3-1:0] 11679data_in
13669d2h_fifo_re_regenwire[1:0]
15478re_aligned
Definition: sata_phy.v:97
13685debug_last_d2h_typereg[1:0]
15484datascope_trig
Definition: sata_phy.v:106
15470set_offline
Definition: sata_phy.v:86
13666h2d_fillwire[FIFO_ADDR_WIDTH:0]
dbg_was_link5_i pulse_cross_clock
13659ph2ll_charisk_outwire[DATA_BYTE_WIDTH-1:0]
fifo_d2h_i ram18p_var_w_var_r
15479xclk
Definition: sata_phy.v:98
wire 15462txn_out
Definition: sata_phy.v:73
13662ll2ph_charisk_inwire[DATA_BYTE_WIDTH-1:0]
13661ll2ph_data_inwire[DATA_BYTE_WIDTH*8-1:0]
wire 15456phy_ready
Definition: sata_phy.v:62
[ADDRESS_BITS-1:0] 15481datascope_waddr
Definition: sata_phy.v:103
wire 15452extrst
Definition: sata_phy.v:53
13644h2d_type_outwire[1:0]
15491drp_rdy
Definition: sata_phy.v:117
wire [DATA_BYTE_WIDTH * 8 - 1:0] 15468ll_data_in
Definition: sata_phy.v:83
[9 << LOG2WIDTH_RD-3-1:0] 11674data_out
13640ll_h2d_data_inwire[31:0]
13664h2d_fifo_re_regenwire[1:0]
wire 15455reliable_clk
Definition: sata_phy.v:59
wire [DATA_BYTE_WIDTH - 1:0] 15467ll_err_out
Definition: sata_phy.v:80
13665h2d_waddrwire[FIFO_ADDR_WIDTH-1:0]
15485drp_rst
Definition: sata_phy.v:111
15480datascope_clk
Definition: sata_phy.v:102
[31:0] 15483datascope_di
Definition: sata_phy.v:105
[FREQ_METER_WIDTH - 1:0] 13625xclk_period
13645ll_d2h_data_outwire[31:0]
wire 15460extclk_n
Definition: sata_phy.v:70
13660ph2ll_err_outwire[DATA_BYTE_WIDTH-1:0]
wire 15459extclk_p
Definition: sata_phy.v:69
wire 15472cominit_got
Definition: sata_phy.v:88
[15:0] 15490drp_di
Definition: sata_phy.v:116
13658ph2ll_data_outwire[DATA_BYTE_WIDTH*8-1:0]
wire [DATA_BYTE_WIDTH - 1:0] 15466ll_charisk_out
Definition: sata_phy.v:79
[13-LOG2WIDTH_RD:0] 11671raddr
15487drp_en
Definition: sata_phy.v:113
15494debug_detected_alignp
Definition: sata_phy.v:121
[15:0] 15492drp_do
Definition: sata_phy.v:118
freq_meter_i freq_meter
wire 15474rxelsfull
Definition: sata_phy.v:92
13670d2h_waddrwire[FIFO_ADDR_WIDTH-1:0]
wire 15464rxn_in
Definition: sata_phy.v:75
[13-LOG2WIDTH_WR:0] 11676waddr
15486drp_clk
Definition: sata_phy.v:112
13663h2d_raddrwire[FIFO_ADDR_WIDTH-1:0]
wire 15453clk
Definition: sata_phy.v:55
wire 15475rxelsempty
Definition: sata_phy.v:93
wire 15473comwake_got
Definition: sata_phy.v:89
wire [11:0] 15458debug_cnt
Definition: sata_phy.v:65
wire 15454rst
Definition: sata_phy.v:56