Commit 87fd75fd authored by Andrey Filippov's avatar Andrey Filippov

fixed 2 more bugs in h2d/fifo control

parent 282f41b3
...@@ -24,7 +24,12 @@ ...@@ -24,7 +24,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/> . * along with this program. If not, see <http://www.gnu.org/licenses/> .
*/ */
`timescale 1ns/1ps `timescale 1ns/1ps
//`define CHECK_LOW_H2D_FIFO // reduce actual h2d fifo size during simulation, to test h2d_ready
/** TODO:
1. Check nothing is left in H2D FIFO after data is sent - it will happen after DPATp received.
2. Make DPATp an error? It is not easy to insert 0x00000046" data FIS header before remaining data (already in FIS)
- it may also hold fis_transmit, as maximal data fis is 4x of the FIFO size.
*/
module ahci_sata_layers #( module ahci_sata_layers #(
`ifdef USE_DATASCOPE `ifdef USE_DATASCOPE
parameter ADDRESS_BITS = 10, //for datascope parameter ADDRESS_BITS = 10, //for datascope
...@@ -105,6 +110,9 @@ module ahci_sata_layers #( ...@@ -105,6 +110,9 @@ module ahci_sata_layers #(
output wire txn_out, output wire txn_out,
input wire rxp_in, input wire rxp_in,
input wire rxn_in, input wire rxn_in,
output debug_is_data, // @clk (sata clk) - last symbol was data output
output debug_dmatp, // @clk (sata clk) - received CODE_DMATP
`ifdef USE_DATASCOPE `ifdef USE_DATASCOPE
// Datascope interface (write to memory that can be software-read) // Datascope interface (write to memory that can be software-read)
output datascope_clk, output datascope_clk,
...@@ -142,6 +150,13 @@ module ahci_sata_layers #( ...@@ -142,6 +150,13 @@ module ahci_sata_layers #(
localparam H2D_TYPE_FIS_HEAD = 1; localparam H2D_TYPE_FIS_HEAD = 1;
localparam H2D_TYPE_FIS_LAST = 2; localparam H2D_TYPE_FIS_LAST = 2;
`ifdef SIMULATION
`ifdef CHECK_LOW_H2D_FIFO
localparam H2D_FIFO_THRESHOLD = 4; // to test h2d_ready - will turn off frequently, much earlier than fifo almost full
`endif
`endif
wire phy_ready; // active when GTX gets aligned output wire phy_ready; // active when GTX gets aligned output
wire link_established; // Received 3 back-to-back non-ALIGNp wire link_established; // Received 3 back-to-back non-ALIGNp
wire [31:0] ll_h2d_data_in; wire [31:0] ll_h2d_data_in;
...@@ -186,7 +201,9 @@ module ahci_sata_layers #( ...@@ -186,7 +201,9 @@ module ahci_sata_layers #(
wire [FIFO_ADDR_WIDTH:0] d2h_fill; wire [FIFO_ADDR_WIDTH:0] d2h_fill;
wire d2h_nempty; wire d2h_nempty;
wire h2d_fifo_rd = h2d_nempty && ll_strobe_out; // TODO: check latency in link.v wire h2d_fifo_rd = h2d_nempty && ll_strobe_out; // TODO: check latency in link.v
wire h2d_fifo_wr = h2d_valid; // wire h2d_fifo_wr = h2d_valid;
//2016.12.10
wire h2d_fifo_wr = h2d_valid && h2d_ready; // or should valid depend on ready in the fis_transmit?
wire d2h_fifo_rd = d2h_valid && d2h_ready; wire d2h_fifo_rd = d2h_valid && d2h_ready;
wire d2h_fifo_wr = ll_d2h_valid || fis_over_r; // fis_over_r will push FIS end to FIFO wire d2h_fifo_wr = ll_d2h_valid || fis_over_r; // fis_over_r will push FIS end to FIFO
...@@ -205,7 +222,18 @@ assign ll_h2d_last = (h2d_type_out == H2D_TYPE_FIS_LAST); ...@@ -205,7 +222,18 @@ assign ll_h2d_last = (h2d_type_out == H2D_TYPE_FIS_LAST);
assign d2h_valid = d2h_nempty; assign d2h_valid = d2h_nempty;
assign d2h_many = |d2h_fill[FIFO_ADDR_WIDTH:3]; // assign d2h_many = |d2h_fill[FIFO_ADDR_WIDTH:3]; //
assign h2d_ready = !h2d_fill[FIFO_ADDR_WIDTH] && !(&h2d_fill[FIFO_ADDR_WIDTH:3]); // assign h2d_ready = !h2d_fill[FIFO_ADDR_WIDTH] && !(&h2d_fill[FIFO_ADDR_WIDTH:3]);
// 2016:12:10 sometimes overflow happened because of a BUG
`ifdef SIMULATION
`ifdef CHECK_LOW_H2D_FIFO
assign h2d_ready = !h2d_fill[FIFO_ADDR_WIDTH] && (h2d_fill < ((1 << BITS_TO_START_XMIT) + H2D_FIFO_THRESHOLD ));
`else
assign h2d_ready = !h2d_fill[FIFO_ADDR_WIDTH] && !(&h2d_fill[FIFO_ADDR_WIDTH-1:3]); // same as with synthesis
`endif
`else
assign h2d_ready = !h2d_fill[FIFO_ADDR_WIDTH] && !(&h2d_fill[FIFO_ADDR_WIDTH-1:3]);
`endif
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 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
// 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])); // 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]));
...@@ -318,6 +346,8 @@ assign debug_phy = debug_phy0; ...@@ -318,6 +346,8 @@ assign debug_phy = debug_phy0;
// to phy // to phy
.phy_data_out (ll2ph_data_in), // output[31:0] wire .phy_data_out (ll2ph_data_in), // output[31:0] wire
.phy_isk_out (ll2ph_charisk_in), // output[3:0] wire // charisk .phy_isk_out (ll2ph_charisk_in), // output[3:0] wire // charisk
.debug_is_data (debug_is_data), // output reg @clk (sata clk) - last symbol was data output
.debug_dmatp (debug_dmatp), // output reg @clk (sata clk) - received CODE_DMATP
.debug_out (debug_link) .debug_out (debug_link)
); );
......
...@@ -190,6 +190,8 @@ module ahci_top#( ...@@ -190,6 +190,8 @@ module ahci_top#(
output irq, // CPU interrupt request output irq, // CPU interrupt request
input debug_link_send_data, // @posedge sata_clk - last symbol was data output (to count sent out)
input debug_link_dmatp, // link received DMATp from device
`ifdef USE_DATASCOPE `ifdef USE_DATASCOPE
// Datascope interface (write to memory that can be software-read) // Datascope interface (write to memory that can be software-read)
...@@ -1204,6 +1206,7 @@ wire [9:0] xmit_dbg_01; ...@@ -1204,6 +1206,7 @@ wire [9:0] xmit_dbg_01;
.soft_write_addr (soft_write_addr), // input[9:0] .soft_write_addr (soft_write_addr), // input[9:0]
.soft_write_data (soft_write_data), // input[31:0] .soft_write_data (soft_write_data), // input[31:0]
.soft_write_en (soft_write_en), // input .soft_write_en (soft_write_en), // input
.cfis (fsnd_cfis_xmit), // input command FIS - to reset dword counter
.h2d_data (h2d_data), // input[31:0] .h2d_data (h2d_data), // input[31:0]
.h2d_type (h2d_type), // input[1:0] .h2d_type (h2d_type), // input[1:0]
.h2d_valid (h2d_valid), // input .h2d_valid (h2d_valid), // input
...@@ -1212,6 +1215,8 @@ wire [9:0] xmit_dbg_01; ...@@ -1212,6 +1215,8 @@ wire [9:0] xmit_dbg_01;
.d2h_type (d2h_type), // input[1:0] .d2h_type (d2h_type), // input[1:0]
.d2h_valid (d2h_valid), // input .d2h_valid (d2h_valid), // input
.d2h_ready (d2h_ready), // input .d2h_ready (d2h_ready), // input
.debug_link_send_data(debug_link_send_data), // input
.debug_link_dmatp (debug_link_dmatp), // link received DMATp from device
.datascope_clk (datascope_clk), // output .datascope_clk (datascope_clk), // output
.datascope_waddr (datascope_waddr), // output[9:0] reg .datascope_waddr (datascope_waddr), // output[9:0] reg
.datascope_we (datascope_we), // output .datascope_we (datascope_we), // output
...@@ -1327,6 +1332,8 @@ module datascope_timing #( ...@@ -1327,6 +1332,8 @@ module datascope_timing #(
input [31:0] soft_write_data, input [31:0] soft_write_data,
input soft_write_en, input soft_write_en,
input cfis, // to reset send counter
// outgoing FISes // outgoing FISes
input [31:0] h2d_data, // 32-bit data from the system memory to HBA (dma data) input [31:0] h2d_data, // 32-bit data from the system memory to HBA (dma data)
input [ 1:0] h2d_type, // 0 - data, 1 - FIS head, 2 - FIS END (make FIS_Last?) input [ 1:0] h2d_type, // 0 - data, 1 - FIS head, 2 - FIS END (make FIS_Last?)
...@@ -1341,6 +1348,8 @@ module datascope_timing #( ...@@ -1341,6 +1348,8 @@ module datascope_timing #(
input d2h_valid, // Data available from the transport layer in FIFO input d2h_valid, // Data available from the transport layer in FIFO
input d2h_ready, // This module or DMA consumes DWORD input d2h_ready, // This module or DMA consumes DWORD
input debug_link_send_data, // @posedge mclk (sata_clk, 75MHz) - last symbol was data output (to count sent out)
input debug_link_dmatp, // link received DMATp from device
output datascope_clk, output datascope_clk,
output reg [ADDRESS_BITS-1:0] datascope_waddr, output reg [ADDRESS_BITS-1:0] datascope_waddr,
output datascope_we, output datascope_we,
...@@ -1360,6 +1369,9 @@ module datascope_timing #( ...@@ -1360,6 +1369,9 @@ module datascope_timing #(
reg [31:0] fis_data; reg [31:0] fis_data;
reg [27:0] cur_time; reg [27:0] cur_time;
reg was_h2d_last; reg was_h2d_last;
reg h2d_ready_d; // delayed h2d_ready to count 1->0 transitions
reg [ 7:0] h2d_nready_cntr; // count (infrequent) events when h2d FIFO turns off ready
// reg
wire fis_start = (h2d_valid && h2d_ready && (h2d_type == 1)) || wire fis_start = (h2d_valid && h2d_ready && (h2d_type == 1)) ||
(d2h_valid && d2h_ready && (d2h_type == 1)); (d2h_valid && d2h_ready && (d2h_type == 1));
...@@ -1367,11 +1379,44 @@ module datascope_timing #( ...@@ -1367,11 +1379,44 @@ module datascope_timing #(
// wire fis_end_we = (fis_left == 0) || fis_end; // wire fis_end_we = (fis_left == 0) || fis_end;
wire pre_we_w = fis_run && (d2h_valid?(d2h_valid && d2h_ready):(h2d_valid && h2d_ready)); wire pre_we_w = fis_run && (d2h_valid?(d2h_valid && d2h_ready):(h2d_valid && h2d_ready));
reg fis_run_d2;
reg fis_run_d3;
reg fis_run_d4; // to read non 0x39 d2h fis
reg fis_run_d5; // number of dwords sent by link a s data symbols
// reg fis_first;
reg data_fis;
reg pre_we_r; reg pre_we_r;
reg we_r; reg we_r;
wire inc_dw_cntr = fis_run && (d2h_valid?(d2h_ready && (d2h_type == 0)):(h2d_valid && h2d_ready));
wire is_cfis_w = h2d_valid && (h2d_data[ 7: 0] == 8'h27) && // valid @ fis_start
((h2d_data[23:16] == 8'h25) || // Read DMA Extended
(h2d_data[23:16] == 8'h35) || // Write DMA Extended
(h2d_data[23:16] == 8'hC8) || // Read DMA
(h2d_data[23:16] == 8'hCA)); // Write DMA
reg is_cfis_r;
reg [23:0] last_dma_cmd;
reg set_dma_count;
reg [21:0] dw_count;
wire [7:0] fis_data_w = d2h_valid ? d2h_data[7:0] : h2d_data[7:0];
reg [31:0] non_dma_act; // last D2H FIS that was not DMA activate, received after DMA/IO command
reg set_non_dma_act;
reg [21:0] link_count;
reg [21:0] link_count_latched;
reg reset_link_count; // data FIS from dma command until
reg was_link_dmatp; //
// input debug_link_dmatp, // link received DMATp from device
assign datascope_we = we_r; assign datascope_we = we_r;
assign datascope_clk = clk; assign datascope_clk = clk;
always @ (posedge clk) begin always @ (posedge clk) begin
was_h2d_last <= h2d_type[1] && h2d_valid && h2d_ready; was_h2d_last <= h2d_type[1] && h2d_valid && h2d_ready;
...@@ -1387,14 +1432,26 @@ module datascope_timing #( ...@@ -1387,14 +1432,26 @@ module datascope_timing #(
if (write_punch_time || fis_start) datascope_di <= {write_punch_time?{1'b1,punch_tag}:{3'b0,d2h_valid},cur_time}; if (write_punch_time || fis_start) datascope_di <= {write_punch_time?{1'b1,punch_tag}:{3'b0,d2h_valid},cur_time};
else if (fis_we) datascope_di <= fis_data; else if (fis_we) datascope_di <= fis_data;
else if (!fis_run && fis_run_d) datascope_di <= {19'h7fff8, fis_len}; else if (!fis_run && fis_run_d) datascope_di <= {19'h7fff8, fis_len};
else if (!fis_run_d && fis_run_d2) datascope_di <= {10'h2a8, dw_count};
else if (!fis_run_d2 && fis_run_d3) datascope_di <= {8'h55, last_dma_cmd};
else if (!fis_run_d3 && fis_run_d4) datascope_di <= non_dma_act;
else if (!fis_run_d4 && fis_run_d5) datascope_di <= {h2d_nready_cntr[7:0], was_link_dmatp, 1'b0, link_count_latched};
pre_we_r <= pre_we_w || fis_start ; pre_we_r <= pre_we_w || fis_start ;
we_r <= write_punch_time || fis_start || (fis_we ? pre_we_r : (!fis_run && fis_run_d)); // we_r <= write_punch_time || fis_start || (fis_we ? pre_we_r : (!fis_run && fis_run_d));
we_r <= write_punch_time || fis_start || (fis_we ? pre_we_r : (!fis_run && (fis_run_d || fis_run_d2 || fis_run_d3 || fis_run_d4 || fis_run_d5))); // 3 after
if (fis_start) fis_left <= FIS_LEN - 1; if (fis_start) fis_left <= FIS_LEN - 1;
else if (pre_we_w) fis_left <= fis_left - 1; else if (pre_we_w) fis_left <= fis_left - 1;
// if (fis_start) fis_first <= 1;
// else if (pre_we_w) fis_first <= 0;
if (fis_end) data_fis <= 0;
// else if (pre_we_w && fis_start) data_fis <= fis_data_w == 8'h46;
else if (fis_start) data_fis <= fis_data_w == 8'h46;
if (rst) fis_we <= 0; if (rst) fis_we <= 0;
else if (fis_start) fis_we <= 1; else if (fis_start) fis_we <= 1;
else if ((fis_left == 0) || fis_end) fis_we <= 0; else if ((fis_left == 0) || fis_end) fis_we <= 0;
...@@ -1404,6 +1461,45 @@ module datascope_timing #( ...@@ -1404,6 +1461,45 @@ module datascope_timing #(
else if (fis_end) fis_run <= 0; else if (fis_end) fis_run <= 0;
fis_run_d <= fis_run; fis_run_d <= fis_run;
fis_run_d2 <= fis_run_d;
fis_run_d3 <= fis_run_d2;
fis_run_d4 <= fis_run_d3;
fis_run_d5 <= fis_run_d4;
if (cfis) dw_count <= 0;
else if (inc_dw_cntr && data_fis) dw_count <= dw_count + 1;
if (rst) reset_link_count <= 0;
else if (cfis) reset_link_count <= 1;
else if (fis_start && (fis_data_w == 8'h46)) reset_link_count <= 0;
if (reset_link_count) link_count <= 0;
else if (debug_link_send_data) link_count <= link_count + 1; // will only be valid later, latch at next fis start
if (fis_start) link_count_latched <= link_count;
if (reset_link_count) was_link_dmatp <= 0;
else if (debug_link_dmatp) was_link_dmatp <= 1;
h2d_ready_d <= h2d_ready;
if (rst) h2d_nready_cntr <= 0;
else if (!h2d_ready && h2d_ready_d) h2d_nready_cntr <= h2d_nready_cntr+1;
if (fis_start) is_cfis_r <= is_cfis_w;
if (fis_start && is_cfis_w) last_dma_cmd[23:16] <= h2d_data[23:16]; // command code
set_dma_count <= (fis_len == 3) && h2d_valid && h2d_ready && is_cfis_r;
if (set_dma_count) last_dma_cmd[15:0] <= fis_data[15:0];
set_non_dma_act <= fis_start && d2h_valid && (fis_data_w != 8'h39);
if (set_dma_count) non_dma_act <= 32'h33333333;
else if (set_non_dma_act) non_dma_act <= fis_data;
if (fis_start) fis_len <= d2h_valid? 0 : 1; if (fis_start) fis_len <= d2h_valid? 0 : 1;
else if (pre_we_w) fis_len <= fis_len + 1; else if (pre_we_w) fis_len <= fis_len + 1;
......
...@@ -239,6 +239,8 @@ ...@@ -239,6 +239,8 @@
reg [2:0] nhrst_r; reg [2:0] nhrst_r;
wire hrst = !nhrst_r[2]; wire hrst = !nhrst_r[2];
wire debug_link_send_data; // @sata clk - last symbol was data output
wire debug_link_dmatp; // @clk (sata clk) - received CODE_DMATP
wire [FREQ_METER_WIDTH-1:0] xclk_period; wire [FREQ_METER_WIDTH-1:0] xclk_period;
`ifdef USE_DATASCOPE `ifdef USE_DATASCOPE
...@@ -403,7 +405,8 @@ ...@@ -403,7 +405,8 @@
.sctl_ipm (sctl_ipm), // output[3:0] .sctl_ipm (sctl_ipm), // output[3:0]
.sctl_spd (sctl_spd), // output[3:0] .sctl_spd (sctl_spd), // output[3:0]
.irq (irq), // output .irq (irq), // output
.debug_link_send_data (debug_link_send_data), // input @posedge sata_clk - last symbol was data output (to count sent out)
.debug_link_dmatp (debug_link_dmatp), // link received DMATp from device
`ifdef USE_DATASCOPE `ifdef USE_DATASCOPE
.datascope1_clk (datascope_clk), // input .datascope1_clk (datascope_clk), // input
.datascope1_waddr (datascope_waddr), // input[9:0] .datascope1_waddr (datascope_waddr), // input[9:0]
...@@ -489,6 +492,10 @@ ...@@ -489,6 +492,10 @@
.txn_out (TXN), // output wire .txn_out (TXN), // output wire
.rxp_in (RXP), // input wire .rxp_in (RXP), // input wire
.rxn_in (RXN), // input wire .rxn_in (RXN), // input wire
.debug_is_data (debug_link_send_data), //output @clk (sata clk) - last symbol was data output
.debug_dmatp (debug_link_dmatp), // @clk (sata clk) - received CODE_DMATP
`ifdef USE_DATASCOPE `ifdef USE_DATASCOPE
.datascope_clk (datascope_clk), // output .datascope_clk (datascope_clk), // output
.datascope_waddr (datascope_waddr), // output[9:0] .datascope_waddr (datascope_waddr), // output[9:0]
......
...@@ -47,7 +47,8 @@ module sata_device( ...@@ -47,7 +47,8 @@ module sata_device(
// reg [31:0] DEV_DATA; // reg [31:0] DEV_DATA;
integer DEV_DATA; integer DEV_DATA;
//`endif //`endif
//`define TERMINATE_DMA_H2D
//`undef TERMINATE_DMA_H2D
wire phy_ready; wire phy_ready;
wire [31:0] phy2dev_data; wire [31:0] phy2dev_data;
...@@ -569,6 +570,10 @@ task linkMonitorFIS; ...@@ -569,6 +570,10 @@ task linkMonitorFIS;
cnt = cnt + 1; cnt = cnt + 1;
if (cnt <= 2048) if (cnt <= 2048)
pause = pause + receive_data_pause[cnt]; pause = pause + receive_data_pause[cnt];
`ifdef TERMINATE_DMA_H2D
linkSendPrim("DMAT");
`endif
end end
end end
@ (posedge clk) @ (posedge clk)
......
...@@ -99,6 +99,8 @@ module link #( ...@@ -99,6 +99,8 @@ module link #(
// to phy // to phy
output wire [DATA_BYTE_WIDTH*8 - 1:0] phy_data_out, output wire [DATA_BYTE_WIDTH*8 - 1:0] phy_data_out,
output wire [DATA_BYTE_WIDTH - 1:0] phy_isk_out, // charisk output wire [DATA_BYTE_WIDTH - 1:0] phy_isk_out, // charisk
output reg debug_is_data, // @clk (sata clk) - last symbol was data output
output reg debug_dmatp, // @clk (sata clk) - received CODE_DMATP
// debug // debug
output [31:0] debug_out // output [31:0] debug_out //
); );
...@@ -580,6 +582,10 @@ begin ...@@ -580,6 +582,10 @@ begin
end end
endgenerate endgenerate
always @ (posedge clk) begin
debug_dmatp <= rcvd_dword[CODE_DMATP];
end
// select which primitive shall be sent // select which primitive shall be sent
wire [PRIM_NUM - 1:0] select_prim; wire [PRIM_NUM - 1:0] select_prim;
assign select_prim[CODE_SYNCP] = ~alignes_pair & (state_idle | state_sync_esc | state_rcvr_wait | state_reset); assign select_prim[CODE_SYNCP] = ~alignes_pair & (state_idle | state_sync_esc | state_rcvr_wait | state_reset);
...@@ -618,6 +624,10 @@ always @ (posedge clk) ...@@ -618,6 +624,10 @@ always @ (posedge clk)
{DATA_BYTE_WIDTH*8{select_prim[CODE_CRC]}} & prim_data[CODE_CRC] | {DATA_BYTE_WIDTH*8{select_prim[CODE_CRC]}} & prim_data[CODE_CRC] |
{DATA_BYTE_WIDTH*8{select_prim[CODE_DATA]}} & prim_data[CODE_DATA]; {DATA_BYTE_WIDTH*8{select_prim[CODE_DATA]}} & prim_data[CODE_DATA];
always @ (posedge clk)
debug_is_data <= select_prim[CODE_DATA];
always @ (posedge clk) always @ (posedge clk)
to_phy_isk <= rst | ~select_prim[CODE_DATA] & ~select_prim[CODE_CRC] ? {{(DATA_BYTE_WIDTH - 1){1'b0}}, 1'b1} : {DATA_BYTE_WIDTH{1'b0}} ; to_phy_isk <= rst | ~select_prim[CODE_DATA] & ~select_prim[CODE_CRC] ? {{(DATA_BYTE_WIDTH - 1){1'b0}}, 1'b1} : {DATA_BYTE_WIDTH{1'b0}} ;
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
, .INIT_08 (256'h000000000024000600000000000000000000000080000C000000000080000800) , .INIT_08 (256'h000000000024000600000000000000000000000080000C000000000080000800)
, .INIT_09 (256'h000000000000000000000000000000000000000000000000FFFFFFFF00000000) , .INIT_09 (256'h000000000000000000000000000000000000000000000000FFFFFFFF00000000)
, .INIT_0B (256'h0000000000000000000000000000003300000000000000000000000000000000) , .INIT_0B (256'h0000000000000000000000000000003300000000000000000000000000000000)
, .INIT_0C (256'h00000000000000000000000000000000000000000101000B001000000001FFFE) , .INIT_0C (256'h000000000000000000000000000000000000000001010011001000000001FFFE)
, .INIT_0D (256'h000001000000000000000040000000000001FFFE000000008000000000000000) , .INIT_0D (256'h000001000000000000000040000000000001FFFE000000008000000000000000)
, .INIT_0E (256'h0000000000000000000000000000000000000000000000000000000040000001) , .INIT_0E (256'h0000000000000000000000000000000000000000000000000000000040000001)
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
// RO: HBA Revision ID // RO: HBA Revision ID
localparam PCI_Header__RID__RID__ADDR = 'h62; localparam PCI_Header__RID__RID__ADDR = 'h62;
localparam PCI_Header__RID__RID__MASK = 'hff; localparam PCI_Header__RID__RID__MASK = 'hff;
localparam PCI_Header__RID__RID__DFLT = 'hb; localparam PCI_Header__RID__RID__DFLT = 'h11;
// RO: Base Class Code: 1 - Mass Storage Device // RO: Base Class Code: 1 - Mass Storage Device
localparam PCI_Header__CC__BCC__ADDR = 'h62; localparam PCI_Header__CC__BCC__ADDR = 'h62;
localparam PCI_Header__CC__BCC__MASK = 'hff000000; localparam PCI_Header__CC__BCC__MASK = 'hff000000;
......
...@@ -31,7 +31,7 @@ __status__ = "Development" ...@@ -31,7 +31,7 @@ __status__ = "Development"
""" """
**** Modify next value for new file versions, re-run this file ***** **** Modify next value for new file versions, re-run this file *****
""" """
RID = 0x0b # Revision ID RID = 0x011 # Revision ID
VID = 0xfffe # What to use for non-PCI "vendorID"? VID = 0xfffe # What to use for non-PCI "vendorID"?
DID = 0x0001 DID = 0x0001
SSVID = 0xfffe SSVID = 0xfffe
......
...@@ -1497,6 +1497,17 @@ if __name__ == "__main__": ...@@ -1497,6 +1497,17 @@ if __name__ == "__main__":
""" """
camogm_test -d /dev/sda2 -b 4194304 -c 30000
dd if=/dev/sda skip=257142656 count=1 | hexdump -e '"%08_ax: "' -e ' 16/4 "%08x " "\n"'
cat /sys/devices/soc0/amba@0/80000000.elphel-ahci/lba_current
cat /sys/devices/soc0/amba@0/80000000.elphel-ahci/lba_start
camogm_test -d /dev/sda2 -b 4194304 -c 10000
x393sata.py x393sata.py
modprobe ahci_elphel & modprobe ahci_elphel &
sleep 2 sleep 2
...@@ -1520,6 +1531,7 @@ import x393_mem ...@@ -1520,6 +1531,7 @@ import x393_mem
mem = x393_mem.X393Mem(1,0,1) mem = x393_mem.X393Mem(1,0,1)
sata = x393sata.x393sata() sata = x393sata.x393sata()
hex(mem.read_mem(sata.get_reg_address('PCI_Header__RID'))) hex(mem.read_mem(sata.get_reg_address('PCI_Header__RID')))
hex([((mem.read_mem(0x80000ffc) >> 10) & 0xffc) + 0x80001000,mem.mem_dump (0x80001000, 0x400,4),sata.reg_status()][0])
sata.setup_pio_read_identify_command() sata.setup_pio_read_identify_command()
......
...@@ -1120,6 +1120,9 @@ localparam ATA_RDMA_EXT = 'h25; // Read DMA devices that support 48-bit Addressi ...@@ -1120,6 +1120,9 @@ localparam ATA_RDMA_EXT = 'h25; // Read DMA devices that support 48-bit Addressi
(ATA_RDMA_EXT << 16) | // Command = 0x25 (READ_DMA_EXT) (ATA_RDMA_EXT << 16) | // Command = 0x25 (READ_DMA_EXT)
( 0 << 24); // features = 0 ? ( 0 << 24); // features = 0 ?
// All other 4 DWORDs are 0 for this command // All other 4 DWORDs are 0 for this command
sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // count
// Set PRDT (four items) // Set PRDT (four items)
// PRDT #1 // PRDT #1
sysmem[((COMMAND_TABLE + PRD_OFFSET) >> 2) + 0] = SYS_MEM_START + IDENTIFY_BUF; // not shifted sysmem[((COMMAND_TABLE + PRD_OFFSET) >> 2) + 0] = SYS_MEM_START + IDENTIFY_BUF; // not shifted
...@@ -1178,6 +1181,7 @@ localparam ATA_RDMA_EXT = 'h25; // Read DMA devices that support 48-bit Addressi ...@@ -1178,6 +1181,7 @@ localparam ATA_RDMA_EXT = 'h25; // Read DMA devices that support 48-bit Addressi
sysmem[(COMMAND_TABLE >> 2) + 1] = lba & 'hffffff; // 24 LSBs of LBA (48-bit require different ATA command) sysmem[(COMMAND_TABLE >> 2) + 1] = lba & 'hffffff; // 24 LSBs of LBA (48-bit require different ATA command)
sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // 1 logical sector (0 means 256) sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // 1 logical sector (0 means 256)
// All other DWORDs are 0 for this command // All other DWORDs are 0 for this command
sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // count
// Set PRDT (four items) // Set PRDT (four items)
// PRDT #1 // PRDT #1
sysmem[((COMMAND_TABLE + PRD_OFFSET) >> 2) + 0] = SYS_MEM_START + IDENTIFY_BUF; // not shifted sysmem[((COMMAND_TABLE + PRD_OFFSET) >> 2) + 0] = SYS_MEM_START + IDENTIFY_BUF; // not shifted
...@@ -1227,6 +1231,7 @@ localparam ATA_RDMA_EXT = 'h25; // Read DMA devices that support 48-bit Addressi ...@@ -1227,6 +1231,7 @@ localparam ATA_RDMA_EXT = 'h25; // Read DMA devices that support 48-bit Addressi
sysmem[(COMMAND_TABLE >> 2) + 1] = lba & 'hffffff; // 24 LSBs of LBA (48-bit require different ATA command) sysmem[(COMMAND_TABLE >> 2) + 1] = lba & 'hffffff; // 24 LSBs of LBA (48-bit require different ATA command)
sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // 1 logical sector (0 means 256) sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // 1 logical sector (0 means 256)
// All other DWORDs are 0 for this command // All other DWORDs are 0 for this command
sysmem[(COMMAND_TABLE >> 2) + 3] = 1; // count
// Set PRDT (four items) // Set PRDT (four items)
// PRDT #1 // PRDT #1
sysmem[((COMMAND_TABLE + PRD_OFFSET) >> 2) + 0] = SYS_MEM_START + IDENTIFY_BUF; // not shifted sysmem[((COMMAND_TABLE + PRD_OFFSET) >> 2) + 0] = SYS_MEM_START + IDENTIFY_BUF; // not shifted
......
[*] [*]
[*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI [*] GTKWave Analyzer v3.3.78 (w)1999-2016 BSI
[*] Wed Mar 9 06:40:17 2016 [*] Sat Dec 10 21:15:47 2016
[*] [*]
[dumpfile] "/home/andrey/git/x393_sata/simulation/tb_ahci-20160308230522426.fst" [dumpfile] "/home/eyesis/git/elphel393/fpga-elphel/x393_sata/simulation/tb_ahci-20161210125949381.fst"
[dumpfile_mtime] "Wed Mar 9 06:07:30 2016" [dumpfile_mtime] "Sat Dec 10 20:00:43 2016"
[dumpfile_size] 14983742 [dumpfile_size] 13297893
[savefile] "/home/andrey/git/x393_sata/tb_ahci_01.sav" [savefile] "/home/eyesis/git/elphel393/fpga-elphel/x393_sata/tb_ahci_01.sav"
[timestart] 32861000 [timestart] 48410000
[size] 1823 1180 [size] 1814 1171
[pos] 1920 0 [pos] 68 0
*-15.050610 32927500 32882854 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 *-21.141130 55007308 32882854 55953880 57700372 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] tb_ahci. [treeopen] tb_ahci.
[treeopen] tb_ahci.axi_read_addr. [treeopen] tb_ahci.axi_read_addr.
[treeopen] tb_ahci.dev. [treeopen] tb_ahci.dev.
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link.crc. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link.crc.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link.scrambler. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link.scrambler.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.datascope_incoming_i. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.datascope_incoming_i.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.genblk1. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.genblk1.
...@@ -40,10 +39,8 @@ ...@@ -40,10 +39,8 @@
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_gpl.channel.rx. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_gpl.channel.rx.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_gpl.channel.rx.dataiface. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_gpl.channel.rx.dataiface.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_gpl.channel.tx. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_gpl.channel.tx.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.oob. [treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.oob.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_ctrl_stat_i. [treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_ctrl_stat_i.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_dma_i.ahci_dma_rd_fifo_i. [treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_dma_i.ahci_dma_rd_fifo_i.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_dma_i.ahci_dma_rd_fifo_i.ahci_dma_rd_stuff_i. [treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_dma_i.ahci_dma_rd_fifo_i.ahci_dma_rd_stuff_i.
...@@ -63,10 +60,10 @@ ...@@ -63,10 +60,10 @@
[treeopen] tb_ahci.simul_axi_hp_wr_i.waddr_i. [treeopen] tb_ahci.simul_axi_hp_wr_i.waddr_i.
[treeopen] tb_ahci.simul_axi_hp_wr_i.wdata_i. [treeopen] tb_ahci.simul_axi_hp_wr_i.wdata_i.
[treeopen] tb_ahci.simul_axi_read_i. [treeopen] tb_ahci.simul_axi_read_i.
[sst_width] 259 [sst_width] 311
[signals_width] 250 [signals_width] 312
[sst_expanded] 1 [sst_expanded] 1
[sst_vpaned_height] 687 [sst_vpaned_height] 485
@820 @820
tb_ahci.TESTBENCH_TITLE[639:0] tb_ahci.TESTBENCH_TITLE[639:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.oob.HOST_OOB_TITLE[639:0] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.oob.HOST_OOB_TITLE[639:0]
...@@ -1711,7 +1708,7 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_g ...@@ -1711,7 +1708,7 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.gtx_g
-drp -drp
@1401200 @1401200
-axi_ahci_regs -axi_ahci_regs
@800200 @c00200
-ahci_fsm -ahci_fsm
@28 @28
tb_ahci.dut.sata_top.ahci_top_i.hba_arst tb_ahci.dut.sata_top.ahci_top_i.hba_arst
...@@ -2004,9 +2001,9 @@ tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_pend_r[1:0] ...@@ -2004,9 +2001,9 @@ tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_pend_r[1:0]
@28 @28
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_ackn tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_ackn
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_from_st tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_from_st
@1000200 @1401200
-ahci_fsm -ahci_fsm
@c00200 @800200
-ahci_fis_receive -ahci_fis_receive
@22 @22
tb_ahci.dut.sata_top.ahci_top_i.ahci_fis_receive_i.hba_data_in[31:0] tb_ahci.dut.sata_top.ahci_top_i.ahci_fis_receive_i.hba_data_in[31:0]
...@@ -2104,7 +2101,7 @@ tb_ahci.dut.sata_top.ahci_top_i.ahci_fis_receive_i.fis_dcount[3:0] ...@@ -2104,7 +2101,7 @@ tb_ahci.dut.sata_top.ahci_top_i.ahci_fis_receive_i.fis_dcount[3:0]
(3)tb_ahci.dut.sata_top.ahci_top_i.ahci_fis_receive_i.fis_dcount[3:0] (3)tb_ahci.dut.sata_top.ahci_top_i.ahci_fis_receive_i.fis_dcount[3:0]
@1001200 @1001200
-group_end -group_end
@1401200 @1000200
-ahci_fis_receive -ahci_fis_receive
@800200 @800200
-ahci_fis_transmit -ahci_fis_transmit
...@@ -2539,7 +2536,6 @@ tb_ahci.simul_axi_hp_wr_i.waddr_i.data_in[49:0] ...@@ -2539,7 +2536,6 @@ tb_ahci.simul_axi_hp_wr_i.waddr_i.data_in[49:0]
@28 @28
tb_ahci.simul_axi_hp_wr_i.waddr_i.re tb_ahci.simul_axi_hp_wr_i.waddr_i.re
@22 @22
tb_ahci.simul_axi_hp_wr_i.waddr_i.fifo_fill[5:0]
tb_ahci.simul_axi_hp_wr_i.waddr_i.fill[5:0] tb_ahci.simul_axi_hp_wr_i.waddr_i.fill[5:0]
@1000200 @1000200
-fifo_waddr -fifo_waddr
...@@ -2552,7 +2548,6 @@ tb_ahci.simul_axi_hp_wr_i.wdata_i.data_in[78:0] ...@@ -2552,7 +2548,6 @@ tb_ahci.simul_axi_hp_wr_i.wdata_i.data_in[78:0]
@28 @28
tb_ahci.simul_axi_hp_wr_i.wdata_i.re tb_ahci.simul_axi_hp_wr_i.wdata_i.re
@22 @22
tb_ahci.simul_axi_hp_wr_i.wdata_i.fifo_fill[7:0]
tb_ahci.simul_axi_hp_wr_i.wdata_i.fill[7:0] tb_ahci.simul_axi_hp_wr_i.wdata_i.fill[7:0]
@1000200 @1000200
-fifo_wdata -fifo_wdata
...@@ -3855,11 +3850,8 @@ tb_ahci.MEM_SEL ...@@ -3855,11 +3850,8 @@ tb_ahci.MEM_SEL
tb_ahci.sysmem_dworda_rd[31:2] tb_ahci.sysmem_dworda_rd[31:2]
@c00200 @c00200
-rdata_fifo -rdata_fifo
@28
tb_ahci.simul_axi_hp_rd_i.rdata_i.wem
@22 @22
tb_ahci.simul_axi_hp_rd_i.rdata_i.fill[7:0] tb_ahci.simul_axi_hp_rd_i.rdata_i.fill[7:0]
tb_ahci.simul_axi_hp_rd_i.rdata_i.fifo_fill[7:0]
@28 @28
tb_ahci.simul_axi_hp_rd_i.rdata_i.ram_nempty tb_ahci.simul_axi_hp_rd_i.rdata_i.ram_nempty
tb_ahci.simul_axi_hp_rd_i.rdata_i.out_full tb_ahci.simul_axi_hp_rd_i.rdata_i.out_full
...@@ -3921,6 +3913,65 @@ tb_ahci.dut.sata_top.ahci_top_i.datascope_di[31:0] ...@@ -3921,6 +3913,65 @@ tb_ahci.dut.sata_top.ahci_top_i.datascope_di[31:0]
@1401200 @1401200
-datascope0 -datascope0
@800200 @800200
-ahci_sata_layers
-fifo_h2d
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.wclk
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.data_in[35:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.we
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.waddr[8:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.data_out[35:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.rclk
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.raddr[8:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.regen
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_i.ren
@1000200
-fifo_h2d
@800200
-fifo_h2d_control
-up
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.h2d_ready
@29
tb_ahci.dut.sata_top.ahci_sata_layers_i.h2d_valid
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.ll_frame_req
tb_ahci.dut.sata_top.ahci_sata_layers_i.h2d_fifo_wr
@200
-
@1000200
-up
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.clk
@8022
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.fill_in[9:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.fill_ram[9:0]
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.mem_ra[8:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.mem_re
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.mem_regen
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.mem_wa[8:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.nempty
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.over
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.ramo_full
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.rd
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.rreg_full
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.rst
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.under
tb_ahci.dut.sata_top.ahci_sata_layers_i.fifo_h2d_control_i.wr
@1000200
-fifo_h2d_control
-ahci_sata_layers
@800200
-link -link
@28 @28
tb_ahci.dut.sata_top.ahci_sata_layers_i.link.data_val_out tb_ahci.dut.sata_top.ahci_sata_layers_i.link.data_val_out
...@@ -4562,7 +4613,6 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cpllreset ...@@ -4562,7 +4613,6 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cpllreset
@22 @22
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtrefclk tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtrefclk
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.txoutclk tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.txoutclk
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.usrclk
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.usrclk2 tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.usrclk2
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.usrpll_locked tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.usrpll_locked
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cpllreset tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cpllreset
...@@ -5038,57 +5088,9 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_en ...@@ -5038,57 +5088,9 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_en
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_rdy_gtx tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_rdy_gtx
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_rdy tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_rdy
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_sel[1:0] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.drp_sel[1:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_en
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_we
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_addr[7:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.timer_start
@8022
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.timer_cntr[15:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.early_cntr[14:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.late_cntr[14:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.timer_run
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_addr_r[7:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_wr_r
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_mask_wr
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.drp_timer_wr
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.dmask[31:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.RXOUTCLK tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.gtxe2_channel_wrapper.RXOUTCLK
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.xclk @c00200
@22 -tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.sipo_di[19:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.sipo_n[19:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.sipo_np[19:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.sipo_p[19:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.sipo_pp[19:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.input_early_r
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.input_late_r
@c00022
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
@28
(0)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(1)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(2)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(3)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(4)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(5)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(6)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(7)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(8)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(9)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(10)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(11)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(12)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(13)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(14)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
(15)tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.sipo_to_xclk_measure_i.other_control[15:0]
@1401200 @1401200
-group_end -group_end
@200 @200
...@@ -5306,7 +5308,7 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.txdata_enc_out[19:0] ...@@ -5306,7 +5308,7 @@ tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.txdata_enc_out[19:0]
-gtx8x10enc -gtx8x10enc
@1401200 @1401200
-gtx -gtx
@800200 @c00200
-device -device
@820 @820
tb_ahci.dev.DEV_TITLE[639:0] tb_ahci.dev.DEV_TITLE[639:0]
...@@ -5322,7 +5324,7 @@ tb_ahci.dev.linkTransmitFIS.cnt ...@@ -5322,7 +5324,7 @@ tb_ahci.dev.linkTransmitFIS.cnt
tb_ahci.dev.DEV_DATA tb_ahci.dev.DEV_DATA
@1000200 @1000200
-linkTransmitFIS -linkTransmitFIS
@201 @200
- -
@820 @820
tb_ahci.dev.linkMonitorFIS.rprim[111:0] tb_ahci.dev.linkMonitorFIS.rprim[111:0]
...@@ -5373,11 +5375,50 @@ tb_ahci.dev.phy.gtx_wrapper.gtx_gpl.channel.tx.TXN ...@@ -5373,11 +5375,50 @@ tb_ahci.dev.phy.gtx_wrapper.gtx_gpl.channel.tx.TXN
-dev_phy -dev_phy
@820 @820
tb_ahci.dev.linkSendPrim.type[111:0] tb_ahci.dev.linkSendPrim.type[111:0]
@1000200 @1401200
-device -device
@800200 @800200
-datascope -datascope
@28 @28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.was_link_dmatp
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.reset_link_count
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.debug_link_send_data
@22
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.link_count[21:0]
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.link_count_latched[21:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.set_non_dma_act
@22
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.non_dma_act[31:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.is_cfis_r
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.is_cfis_w
@22
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_len[12:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.set_dma_count
@22
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_data[31:0]
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.last_dma_cmd[23:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.d2h_type[1:0]
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.h2d_type[1:0]
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.pre_we_w
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.pre_we_r
@22
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.dw_count[21:0]
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_len[12:0]
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_data_w[7:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_end
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_run
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_run_d
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_run_d2
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.cfis
@22
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_data[31:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.data_fis
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.write_punch_time tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.write_punch_time
tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_start tb_ahci.dut.sata_top.ahci_top_i.datascope_timing_i.fis_start
tb_ahci.dut.sata_top.ahci_top_i.datascope_we tb_ahci.dut.sata_top.ahci_top_i.datascope_we
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment