Commit 17ebdc3d authored by Andrey Filippov's avatar Andrey Filippov

started simulation

parent 68be8f5b
com.elphel.store.context.iverilog=iverilog_81_TopModulesOther<-@\#\#@->iverilog_83_ExtraFiles<-@\#\#@->iverilog_88_ShowNoProblem<-@\#\#@->iverilog_77_Param_Exe<-@\#\#@->iverilog_78_VVP_Exe<-@\#\#@->iverilog_99_GrepFindErrWarn<-@\#\#@->iverilog_89_ShowNoProblem<-@\#\#@->iverilog_79_GtkWave_Exe<-@\#\#@->iverilog_103_ExtraFiles<-@\#\#@->iverilog_104_IncludeDir<-@\#\#@->iverilog_101_TopModulesOther<-@\#\#@->iverilog_122_IVerilogOther<-@\#\#@->iverilog_110_ShowNoProblem<-@\#\#@->iverilog_113_SaveLogsPreprocessor<-@\#\#@->iverilog_114_SaveLogsSimulator<-@\#\#@->iverilog_105_IncludeDir<-@\#\#@->iverilog_102_TopModulesOther<-@\#\#@->iverilog_104_ExtraFiles<-@\#\#@->iverilog_119_GTKWaveSavFile<-@\#\#@->iverilog_103_TopModulesOther<-@\#\#@->iverilog_106_IncludeDir<-@\#\#@->iverilog_120_GTKWaveSavFile<-@\#\#@->iverilog_111_ShowNoProblem<-@\#\#@->iverilog_115_SaveLogsSimulator<-@\#\#@->iverilog_122_GrepFindErrWarn<-@\#\#@->iverilog_105_ExtraFiles<-@\#\#@-> com.elphel.store.context.iverilog=iverilog_81_TopModulesOther<-@\#\#@->iverilog_83_ExtraFiles<-@\#\#@->iverilog_88_ShowNoProblem<-@\#\#@->iverilog_77_Param_Exe<-@\#\#@->iverilog_78_VVP_Exe<-@\#\#@->iverilog_99_GrepFindErrWarn<-@\#\#@->iverilog_89_ShowNoProblem<-@\#\#@->iverilog_79_GtkWave_Exe<-@\#\#@->iverilog_103_ExtraFiles<-@\#\#@->iverilog_104_IncludeDir<-@\#\#@->iverilog_101_TopModulesOther<-@\#\#@->iverilog_122_IVerilogOther<-@\#\#@->iverilog_110_ShowNoProblem<-@\#\#@->iverilog_113_SaveLogsPreprocessor<-@\#\#@->iverilog_114_SaveLogsSimulator<-@\#\#@->iverilog_105_IncludeDir<-@\#\#@->iverilog_102_TopModulesOther<-@\#\#@->iverilog_104_ExtraFiles<-@\#\#@->iverilog_119_GTKWaveSavFile<-@\#\#@->iverilog_103_TopModulesOther<-@\#\#@->iverilog_106_IncludeDir<-@\#\#@->iverilog_120_GTKWaveSavFile<-@\#\#@->iverilog_111_ShowNoProblem<-@\#\#@->iverilog_115_SaveLogsSimulator<-@\#\#@->iverilog_122_GrepFindErrWarn<-@\#\#@->iverilog_105_ExtraFiles<-@\#\#@->iverilog_95_IcarusTopFile<-@\#\#@->
eclipse.preferences.version=1 eclipse.preferences.version=1
iverilog_101_TopModulesOther=glbl<-@\#\#@-> iverilog_101_TopModulesOther=glbl<-@\#\#@->
iverilog_102_TopModulesOther=glbl<-@\#\#@-> iverilog_102_TopModulesOther=glbl<-@\#\#@->
...@@ -15,7 +15,7 @@ iverilog_113_SaveLogsPreprocessor=true ...@@ -15,7 +15,7 @@ iverilog_113_SaveLogsPreprocessor=true
iverilog_114_SaveLogsSimulator=true iverilog_114_SaveLogsSimulator=true
iverilog_115_SaveLogsSimulator=true iverilog_115_SaveLogsSimulator=true
iverilog_119_GTKWaveSavFile=tb_top_02.sav iverilog_119_GTKWaveSavFile=tb_top_02.sav
iverilog_120_GTKWaveSavFile=tb_top_02.sav iverilog_120_GTKWaveSavFile=tb_ahci_01.sav
iverilog_122_GrepFindErrWarn=error|warning|sorry iverilog_122_GrepFindErrWarn=error|warning|sorry
iverilog_77_Param_Exe=/usr/local/bin/iverilog iverilog_77_Param_Exe=/usr/local/bin/iverilog
iverilog_78_VVP_Exe=/usr/local/bin/vvp iverilog_78_VVP_Exe=/usr/local/bin/vvp
...@@ -24,4 +24,5 @@ iverilog_81_TopModulesOther=glbl<-@\#\#@-> ...@@ -24,4 +24,5 @@ iverilog_81_TopModulesOther=glbl<-@\#\#@->
iverilog_83_ExtraFiles=glbl.v<-@\#\#@-> iverilog_83_ExtraFiles=glbl.v<-@\#\#@->
iverilog_88_ShowNoProblem=true iverilog_88_ShowNoProblem=true
iverilog_89_ShowNoProblem=true iverilog_89_ShowNoProblem=true
iverilog_95_IcarusTopFile=tb/tb_ahci.tf
iverilog_99_GrepFindErrWarn=error|warning|sorry iverilog_99_GrepFindErrWarn=error|warning|sorry
...@@ -316,7 +316,8 @@ module ahci_fsm ...@@ -316,7 +316,8 @@ module ahci_fsm
always @ (posedge mclk) begin always @ (posedge mclk) begin
if (hba_rst) pgm_jump_addr <= (was_hba_rst || was_port_rst) ? (was_hba_rst? LABEL_HBA_RST:LABEL_PORT_RST) : LABEL_POR; if (hba_rst) pgm_jump_addr <= (was_hba_rst || was_port_rst) ? (was_hba_rst? LABEL_HBA_RST:LABEL_PORT_RST) : LABEL_POR;
else if (async_pend_r[1]) pgm_jump_addr <= async_from_st? LABEL_ST_CLEARED : LABEL_COMINIT; // else if (async_pend_r[1]) pgm_jump_addr <= async_from_st? LABEL_ST_CLEARED : LABEL_COMINIT;
else if (async_pend_r[0]) pgm_jump_addr <= async_from_st? LABEL_ST_CLEARED : LABEL_COMINIT;
else if (fsm_transitions[0] && (!cond_met_w || !fsm_transitions[1])) pgm_jump_addr <= pgm_data[9:0]; else if (fsm_transitions[0] && (!cond_met_w || !fsm_transitions[1])) pgm_jump_addr <= pgm_data[9:0];
was_rst <= hba_rst; was_rst <= hba_rst;
......
...@@ -21,10 +21,12 @@ ...@@ -21,10 +21,12 @@
`timescale 1ns/1ps `timescale 1ns/1ps
module ahci_top#( module ahci_top#(
parameter PREFETCH_ALWAYS = 0, parameter PREFETCH_ALWAYS = 0,
parameter READ_REG_LATENCY = 2, // 0 if reg_rdata is available with reg_re/reg_addr, 2 with re/regen parameter READ_REG_LATENCY = 2, // 0 if reg_rdata is available with reg_re/reg_addr, 2 with re/regen
parameter READ_CT_LATENCY = 1, // 0 if ct_rdata is available with reg_re/reg_addr, 2 with re/regen parameter READ_CT_LATENCY = 1, // 0 if ct_rdata is available with reg_re/reg_addr, 2 with re/regen
parameter ADDRESS_BITS = 10 // number of memory address bits - now fixed. Low half - RO/RW/RWC,RW1 (2-cycle write), 2-nd just RW (single-cycle) parameter ADDRESS_BITS = 10, // number of memory address bits - now fixed. Low half - RO/RW/RWC,RW1 (2-cycle write), 2-nd just RW (single-cycle)
parameter HBA_RESET_BITS = 9, // duration of HBA reset in aclk periods (9: ~10usec)
parameter RESET_TO_FIRST_ACCESS = 1 // keep port reset until first R/W any register by software
)( )(
input aclk, // clock - should be buffered input aclk, // clock - should be buffered
input arst, // @aclk sync reset, active high input arst, // @aclk sync reset, active high
...@@ -32,8 +34,8 @@ module ahci_top#( ...@@ -32,8 +34,8 @@ module ahci_top#(
input mrst, // reset in mclk clock domain (after SATA PLL is on) input mrst, // reset in mclk clock domain (after SATA PLL is on)
// async reset for SATA (mrst will be response to it) // async reset for SATA (mrst will be response to it)
output hba_arst, // hba async reset (currently does ~ the same as port reset) output hba_arst, // hba async reset (currently does ~ the same as port reset)
output port_arst, // port0 async reset by software output port_arst, // port0 async set by software (does not include arst)
output port_arst_any, // port0 async set by software and by arst
input hclk, // AXI HP interface clock for 64-bit DMA (current - 150MHz input hclk, // AXI HP interface clock for 64-bit DMA (current - 150MHz
input hrst, // reset in hclk clock domain input hrst, // reset in hclk clock domain
// MAXIGP1 // MAXIGP1
...@@ -594,7 +596,9 @@ module ahci_top#( ...@@ -594,7 +596,9 @@ module ahci_top#(
axi_ahci_regs #( axi_ahci_regs #(
.ADDRESS_BITS(10) .ADDRESS_BITS (ADDRESS_BITS),
.HBA_RESET_BITS (HBA_RESET_BITS),
.RESET_TO_FIRST_ACCESS (RESET_TO_FIRST_ACCESS)
) axi_ahci_regs_i ( ) axi_ahci_regs_i (
.aclk (aclk), // input .aclk (aclk), // input
.arst (arst), // input .arst (arst), // input
...@@ -632,6 +636,7 @@ module ahci_top#( ...@@ -632,6 +636,7 @@ module ahci_top#(
.soft_write_data (soft_write_data), // output[31:0] .soft_write_data (soft_write_data), // output[31:0]
.soft_write_en (soft_write_en), // output .soft_write_en (soft_write_en), // output
.hba_arst (hba_arst), // output // does not include arst .hba_arst (hba_arst), // output // does not include arst
.port_arst_any (port_arst_any), // async set by arst
.port_arst (port_arst), // output // does not include arst .port_arst (port_arst), // output // does not include arst
.hba_clk (mclk), // input .hba_clk (mclk), // input
.hba_rst (mrst), // input // deasserted when mclk is stable .hba_rst (mrst), // input // deasserted when mclk is stable
......
...@@ -40,7 +40,8 @@ ...@@ -40,7 +40,8 @@
module axi_ahci_regs#( module axi_ahci_regs#(
// parameter ADDRESS_BITS = 8 // number of memory address bits // parameter ADDRESS_BITS = 8 // number of memory address bits
parameter ADDRESS_BITS = 10, // number of memory address bits - now fixed. Low half - RO/RW/RWC,RW1 (2-cycle write), 2-nd just RW (single-cycle) parameter ADDRESS_BITS = 10, // number of memory address bits - now fixed. Low half - RO/RW/RWC,RW1 (2-cycle write), 2-nd just RW (single-cycle)
parameter HBA_RESET_BITS = 9 // duration of HBA reset in aclk periods (9: ~10usec) parameter HBA_RESET_BITS = 9, // duration of HBA reset in aclk periods (9: ~10usec)
parameter RESET_TO_FIRST_ACCESS = 1 // keep port reset until first R/W any register by software
)( )(
input aclk, // clock - should be buffered input aclk, // clock - should be buffered
input arst, // @aclk sync reset, active high input arst, // @aclk sync reset, active high
...@@ -89,6 +90,7 @@ module axi_ahci_regs#( ...@@ -89,6 +90,7 @@ module axi_ahci_regs#(
// Apply next 2 resets and arst OR-ed to SATA.extrst // Apply next 2 resets and arst OR-ed to SATA.extrst
output hba_arst, // hba async reset (currently does ~ the same as port reset) output hba_arst, // hba async reset (currently does ~ the same as port reset)
output port_arst, // port0 async reset by software output port_arst, // port0 async reset by software
output port_arst_any, // port0 async reset by POR or software
// 2. HBA R/W registers, use hba clock // 2. HBA R/W registers, use hba clock
input hba_clk, // SATA clock, now 75MHz input hba_clk, // SATA clock, now 75MHz
...@@ -161,9 +163,10 @@ module axi_ahci_regs#( ...@@ -161,9 +163,10 @@ module axi_ahci_regs#(
wire [31:0] wmask = {{8{bram_wstb_r[3]}},{8{bram_wstb_r[2]}},{8{bram_wstb_r[1]}},{8{bram_wstb_r[0]}}}; wire [31:0] wmask = {{8{bram_wstb_r[3]}},{8{bram_wstb_r[2]}},{8{bram_wstb_r[1]}},{8{bram_wstb_r[0]}}};
reg [ADDRESS_BITS-1:0] bram_waddr_r; reg [ADDRESS_BITS-1:0] bram_waddr_r;
reg [HBA_RESET_BITS-1:0] hba_reset_cntr = 1; // time to keep hba_reset_r active after writing to GHC.HR reg [HBA_RESET_BITS-1:0] hba_reset_cntr; // time to keep hba_reset_r active after writing to GHC.HR
reg hba_rst_r; // hba _reset (currently does ~ the same as port reset) reg hba_rst_r; // hba _reset (currently does ~ the same as port reset)
reg port_rst_r; // port _reset by software reg port_rst_r; // port _reset by software
reg port_arst_any_r = 1; // port _reset by software or POR
wire high_sel = bram_waddr_r[ADDRESS_BITS-1]; // high addresses - use single-cycle writes without read-modify-write wire high_sel = bram_waddr_r[ADDRESS_BITS-1]; // high addresses - use single-cycle writes without read-modify-write
wire afi_cache_set_w = bram_wen_r && !high_sel && (bram_addr == HBA_PORT__AFI_CACHE__WR_CM__ADDR); wire afi_cache_set_w = bram_wen_r && !high_sel && (bram_addr == HBA_PORT__AFI_CACHE__WR_CM__ADDR);
...@@ -178,17 +181,19 @@ module axi_ahci_regs#( ...@@ -178,17 +181,19 @@ module axi_ahci_regs#(
wire port_rst_on = set_port_rst && ahci_regs_di[0]; wire port_rst_on = set_port_rst && ahci_regs_di[0];
reg was_hba_rst_aclk; // last reset was hba reset (not counting system reset) reg was_hba_rst_aclk; // last reset was hba reset (not counting system reset)
reg was_port_rst_aclk; // last reset was port reset reg was_port_rst_aclk; // last reset was port reset
reg [2:0] was_hba_rst_r; // last reset was hba reset (not counting system reset) reg [2:0] was_hba_rst_r; // last reset was hba reset (not counting system reset)
reg [2:0] was_port_rst_r; // last reset was port reset reg [2:0] was_port_rst_r; // last reset was port reset
reg [2:0] arst_r = ~0; // previous state of arst
reg wait_first_access = RESET_TO_FIRST_ACCESS; // keep port reset until first access
wire any_access = bram_wen_r || bram_ren[0];
// assign bram_addr = bram_ren[0] ? bram_raddr : (bram_wen ? bram_waddr : pre_awaddr); // assign bram_addr = bram_ren[0] ? bram_raddr : (bram_wen ? bram_waddr : pre_awaddr);
assign bram_addr = bram_ren[0] ? bram_raddr : (bram_wen_r ? bram_waddr_r : bram_waddr); assign bram_addr = bram_ren[0] ? bram_raddr : (bram_wen_r ? bram_waddr_r : bram_waddr);
assign hba_arst = hba_rst_r; // hba _reset (currently does ~ the same as port reset) assign hba_arst = hba_rst_r; // hba _reset (currently does ~ the same as port reset)
assign port_arst = port_rst_r; // port _reset by software assign port_arst = port_rst_r; // port _reset by software
assign port_arst_any = port_arst_any_r;
assign was_hba_rst = was_hba_rst_r[0]; assign was_hba_rst = was_hba_rst_r[0];
assign was_port_rst = was_port_rst_r[0]; assign was_port_rst = was_port_rst_r[0];
always @(posedge aclk) begin always @(posedge aclk) begin
...@@ -221,6 +226,17 @@ module axi_ahci_regs#( ...@@ -221,6 +226,17 @@ module axi_ahci_regs#(
end end
endgenerate endgenerate
// always @ (posedge aclk or posedge arst) begin
always @ (posedge aclk) begin
if (arst) wait_first_access <= RESET_TO_FIRST_ACCESS;
else if (any_access) wait_first_access <= 0;
if (arst) port_arst_any_r <= 1;
else if (set_port_rst) port_arst_any_r <= ahci_regs_di[0]; // write "1" - reset on, write 0 - reset off
else if (wait_first_access && any_access) port_arst_any_r <= 0;
else if (arst_r[2] && !arst_r[1]) port_arst_any_r <= wait_first_access;
end
always @(posedge aclk) begin always @(posedge aclk) begin
if (arst) hba_reset_cntr <= 0; // 1; no HBA reset at arst if (arst) hba_reset_cntr <= 0; // 1; no HBA reset at arst
else if (set_hba_rst) hba_reset_cntr <= {HBA_RESET_BITS{1'b1}}; else if (set_hba_rst) hba_reset_cntr <= {HBA_RESET_BITS{1'b1}};
...@@ -236,6 +252,9 @@ module axi_ahci_regs#( ...@@ -236,6 +252,9 @@ module axi_ahci_regs#(
if (arst || set_hba_rst) was_port_rst_aclk <= 0; if (arst || set_hba_rst) was_port_rst_aclk <= 0;
else if (port_rst_on) was_port_rst_aclk <= 1; else if (port_rst_on) was_port_rst_aclk <= 1;
if (arst) arst_r <= ~0;
else arst_r <= arst_r << 1;
end end
......
...@@ -35,7 +35,14 @@ ...@@ -35,7 +35,14 @@
/* /*
* Takes commands from axi iface as a slave, transfers data with another axi iface as a master * Takes commands from axi iface as a slave, transfers data with another axi iface as a master
*/ */
module sata_ahci_top( module sata_ahci_top#(
parameter PREFETCH_ALWAYS = 0,
// parameter READ_REG_LATENCY = 2, // 0 if reg_rdata is available with reg_re/reg_addr, 2 with re/regen
// parameter READ_CT_LATENCY = 1, // 0 if ct_rdata is available with reg_re/reg_addr, 2 with re/regen
parameter ADDRESS_BITS = 10, // number of memory address bits - now fixed. Low half - RO/RW/RWC,RW1 (2-cycle write), 2-nd just RW (single-cycle)
parameter HBA_RESET_BITS = 9, // duration of HBA reset in aclk periods (9: ~10usec)
parameter RESET_TO_FIRST_ACCESS = 1 // keep port reset until first R/W any register by software
)(
output wire sata_clk, output wire sata_clk,
output wire sata_rst, output wire sata_rst,
input wire arst, // extrst, input wire arst, // extrst,
...@@ -157,11 +164,11 @@ ...@@ -157,11 +164,11 @@
// wire sata_clk; // wire sata_clk;
// wire sata_rst; // wire sata_rst;
wire hba_arst; wire hba_arst; // @SuppressThisWarning VEditor unused
wire port_arst; // @SuppressThisWarning VEditor unused
wire port_arst_any;
wire exrst = port_arst_any; // now both hba_arst and port_arst are the same?
wire port_arst;
wire exrst = port_arst; // now both hba_arst and port_arst are the same?
// Data/type FIFO, host -> device // Data/type FIFO, host -> device
...@@ -224,10 +231,12 @@ ...@@ -224,10 +231,12 @@
ahci_top #( ahci_top #(
.PREFETCH_ALWAYS(0), .PREFETCH_ALWAYS (PREFETCH_ALWAYS),
.READ_REG_LATENCY(2), // .READ_REG_LATENCY (READ_REG_LATENCY),
.READ_CT_LATENCY(1), // .READ_CT_LATENCY (READ_CT_LATENCY),
.ADDRESS_BITS(10) .ADDRESS_BITS (ADDRESS_BITS),
.HBA_RESET_BITS (HBA_RESET_BITS),
.RESET_TO_FIRST_ACCESS (RESET_TO_FIRST_ACCESS)
) ahci_top_i ( ) ahci_top_i (
.aclk (ACLK), // input .aclk (ACLK), // input
.arst (arst), // input .arst (arst), // input
...@@ -235,6 +244,8 @@ ...@@ -235,6 +244,8 @@
.mrst (sata_rst), // input .mrst (sata_rst), // input
.hba_arst (hba_arst), // output .hba_arst (hba_arst), // output
.port_arst (port_arst), // output .port_arst (port_arst), // output
.port_arst_any (port_arst_any), // port0 async set by software and by arst
.hclk (hclk), // input .hclk (hclk), // input
.hrst (hrst), // input .hrst (hrst), // input
......
/******************************************************************************* /*******************************************************************************
* Module: action_decoder * Module: action_decoder
* Date:2016-01-19 * Date:2016-01-22
* Author: auto-generated file, see ahci_fsm_sequence.py * Author: auto-generated file, see ahci_fsm_sequence.py
* Description: Decode sequencer code to 1-hot actions * Description: Decode sequencer code to 1-hot actions
*******************************************************************************/ *******************************************************************************/
......
/******************************************************************************* /*******************************************************************************
* Module: condition_mux * Module: condition_mux
* Date:2016-01-19 * Date:2016-01-22
* Author: auto-generated file, see ahci_fsm_sequence.py * Author: auto-generated file, see ahci_fsm_sequence.py
* Description: Select condition * Description: Select condition
*******************************************************************************/ *******************************************************************************/
......
...@@ -37,49 +37,32 @@ module oob_ctrl #( ...@@ -37,49 +37,32 @@ module oob_ctrl #(
parameter CLK_SPEED_GRADE = 1 // 1 - 75 Mhz, 2 - 150Mhz, 4 - 300Mhz parameter CLK_SPEED_GRADE = 1 // 1 - 75 Mhz, 2 - 150Mhz, 4 - 300Mhz
) )
( (
// sata clk = usrclk2 input wire clk, // input wire // sata clk = usrclk2
input wire clk, input wire rst, // input wire // reset oob
// reset oob input wire gtx_ready, // input wire // gtx is ready = all resets are done
input wire rst, output wire [11:0] debug, // output[11:0] wire
// gtx is ready = all resets are done input wire rxcominitdet_in,// input wire // oob responses
input wire gtx_ready, input wire rxcomwakedet_in,// input wire // oob responses
output wire [11:0] debug, input wire rxelecidle_in, // input wire // oob responses
// oob responses output wire txcominit, // output wire // oob issues
input wire rxcominitdet_in, output wire txcomwake, // output wire // oob issues
input wire rxcomwakedet_in, output wire txelecidle, // output wire // oob issues
input wire rxelecidle_in, output wire txpcsreset_req, // output wire // partial tx reset
// oob issues input wire recal_tx_done, // input wire
output wire txcominit, output wire rxreset_req, // output wire // rx reset (after rxelecidle -> 0)
output wire txcomwake, input wire rxreset_ack, // input wire
output wire txelecidle, input wire [DATA_BYTE_WIDTH*8 - 1:0] txdata_in, // output[31:0] wire // input data stream (if any data during OOB setting => ignored)
// partial tx reset input wire [DATA_BYTE_WIDTH - 1:0] txcharisk_in, // output[3:0] wire // input data stream (if any data during OOB setting => ignored)
output wire txpcsreset_req, output wire [DATA_BYTE_WIDTH*8 - 1:0] txdata_out, // output[31:0] wire // output data stream to gtx
input wire recal_tx_done, output wire [DATA_BYTE_WIDTH - 1:0] txcharisk_out, // output[3:0] wire // output data stream to gtx
// rx reset (after rxelecidle -> 0) input wire [DATA_BYTE_WIDTH*8 - 1:0] rxdata_in, // input[31:0] wire // input data from gtx
output wire rxreset_req, input wire [DATA_BYTE_WIDTH - 1:0] rxcharisk_in, // input[3:0] wire // input data from gtx
input wire rxreset_ack, output wire [DATA_BYTE_WIDTH*8 - 1:0] rxdata_out, // output[31:0] wire // bypassed data from gtx
output wire [DATA_BYTE_WIDTH - 1:0] rxcharisk_out, // output[3:0] wire // bypassed data from gtx
// input data stream (if any data during OOB setting => ignored) input wire rxbyteisaligned,// input wire // obvious
input wire [DATA_BYTE_WIDTH*8 - 1:0] txdata_in, output wire phy_ready, // output wire // shows if channel is ready
input wire [DATA_BYTE_WIDTH - 1:0] txcharisk_in, input set_offline, // input wire // electrically idle // From
// output data stream to gtx input comreset_send // input wire // Not possible yet? // From
output wire [DATA_BYTE_WIDTH*8 - 1:0] txdata_out,
output wire [DATA_BYTE_WIDTH - 1:0] txcharisk_out,
// input data from gtx
input wire [DATA_BYTE_WIDTH*8 - 1:0] rxdata_in,
input wire [DATA_BYTE_WIDTH - 1:0] rxcharisk_in,
// bypassed data from gtx
output wire [DATA_BYTE_WIDTH*8 - 1:0] rxdata_out,
output wire [DATA_BYTE_WIDTH - 1:0] rxcharisk_out,
// obvious
input wire rxbyteisaligned,
// shows if channel is ready
output wire phy_ready,
// From
input set_offline, // electrically idle
input comreset_send // Not possible yet?
); );
// oob sequence needs to be issued // oob sequence needs to be issued
...@@ -145,62 +128,38 @@ oob #( ...@@ -145,62 +128,38 @@ oob #(
) )
oob oob
( (
.debug (debug), .debug (debug), // output [11:0] reg
// sata clk = usrclk2 .clk (clk), // input wire // sata clk = usrclk2
.clk (clk), .rst (rst), // input wire // reset oob
// reset oob .rxcominitdet_in (rxcominitdet_in), // input wire // oob responses
.rst (rst), .rxcomwakedet_in (rxcomwakedet_in), // input wire // oob responses
// oob responses .rxelecidle_in (rxelecidle_in), // input wire // oob responses
.rxcominitdet_in (rxcominitdet_in), .txcominit (txcominit), // output wire // oob issues
.rxcomwakedet_in (rxcomwakedet_in), .txcomwake (txcomwake), // output wire // oob issues
.rxelecidle_in (rxelecidle_in), .txelecidle (txelecidle_inner), // output wire // oob issues
// oob issues .txpcsreset_req (txpcsreset_req), // output wire
.txcominit (txcominit), .recal_tx_done (recal_tx_done), // input wire
.txcomwake (txcomwake), .rxreset_req (rxreset_req), // output wire
.txelecidle (txelecidle_inner), .rxreset_ack (rxreset_ack), // input wire
.txdata_in (txdata_in), // input [31:0] wire // input data stream (if any data during OOB setting => ignored)
.txpcsreset_req (txpcsreset_req), .txcharisk_in (txcharisk_in), // input [3:0] wire // input data stream (if any data during OOB setting => ignored)
.recal_tx_done (recal_tx_done), .txdata_out (txdata_out), // output [31:0] wire // output data stream to gtx
.txcharisk_out (txcharisk_out), // output [3:0] wire// output data stream to gtx
.rxreset_req (rxreset_req), .rxdata_in (rxdata_in), // input [31:0] wire // input data from gtx
.rxreset_ack (rxreset_ack), .rxcharisk_in (rxcharisk_in), // input [3:0] wire // input data from gtx
.rxdata_out (rxdata_out), // output [31:0] wire // bypassed data from gtx
// input data stream (if any data during OOB setting => ignored) .rxcharisk_out (rxcharisk_out), // output [3:0] wire // bypassed data from gtx
.txdata_in (txdata_in), .oob_start (oob_start), // input wire // oob sequence needs to be issued
.txcharisk_in (txcharisk_in), .oob_done (oob_done), // output wire // connection established, all further data is valid
// output data stream to gtx .oob_busy (oob_busy), // output wire // oob can't handle new start request
.txdata_out (txdata_out), .link_up (link_up), // output wire // doc p265, link is established after 3back-to-back non-ALIGNp
.txcharisk_out (txcharisk_out), .link_down (link_down), // output wire
// input data from gtx .cominit_req (cominit_req), // output wire // the device itself sends cominit
.rxdata_in (rxdata_in), .cominit_allow (cominit_allow), // input wire // allow to respond to cominit
.rxcharisk_in (rxcharisk_in), // status information to handle by a control block if any exists
// bypassed data from gtx .oob_incompatible (oob_incompatible),// output wire // incompatible host-device speed grades (host cannot lock to alignp)
.rxdata_out (rxdata_out), .oob_error (oob_error), // output wire // timeout in an unexpected place
.rxcharisk_out (rxcharisk_out), .oob_silence (oob_silence) // output wire // noone responds to our cominits
// oob sequence needs to be issued
.oob_start (oob_start),
// connection established, all further data is valid
.oob_done (oob_done),
// doc p265, link is established after 3back-to-back non-ALIGNp
.link_up (link_up),
.link_down (link_down),
// the device itself sends cominit
.cominit_req (cominit_req),
// allow to respond to cominit
.cominit_allow (cominit_allow),
// status information to handle by a control block if any exists
// incompatible host-device speed grades (host cannot lock to alignp)
.oob_incompatible (oob_incompatible),
// timeout in an unexpected place
.oob_error (oob_error),
// noone responds to our cominits
.oob_silence (oob_silence),
// oob can't handle new start request
.oob_busy (oob_busy)
); );
......
...@@ -204,9 +204,10 @@ localparam RXISCANRESET_TIME = 5'h1; ...@@ -204,9 +204,10 @@ localparam RXISCANRESET_TIME = 5'h1;
localparam RXEYERESET_TIME = 7'h0 + RXPMARESET_TIME + RXCDRPHRESET_TIME + RXCDRFREQRESET_TIME + RXDFELPMRESET_TIME + RXISCANRESET_TIME; localparam RXEYERESET_TIME = 7'h0 + RXPMARESET_TIME + RXCDRPHRESET_TIME + RXCDRFREQRESET_TIME + RXDFELPMRESET_TIME + RXISCANRESET_TIME;
reg [6:0] rxeyereset_cnt; reg [6:0] rxeyereset_cnt;
assign rxeyereset_done = rxeyereset_cnt == RXEYERESET_TIME; assign rxeyereset_done = rxeyereset_cnt == RXEYERESET_TIME;
always @ (posedge gtrefclk) always @ (posedge gtrefclk) begin
rxeyereset_cnt <= rxreset ? 7'h0 : rxeyereset_done ? rxeyereset_cnt : rxeyereset_cnt + 1'b1; if (rxreset) rxeyereset_cnt <= 0;
else if (!rxeyereset_done) rxeyereset_cnt <= rxeyereset_cnt + 1;
end
/* /*
* Resets * Resets
*/ */
...@@ -221,8 +222,12 @@ reg rxreset_f_rr; ...@@ -221,8 +222,12 @@ reg rxreset_f_rr;
reg txreset_f_rr; reg txreset_f_rr;
always @ (posedge gtrefclk) always @ (posedge gtrefclk)
begin begin
rxreset_f <= ~cplllock | cpllreset | rxreset_oob & gtx_configured; // rxreset_f <= ~cplllock | cpllreset | rxreset_oob & gtx_configured;
txreset_f <= ~cplllock | cpllreset; // txreset_f <= ~cplllock | cpllreset;
rxreset_f <= ~cplllock | cpllreset | ~usrpll_locked | ~sata_reset_done | rxreset_oob & gtx_configured;
txreset_f <= ~cplllock | cpllreset | ~usrpll_locked;
txreset_f_r <= txreset_f; txreset_f_r <= txreset_f;
rxreset_f_r <= rxreset_f; rxreset_f_r <= rxreset_f;
txreset_f_rr <= txreset_f_r; txreset_f_rr <= txreset_f_r;
...@@ -283,8 +288,11 @@ always @ (posedge clk or posedge extrst) ...@@ -283,8 +288,11 @@ always @ (posedge clk or posedge extrst)
assign rst = rst_r; assign rst = rst_r;
always @ (posedge clk or posedge extrst) always @ (posedge clk or posedge extrst)
if (extrst) rst_r <= 1; if (extrst) rst_r <= 1;
else rst_r <= ~|rst_timer ? 1'b0 : sata_reset_done ? 1'b0 : 1'b1; else if (~|rst_timer) rst_r <= 0;
else rst_r <= !sata_reset_done;
// else rst_r <= ~|rst_timer ? 1'b0 : sata_reset_done ? 1'b0 : 1'b1;
assign sata_reset_done = rst_timer == RST_TIMER_LIMIT; assign sata_reset_done = rst_timer == RST_TIMER_LIMIT;
...@@ -389,44 +397,47 @@ gtx_wrap #( ...@@ -389,44 +397,47 @@ gtx_wrap #(
) )
gtx_wrap gtx_wrap
( (
.debug (debug_cnt[11]), .debug (debug_cnt[11]), // output reg
.cplllock (cplllock), .cplllock (cplllock), // output wire
.cplllockdetclk (cplllockdetclk), .cplllockdetclk (cplllockdetclk), // input wire
.cpllreset (cpllreset), .cpllreset (cpllreset), // input wire
.gtrefclk (gtrefclk), .gtrefclk (gtrefclk), // input wire
.drpclk (drpclk), .drpclk (drpclk), // input wire
.rxuserrdy (rxuserrdy), .rxuserrdy (rxuserrdy), // input wire
.txuserrdy (txuserrdy), .txuserrdy (txuserrdy), // input wire
.rxusrclk (rxusrclk), .rxusrclk (rxusrclk), // input wire
.rxusrclk2 (rxusrclk2), .rxusrclk2 (rxusrclk2), // input wire
.rxp (rxp), .rxp (rxp), // input wire
.rxn (rxn), .rxn (rxn), // input wire
.rxbyteisaligned (rxbyteisaligned), .rxbyteisaligned (rxbyteisaligned), // output wire
.rxreset (rxreset), .rxreset (rxreset), // input wire
.rxcomwakedet (rxcomwakedet), .rxcomwakedet (rxcomwakedet), // output wire
.rxcominitdet (rxcominitdet), .rxcominitdet (rxcominitdet), // output wire
.rxelecidle (rxelecidle), .rxelecidle (rxelecidle), // output wire
.rxresetdone (rxresetdone), .rxresetdone (rxresetdone), // output wire
.txreset (txreset), .txreset (txreset), // input wire
.txusrclk (txusrclk), .txusrclk (txusrclk), // input wire
.txusrclk2 (txusrclk2), .txusrclk2 (txusrclk2), // input wire
.txelecidle (txelecidle), .txelecidle (txelecidle), // input wire
.txp (txp), .txp (txp), // output wire
.txn (txn), .txn (txn), // output wire
.txoutclk (txoutclk), .txoutclk (txoutclk), // output wire
.txpcsreset (txpcsreset), .txpcsreset (txpcsreset), // input wire
.txresetdone (txresetdone), .txresetdone (txresetdone), // output wire
.txcominit (txcominit), .txcominit (txcominit), // input wire
.txcomwake (txcomwake), .txcomwake (txcomwake), // input wire
.rxelsfull (rxelsfull), .rxelsfull (rxelsfull), // output wire
.rxelsempty (rxelsempty), .rxelsempty (rxelsempty), // output wire
.txdata (txdata), .txdata (txdata), // input [31:0] wire
.txcharisk (txcharisk), .txcharisk (txcharisk), // input [3:0] wire
.rxdata (rxdata), .rxdata (rxdata), // output[31:0] wire
.rxcharisk (rxcharisk), .rxcharisk (rxcharisk), // output[3:0] wire
.rxdisperr (rxdisperr), .rxdisperr (rxdisperr), // output[3:0] wire
.rxnotintable (rxnotintable) .rxnotintable (rxnotintable) // output[3:0] wire
); );
/* /*
* Interfaces * Interfaces
*/ */
......
This diff is collapsed.
...@@ -88,12 +88,12 @@ reg EXTCLK_N = 1'b0; ...@@ -88,12 +88,12 @@ reg EXTCLK_N = 1'b0;
reg [11:0] ARID_IN_r; reg [11:0] ARID_IN_r;
reg [31:0] ARADDR_IN_r; reg [31:0] ARADDR_IN_r;
reg [3:0] ARLEN_IN_r; reg [3:0] ARLEN_IN_r;
reg [2:0] ARSIZE_IN_r; reg [1:0] ARSIZE_IN_r;
reg [1:0] ARBURST_IN_r; reg [1:0] ARBURST_IN_r;
reg [11:0] AWID_IN_r; reg [11:0] AWID_IN_r;
reg [31:0] AWADDR_IN_r; reg [31:0] AWADDR_IN_r;
reg [3:0] AWLEN_IN_r; reg [3:0] AWLEN_IN_r;
reg [2:0] AWSIZE_IN_r; reg [1:0] AWSIZE_IN_r;
reg [1:0] AWBURST_IN_r; reg [1:0] AWBURST_IN_r;
reg [11:0] WID_IN_r; reg [11:0] WID_IN_r;
...@@ -135,7 +135,7 @@ reg [3:0] B_LAG; // ready signal lag in axi arete response channel (0 - RDY=1 ...@@ -135,7 +135,7 @@ reg [3:0] B_LAG; // ready signal lag in axi arete response channel (0 - RDY=1
wire [11:0] arid; wire [11:0] arid;
wire [31:0] araddr; wire [31:0] araddr;
wire [3:0] arlen; wire [3:0] arlen;
wire [2:0] arsize; wire [1:0] arsize;
wire [1:0] arburst; wire [1:0] arburst;
// SuppressWarnings VEditor : assigned in $readmem(14) system task // SuppressWarnings VEditor : assigned in $readmem(14) system task
wire [3:0] arcache; wire [3:0] arcache;
...@@ -147,7 +147,7 @@ wire arready; ...@@ -147,7 +147,7 @@ wire arready;
wire [11:0] awid; wire [11:0] awid;
wire [31:0] awaddr; wire [31:0] awaddr;
wire [3:0] awlen; wire [3:0] awlen;
wire [2:0] awsize; wire [1:0] awsize;
wire [1:0] awburst; wire [1:0] awburst;
// SuppressWarnings VEditor : assigned in $readmem() system task // SuppressWarnings VEditor : assigned in $readmem() system task
wire [3:0] awcache; wire [3:0] awcache;
...@@ -190,12 +190,12 @@ assign SIMUL_AXI_EMPTY= ~rvalid && rready && (rid==LAST_ARID); //SuppressThisWa ...@@ -190,12 +190,12 @@ assign SIMUL_AXI_EMPTY= ~rvalid && rready && (rid==LAST_ARID); //SuppressThisWa
wire [11:0] #(AXI_TASK_HOLD) ARID_IN = ARID_IN_r; wire [11:0] #(AXI_TASK_HOLD) ARID_IN = ARID_IN_r;
wire [31:0] #(AXI_TASK_HOLD) ARADDR_IN = ARADDR_IN_r; wire [31:0] #(AXI_TASK_HOLD) ARADDR_IN = ARADDR_IN_r;
wire [3:0] #(AXI_TASK_HOLD) ARLEN_IN = ARLEN_IN_r; wire [3:0] #(AXI_TASK_HOLD) ARLEN_IN = ARLEN_IN_r;
wire [2:0] #(AXI_TASK_HOLD) ARSIZE_IN = ARSIZE_IN_r; wire [1:0] #(AXI_TASK_HOLD) ARSIZE_IN = ARSIZE_IN_r;
wire [1:0] #(AXI_TASK_HOLD) ARBURST_IN = ARBURST_IN_r; wire [1:0] #(AXI_TASK_HOLD) ARBURST_IN = ARBURST_IN_r;
wire [11:0] #(AXI_TASK_HOLD) AWID_IN = AWID_IN_r; wire [11:0] #(AXI_TASK_HOLD) AWID_IN = AWID_IN_r;
wire [31:0] #(AXI_TASK_HOLD) AWADDR_IN = AWADDR_IN_r; wire [31:0] #(AXI_TASK_HOLD) AWADDR_IN = AWADDR_IN_r;
wire [3:0] #(AXI_TASK_HOLD) AWLEN_IN = AWLEN_IN_r; wire [3:0] #(AXI_TASK_HOLD) AWLEN_IN = AWLEN_IN_r;
wire [2:0] #(AXI_TASK_HOLD) AWSIZE_IN = AWSIZE_IN_r; wire [1:0] #(AXI_TASK_HOLD) AWSIZE_IN = AWSIZE_IN_r;
wire [1:0] #(AXI_TASK_HOLD) AWBURST_IN = AWBURST_IN_r; wire [1:0] #(AXI_TASK_HOLD) AWBURST_IN = AWBURST_IN_r;
wire [11:0] #(AXI_TASK_HOLD) WID_IN = WID_IN_r; wire [11:0] #(AXI_TASK_HOLD) WID_IN = WID_IN_r;
wire [31:0] #(AXI_TASK_HOLD) WDATA_IN = WDATA_IN_r; wire [31:0] #(AXI_TASK_HOLD) WDATA_IN = WDATA_IN_r;
...@@ -277,14 +277,14 @@ simul_axi_master_rdaddr ...@@ -277,14 +277,14 @@ simul_axi_master_rdaddr
.arid_in(ARID_IN[11:0]), .arid_in(ARID_IN[11:0]),
.araddr_in(ARADDR_IN[31:0]), .araddr_in(ARADDR_IN[31:0]),
.arlen_in(ARLEN_IN[3:0]), .arlen_in(ARLEN_IN[3:0]),
.arsize_in(ARSIZE_IN[2:0]), .arsize_in(ARSIZE_IN[1:0]),
.arburst_in(ARBURST_IN[1:0]), .arburst_in(ARBURST_IN[1:0]),
.arcache_in(4'b0), .arcache_in(4'b0),
.arprot_in(3'b0), // .arprot_in(2'b0), .arprot_in(3'b0), // .arprot_in(2'b0),
.arid(arid[11:0]), .arid(arid[11:0]),
.araddr(araddr[31:0]), .araddr(araddr[31:0]),
.arlen(arlen[3:0]), .arlen(arlen[3:0]),
.arsize(arsize[2:0]), .arsize(arsize[1:0]),
.arburst(arburst[1:0]), .arburst(arburst[1:0]),
.arcache(arcache[3:0]), .arcache(arcache[3:0]),
.arprot(arprot[2:0]), .arprot(arprot[2:0]),
...@@ -308,14 +308,14 @@ simul_axi_master_wraddr ...@@ -308,14 +308,14 @@ simul_axi_master_wraddr
.awid_in(AWID_IN[11:0]), .awid_in(AWID_IN[11:0]),
.awaddr_in(AWADDR_IN[31:0]), .awaddr_in(AWADDR_IN[31:0]),
.awlen_in(AWLEN_IN[3:0]), .awlen_in(AWLEN_IN[3:0]),
.awsize_in(AWSIZE_IN[2:0]), .awsize_in(AWSIZE_IN[1:0]),
.awburst_in(AWBURST_IN[1:0]), .awburst_in(AWBURST_IN[1:0]),
.awcache_in(4'b0), .awcache_in(4'b0),
.awprot_in(3'b0), //.awprot_in(2'b0), .awprot_in(3'b0), //.awprot_in(2'b0),
.awid(awid[11:0]), .awid(awid[11:0]),
.awaddr(awaddr[31:0]), .awaddr(awaddr[31:0]),
.awlen(awlen[3:0]), .awlen(awlen[3:0]),
.awsize(awsize[2:0]), .awsize(awsize[1:0]),
.awburst(awburst[1:0]), .awburst(awburst[1:0]),
.awcache(awcache[3:0]), .awcache(awcache[3:0]),
.awprot(awprot[2:0]), .awprot(awprot[2:0]),
......
[*]
[*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
[*] Sat Jan 23 07:05:52 2016
[*]
[dumpfile] "/home/andrey/git/x393_sata/simulation/tb_ahci-20160122235411900.fst"
[dumpfile_mtime] "Sat Jan 23 06:55:08 2016"
[dumpfile_size] 6269364
[savefile] "/home/andrey/git/x393_sata/tb_ahci_01.sav"
[timestart] 0
[size] 1823 1173
[pos] 1942 0
*-21.079729 6065536 -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 -1
[treeopen] tb_ahci.
[treeopen] tb_ahci.dut.
[treeopen] tb_ahci.dut.axi_hp_clk_i.
[treeopen] tb_ahci.dut.sata_top.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.link.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.
[treeopen] tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.
[treeopen] tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.
[sst_width] 402
[signals_width] 245
[sst_expanded] 1
[sst_vpaned_height] 621
@820
tb_ahci.TESTBENCH_TITLE[639:0]
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.oob.HOST_OOB_TITLE[639:0]
@28
tb_ahci.CLK
tb_ahci.RST
@22
tb_ahci.read_and_wait.address[31:0]
@28
tb_ahci.dut.TXN
tb_ahci.dut.RXN
@800200
-axi_ahci_regs
@28
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.aclk
@c00200
-axibram_read
@22
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.araddr[31:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.arvalid
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.arready
@22
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.bram_raddr[9:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.dev_ready
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.start_burst
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.bram_ren
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.bram_regen
@22
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.bram_rdata[31:0]
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.rdata[31:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.rready
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.axibram_read_i.rvalid
tb_ahci.dut.sata_top.RREADY
tb_ahci.dut.ps7_i.MAXIGP1RREADY
tb_ahci.dut.ps7_i.MAXIGP1RVALID
tb_ahci.rready
tb_ahci.rvalid
tb_ahci.rstb
@200
-
@1401200
-axibram_read
@1000200
-axi_ahci_regs
@800200
-ahci_sata_layers
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.exrst
tb_ahci.dut.sata_top.ahci_sata_layers_i.reliable_clk
tb_ahci.dut.sata_top.ahci_sata_layers_i.extclk_n
tb_ahci.dut.sata_top.ahci_sata_layers_i.rst
tb_ahci.dut.sata_top.ahci_sata_layers_i.clk
@200
-
@1000200
-ahci_sata_layers
@800200
-ahci_top
@28
tb_ahci.dut.sata_top.ahci_top_i.port_arst
tb_ahci.dut.sata_top.ahci_top_i.hba_arst
tb_ahci.dut.sata_top.ahci_top_i.phy_ready[1:0]
@1000200
-ahci_top
@800200
-axi_ahci_regs
@22
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.hba_reset_cntr[8:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.hba_arst
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.port_arst
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.port_arst_any
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.wait_first_access
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.any_access
tb_ahci.dut.sata_top.ahci_top_i.axi_ahci_regs_i.set_port_rst
@1000200
-axi_ahci_regs
@800200
-ahci_fsm
@c00022
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
@28
(0)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(1)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(2)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(3)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(4)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(5)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(6)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(7)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(8)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
(9)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_addr[9:0]
@1401200
-group_end
@22
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_data[17:0]
@28
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_preload
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_actions
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_transitions[1:0]
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_next
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_wait_act_w
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_last_act_w
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.cond_met_w
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pre_jump_w
@22
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pgm_jump_addr[9:0]
@800028
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_jump[2:0]
@28
(0)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_jump[2:0]
(1)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_jump[2:0]
(2)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fsm_jump[2:0]
@1001200
-group_end
@200
-
@28
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pfsm_started
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pxci0_clear
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.clear_bsy_set_drq
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.set_sts_7f
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.set_update_sig
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.comreset_send
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.set_sts_80
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.ssts_det_dnp
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.sirq_PC
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.serr_diag_X
@200
-
@28
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.fis_first_vld
@200
-
@28
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.pcmd_st_cleared
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.cominit_got
@c00028
tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_pend_r[1:0]
@28
(0)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_pend_r[1:0]
(1)tb_ahci.dut.sata_top.ahci_top_i.ahci_fsm_i.async_pend_r[1:0]
@1401200
-group_end
@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_from_st
@1000200
-ahci_fsm
@800200
-link
@200
-
@1000200
-link
@800200
-phy
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.comreset_send
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.usrclk
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.cpllreset
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cplllock
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxreset_req
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxreset_oob
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxreset_oob_stop
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxreset_oob
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_ready
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_configured
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxreset_f
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxreset
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtrefclk
@22
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxeyereset_cnt[6:0]
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxeyereset_done
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.clk
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rst_r
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.sata_reset_done
@200
-
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.usrpll_locked
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cplllock
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.cpllreset
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxuserrdy
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.txuserrdy
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.rxresetdone
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.txresetdone
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_ready
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.txreset
@1000200
-phy
@800200
-oob_ctrl
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.oob_ctrl.gtx_ready
@200
-
@800200
-oob
@200
-
@1000200
-oob
-oob_ctrl
@800200
-gtx
@28
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.cpllreset
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.cplllock
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.cplllockdetclk
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.txelecidle
tb_ahci.dut.sata_top.ahci_sata_layers_i.phy.gtx_wrap.txelecidle_gtx
@200
-
@1000200
-gtx
[pattern_trace] 1
[pattern_trace] 0
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