Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
x393_sata
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
x393_sata
Commits
17ebdc3d
Commit
17ebdc3d
authored
Jan 23, 2016
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
started simulation
parent
68be8f5b
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1121 additions
and
185 deletions
+1121
-185
com.elphel.vdt.iverilog.prefs
.settings/com.elphel.vdt.iverilog.prefs
+3
-2
ahci_fsm.v
ahci/ahci_fsm.v
+2
-1
ahci_top.v
ahci/ahci_top.v
+12
-7
axi_ahci_regs.v
ahci/axi_ahci_regs.v
+30
-11
sata_ahci_top.v
ahci/sata_ahci_top.v
+20
-9
action_decoder.v
generated/action_decoder.v
+1
-1
condition_mux.v
generated/condition_mux.v
+1
-1
oob_ctrl.v
host/oob_ctrl.v
+58
-99
sata_phy.v
host/sata_phy.v
+55
-44
tb_ahci.tf
tb/tb_ahci.tf
+675
-0
tb_top.v
tb/tb_top.v
+10
-10
tb_ahci_01.sav
tb_ahci_01.sav
+254
-0
No files found.
.settings/com.elphel.vdt.iverilog.prefs
View file @
17ebdc3d
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
iverilog_101_TopModulesOther=glbl<-@\#\#@->
iverilog_102_TopModulesOther=glbl<-@\#\#@->
...
...
@@ -15,7 +15,7 @@ iverilog_113_SaveLogsPreprocessor=true
iverilog_114_SaveLogsSimulator=true
iverilog_115_SaveLogsSimulator=true
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_77_Param_Exe=/usr/local/bin/iverilog
iverilog_78_VVP_Exe=/usr/local/bin/vvp
...
...
@@ -24,4 +24,5 @@ iverilog_81_TopModulesOther=glbl<-@\#\#@->
iverilog_83_ExtraFiles=glbl.v<-@\#\#@->
iverilog_88_ShowNoProblem=true
iverilog_89_ShowNoProblem=true
iverilog_95_IcarusTopFile=tb/tb_ahci.tf
iverilog_99_GrepFindErrWarn=error|warning|sorry
ahci/ahci_fsm.v
View file @
17ebdc3d
...
...
@@ -316,7 +316,8 @@ module ahci_fsm
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
;
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
]
;
was_rst
<=
hba_rst
;
...
...
ahci/ahci_top.v
View file @
17ebdc3d
...
...
@@ -21,10 +21,12 @@
`timescale
1
ns
/
1
ps
module
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
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
)(
input
aclk
,
// clock - should be buffered
input
arst
,
// @aclk sync reset, active high
...
...
@@ -32,8 +34,8 @@ module ahci_top#(
input
mrst
,
// reset in mclk clock domain (after SATA PLL is on)
// async reset for SATA (mrst will be response to it)
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
hrst
,
// reset in hclk clock domain
// MAXIGP1
...
...
@@ -594,7 +596,9 @@ module ahci_top#(
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
(
.
aclk
(
aclk
)
,
// input
.
arst
(
arst
)
,
// input
...
...
@@ -632,6 +636,7 @@ module ahci_top#(
.
soft_write_data
(
soft_write_data
)
,
// output[31:0]
.
soft_write_en
(
soft_write_en
)
,
// output
.
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
.
hba_clk
(
mclk
)
,
// input
.
hba_rst
(
mrst
)
,
// input // deasserted when mclk is stable
...
...
ahci/axi_ahci_regs.v
View file @
17ebdc3d
...
...
@@ -40,7 +40,8 @@
module
axi_ahci_regs
#(
// 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
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
arst
,
// @aclk sync reset, active high
...
...
@@ -89,6 +90,7 @@ module axi_ahci_regs#(
// 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
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
input
hba_clk
,
// SATA clock, now 75MHz
...
...
@@ -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
]
}}};
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
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
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#(
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_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_port_rst_r
;
// 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_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_r
?
bram_waddr_r
:
bram_waddr
)
;
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
was_hba_rst
=
was_hba_rst_r
[
0
]
;
assign
was_port_rst
=
was_port_rst_r
[
0
]
;
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
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_port_rst
=
was_port_rst_r
[
0
]
;
always
@
(
posedge
aclk
)
begin
...
...
@@ -221,6 +226,17 @@ module axi_ahci_regs#(
end
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
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
}};
...
...
@@ -236,6 +252,9 @@ module axi_ahci_regs#(
if
(
arst
||
set_hba_rst
)
was_port_rst_aclk
<=
0
;
else
if
(
port_rst_on
)
was_port_rst_aclk
<=
1
;
if
(
arst
)
arst_r
<=
~
0
;
else
arst_r
<=
arst_r
<<
1
;
end
...
...
ahci/sata_ahci_top.v
View file @
17ebdc3d
...
...
@@ -35,7 +35,14 @@
/*
* 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_rst
,
input
wire
arst
,
// extrst,
...
...
@@ -157,11 +164,11 @@
// wire sata_clk;
// 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
...
...
@@ -224,10 +231,12 @@
ahci_top
#(
.
PREFETCH_ALWAYS
(
0
)
,
.
READ_REG_LATENCY
(
2
)
,
.
READ_CT_LATENCY
(
1
)
,
.
ADDRESS_BITS
(
10
)
.
PREFETCH_ALWAYS
(
PREFETCH_ALWAYS
)
,
// .READ_REG_LATENCY (READ_REG_LATENCY),
// .READ_CT_LATENCY (READ_CT_LATENCY),
.
ADDRESS_BITS
(
ADDRESS_BITS
)
,
.
HBA_RESET_BITS
(
HBA_RESET_BITS
)
,
.
RESET_TO_FIRST_ACCESS
(
RESET_TO_FIRST_ACCESS
)
)
ahci_top_i
(
.
aclk
(
ACLK
)
,
// input
.
arst
(
arst
)
,
// input
...
...
@@ -235,6 +244,8 @@
.
mrst
(
sata_rst
)
,
// input
.
hba_arst
(
hba_arst
)
,
// output
.
port_arst
(
port_arst
)
,
// output
.
port_arst_any
(
port_arst_any
)
,
// port0 async set by software and by arst
.
hclk
(
hclk
)
,
// input
.
hrst
(
hrst
)
,
// input
...
...
generated/action_decoder.v
View file @
17ebdc3d
/*******************************************************************************
* Module: action_decoder
* Date:2016-01-
19
* Date:2016-01-
22
* Author: auto-generated file, see ahci_fsm_sequence.py
* Description: Decode sequencer code to 1-hot actions
*******************************************************************************/
...
...
generated/condition_mux.v
View file @
17ebdc3d
/*******************************************************************************
* Module: condition_mux
* Date:2016-01-
19
* Date:2016-01-
22
* Author: auto-generated file, see ahci_fsm_sequence.py
* Description: Select condition
*******************************************************************************/
...
...
host/oob_ctrl.v
View file @
17ebdc3d
...
...
@@ -37,49 +37,32 @@ module oob_ctrl #(
parameter
CLK_SPEED_GRADE
=
1
// 1 - 75 Mhz, 2 - 150Mhz, 4 - 300Mhz
)
(
// sata clk = usrclk2
input
wire
clk
,
// reset oob
input
wire
rst
,
// gtx is ready = all resets are done
input
wire
gtx_ready
,
output
wire
[
11
:
0
]
debug
,
// oob responses
input
wire
rxcominitdet_in
,
input
wire
rxcomwakedet_in
,
input
wire
rxelecidle_in
,
// oob issues
output
wire
txcominit
,
output
wire
txcomwake
,
output
wire
txelecidle
,
// partial tx reset
output
wire
txpcsreset_req
,
input
wire
recal_tx_done
,
// rx reset (after rxelecidle -> 0)
output
wire
rxreset_req
,
input
wire
rxreset_ack
,
// input data stream (if any data during OOB setting => ignored)
input
wire
[
DATA_BYTE_WIDTH
*
8
-
1
:
0
]
txdata_in
,
input
wire
[
DATA_BYTE_WIDTH
-
1
:
0
]
txcharisk_in
,
// output data stream to gtx
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?
input
wire
clk
,
// input wire // sata clk = usrclk2
input
wire
rst
,
// input wire // reset oob
input
wire
gtx_ready
,
// input wire // gtx is ready = all resets are done
output
wire
[
11
:
0
]
debug
,
// output[11:0] wire
input
wire
rxcominitdet_in
,
// input wire // oob responses
input
wire
rxcomwakedet_in
,
// input wire // oob responses
input
wire
rxelecidle_in
,
// input wire // oob responses
output
wire
txcominit
,
// output wire // oob issues
output
wire
txcomwake
,
// output wire // oob issues
output
wire
txelecidle
,
// output wire // oob issues
output
wire
txpcsreset_req
,
// output wire // partial tx reset
input
wire
recal_tx_done
,
// input wire
output
wire
rxreset_req
,
// output wire // rx reset (after rxelecidle -> 0)
input
wire
rxreset_ack
,
// input wire
input
wire
[
DATA_BYTE_WIDTH
*
8
-
1
:
0
]
txdata_in
,
// output[31:0] wire // input data stream (if any data during OOB setting => ignored)
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
[
DATA_BYTE_WIDTH
*
8
-
1
:
0
]
txdata_out
,
// output[31:0] wire // output data stream to gtx
output
wire
[
DATA_BYTE_WIDTH
-
1
:
0
]
txcharisk_out
,
// output[3:0] wire // output data stream to gtx
input
wire
[
DATA_BYTE_WIDTH
*
8
-
1
:
0
]
rxdata_in
,
// input[31:0] wire // input data from gtx
input
wire
[
DATA_BYTE_WIDTH
-
1
:
0
]
rxcharisk_in
,
// input[3:0] wire // input data from gtx
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
wire
rxbyteisaligned
,
// input wire // obvious
output
wire
phy_ready
,
// output wire // shows if channel is ready
input
set_offline
,
// input wire // electrically idle // From
input
comreset_send
// input wire // Not possible yet? // From
)
;
// oob sequence needs to be issued
...
...
@@ -145,62 +128,38 @@ oob #(
)
oob
(
.
debug
(
debug
)
,
// sata clk = usrclk2
.
clk
(
clk
)
,
// reset oob
.
rst
(
rst
)
,
// oob responses
.
rxcominitdet_in
(
rxcominitdet_in
)
,
.
rxcomwakedet_in
(
rxcomwakedet_in
)
,
.
rxelecidle_in
(
rxelecidle_in
)
,
// oob issues
.
txcominit
(
txcominit
)
,
.
txcomwake
(
txcomwake
)
,
.
txelecidle
(
txelecidle_inner
)
,
.
txpcsreset_req
(
txpcsreset_req
)
,
.
recal_tx_done
(
recal_tx_done
)
,
.
rxreset_req
(
rxreset_req
)
,
.
rxreset_ack
(
rxreset_ack
)
,
// input data stream (if any data during OOB setting => ignored)
.
txdata_in
(
txdata_in
)
,
.
txcharisk_in
(
txcharisk_in
)
,
// output data stream to gtx
.
txdata_out
(
txdata_out
)
,
.
txcharisk_out
(
txcharisk_out
)
,
// input data from gtx
.
rxdata_in
(
rxdata_in
)
,
.
rxcharisk_in
(
rxcharisk_in
)
,
// bypassed data from gtx
.
rxdata_out
(
rxdata_out
)
,
.
rxcharisk_out
(
rxcharisk_out
)
,
// 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
)
.
debug
(
debug
)
,
// output [11:0] reg
.
clk
(
clk
)
,
// input wire // sata clk = usrclk2
.
rst
(
rst
)
,
// input wire // reset oob
.
rxcominitdet_in
(
rxcominitdet_in
)
,
// input wire // oob responses
.
rxcomwakedet_in
(
rxcomwakedet_in
)
,
// input wire // oob responses
.
rxelecidle_in
(
rxelecidle_in
)
,
// input wire // oob responses
.
txcominit
(
txcominit
)
,
// output wire // oob issues
.
txcomwake
(
txcomwake
)
,
// output wire // oob issues
.
txelecidle
(
txelecidle_inner
)
,
// output wire // oob issues
.
txpcsreset_req
(
txpcsreset_req
)
,
// output wire
.
recal_tx_done
(
recal_tx_done
)
,
// input wire
.
rxreset_req
(
rxreset_req
)
,
// output wire
.
rxreset_ack
(
rxreset_ack
)
,
// input wire
.
txdata_in
(
txdata_in
)
,
// input [31:0] wire // input data stream (if any data during OOB setting => ignored)
.
txcharisk_in
(
txcharisk_in
)
,
// input [3:0] wire // input data stream (if any data during OOB setting => ignored)
.
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
.
rxdata_in
(
rxdata_in
)
,
// input [31:0] wire // input data from gtx
.
rxcharisk_in
(
rxcharisk_in
)
,
// input [3:0] wire // input data from gtx
.
rxdata_out
(
rxdata_out
)
,
// output [31:0] wire // bypassed data from gtx
.
rxcharisk_out
(
rxcharisk_out
)
,
// output [3:0] wire // bypassed data from gtx
.
oob_start
(
oob_start
)
,
// input wire // oob sequence needs to be issued
.
oob_done
(
oob_done
)
,
// output wire // connection established, all further data is valid
.
oob_busy
(
oob_busy
)
,
// output wire // oob can't handle new start request
.
link_up
(
link_up
)
,
// output wire // doc p265, link is established after 3back-to-back non-ALIGNp
.
link_down
(
link_down
)
,
// output wire
.
cominit_req
(
cominit_req
)
,
// output wire // the device itself sends cominit
.
cominit_allow
(
cominit_allow
)
,
// input wire // allow to respond to cominit
// status information to handle by a control block if any exists
.
oob_incompatible
(
oob_incompatible
)
,
// output wire // incompatible host-device speed grades (host cannot lock to alignp)
.
oob_error
(
oob_error
)
,
// output wire // timeout in an unexpected place
.
oob_silence
(
oob_silence
)
// output wire // noone responds to our cominits
)
;
...
...
host/sata_phy.v
View file @
17ebdc3d
...
...
@@ -204,9 +204,10 @@ localparam RXISCANRESET_TIME = 5'h1;
localparam
RXEYERESET_TIME
=
7'h0
+
RXPMARESET_TIME
+
RXCDRPHRESET_TIME
+
RXCDRFREQRESET_TIME
+
RXDFELPMRESET_TIME
+
RXISCANRESET_TIME
;
reg
[
6
:
0
]
rxeyereset_cnt
;
assign
rxeyereset_done
=
rxeyereset_cnt
==
RXEYERESET_TIME
;
always
@
(
posedge
gtrefclk
)
rxeyereset_cnt
<=
rxreset
?
7'h0
:
rxeyereset_done
?
rxeyereset_cnt
:
rxeyereset_cnt
+
1'b1
;
always
@
(
posedge
gtrefclk
)
begin
if
(
rxreset
)
rxeyereset_cnt
<=
0
;
else
if
(
!
rxeyereset_done
)
rxeyereset_cnt
<=
rxeyereset_cnt
+
1
;
end
/*
* Resets
*/
...
...
@@ -221,8 +222,12 @@ reg rxreset_f_rr;
reg
txreset_f_rr
;
always
@
(
posedge
gtrefclk
)
begin
rxreset_f
<=
~
cplllock
|
cpllreset
|
rxreset_oob
&
gtx_configured
;
txreset_f
<=
~
cplllock
|
cpllreset
;
// rxreset_f <= ~cplllock | cpllreset | rxreset_oob & gtx_configured;
// 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
;
rxreset_f_r
<=
rxreset_f
;
txreset_f_rr
<=
txreset_f_r
;
...
...
@@ -283,8 +288,11 @@ always @ (posedge clk or posedge extrst)
assign
rst
=
rst_r
;
always
@
(
posedge
clk
or
posedge
extrst
)
if
(
extrst
)
rst_r
<=
1
;
else
rst_r
<=
~|
rst_timer
?
1'b0
:
sata_reset_done
?
1'b0
:
1'b1
;
if
(
extrst
)
rst_r
<=
1
;
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
;
...
...
@@ -389,44 +397,47 @@ gtx_wrap #(
)
gtx_wrap
(
.
debug
(
debug_cnt
[
11
])
,
.
cplllock
(
cplllock
)
,
.
cplllockdetclk
(
cplllockdetclk
)
,
.
cpllreset
(
cpllreset
)
,
.
gtrefclk
(
gtrefclk
)
,
.
drpclk
(
drpclk
)
,
.
rxuserrdy
(
rxuserrdy
)
,
.
txuserrdy
(
txuserrdy
)
,
.
rxusrclk
(
rxusrclk
)
,
.
rxusrclk2
(
rxusrclk2
)
,
.
rxp
(
rxp
)
,
.
rxn
(
rxn
)
,
.
rxbyteisaligned
(
rxbyteisaligned
)
,
.
rxreset
(
rxreset
)
,
.
rxcomwakedet
(
rxcomwakedet
)
,
.
rxcominitdet
(
rxcominitdet
)
,
.
rxelecidle
(
rxelecidle
)
,
.
rxresetdone
(
rxresetdone
)
,
.
txreset
(
txreset
)
,
.
txusrclk
(
txusrclk
)
,
.
txusrclk2
(
txusrclk2
)
,
.
txelecidle
(
txelecidle
)
,
.
txp
(
txp
)
,
.
txn
(
txn
)
,
.
txoutclk
(
txoutclk
)
,
.
txpcsreset
(
txpcsreset
)
,
.
txresetdone
(
txresetdone
)
,
.
txcominit
(
txcominit
)
,
.
txcomwake
(
txcomwake
)
,
.
rxelsfull
(
rxelsfull
)
,
.
rxelsempty
(
rxelsempty
)
,
.
txdata
(
txdata
)
,
.
txcharisk
(
txcharisk
)
,
.
rxdata
(
rxdata
)
,
.
rxcharisk
(
rxcharisk
)
,
.
rxdisperr
(
rxdisperr
)
,
.
rxnotintable
(
rxnotintable
)
.
debug
(
debug_cnt
[
11
])
,
// output reg
.
cplllock
(
cplllock
)
,
// output wire
.
cplllockdetclk
(
cplllockdetclk
)
,
// input wire
.
cpllreset
(
cpllreset
)
,
// input wire
.
gtrefclk
(
gtrefclk
)
,
// input wire
.
drpclk
(
drpclk
)
,
// input wire
.
rxuserrdy
(
rxuserrdy
)
,
// input wire
.
txuserrdy
(
txuserrdy
)
,
// input wire
.
rxusrclk
(
rxusrclk
)
,
// input wire
.
rxusrclk2
(
rxusrclk2
)
,
// input wire
.
rxp
(
rxp
)
,
// input wire
.
rxn
(
rxn
)
,
// input wire
.
rxbyteisaligned
(
rxbyteisaligned
)
,
// output wire
.
rxreset
(
rxreset
)
,
// input wire
.
rxcomwakedet
(
rxcomwakedet
)
,
// output wire
.
rxcominitdet
(
rxcominitdet
)
,
// output wire
.
rxelecidle
(
rxelecidle
)
,
// output wire
.
rxresetdone
(
rxresetdone
)
,
// output wire
.
txreset
(
txreset
)
,
// input wire
.
txusrclk
(
txusrclk
)
,
// input wire
.
txusrclk2
(
txusrclk2
)
,
// input wire
.
txelecidle
(
txelecidle
)
,
// input wire
.
txp
(
txp
)
,
// output wire
.
txn
(
txn
)
,
// output wire
.
txoutclk
(
txoutclk
)
,
// output wire
.
txpcsreset
(
txpcsreset
)
,
// input wire
.
txresetdone
(
txresetdone
)
,
// output wire
.
txcominit
(
txcominit
)
,
// input wire
.
txcomwake
(
txcomwake
)
,
// input wire
.
rxelsfull
(
rxelsfull
)
,
// output wire
.
rxelsempty
(
rxelsempty
)
,
// output wire
.
txdata
(
txdata
)
,
// input [31:0] wire
.
txcharisk
(
txcharisk
)
,
// input [3:0] wire
.
rxdata
(
rxdata
)
,
// output[31:0] wire
.
rxcharisk
(
rxcharisk
)
,
// output[3:0] wire
.
rxdisperr
(
rxdisperr
)
,
// output[3:0] wire
.
rxnotintable
(
rxnotintable
)
// output[3:0] wire
)
;
/*
* Interfaces
*/
...
...
tb/tb_ahci.tf
0 → 100644
View file @
17ebdc3d
This diff is collapsed.
Click to expand it.
tb/tb_top.v
View file @
17ebdc3d
...
...
@@ -88,12 +88,12 @@ reg EXTCLK_N = 1'b0;
reg
[
11
:
0
]
ARID_IN_r
;
reg
[
31
:
0
]
ARADDR_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
[
11
:
0
]
AWID_IN_r
;
reg
[
31
:
0
]
AWADDR_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
[
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
wire
[
11
:
0
]
arid
;
wire
[
31
:
0
]
araddr
;
wire
[
3
:
0
]
arlen
;
wire
[
2
:
0
]
arsize
;
wire
[
1
:
0
]
arsize
;
wire
[
1
:
0
]
arburst
;
// SuppressWarnings VEditor : assigned in $readmem(14) system task
wire
[
3
:
0
]
arcache
;
...
...
@@ -147,7 +147,7 @@ wire arready;
wire
[
11
:
0
]
awid
;
wire
[
31
:
0
]
awaddr
;
wire
[
3
:
0
]
awlen
;
wire
[
2
:
0
]
awsize
;
wire
[
1
:
0
]
awsize
;
wire
[
1
:
0
]
awburst
;
// SuppressWarnings VEditor : assigned in $readmem() system task
wire
[
3
:
0
]
awcache
;
...
...
@@ -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
[
31
:
0
]
#(
AXI_TASK_HOLD
)
ARADDR_IN
=
ARADDR_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
[
11
:
0
]
#(
AXI_TASK_HOLD
)
AWID_IN
=
AWID_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
[
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
[
11
:
0
]
#(
AXI_TASK_HOLD
)
WID_IN
=
WID_IN_r
;
wire
[
31
:
0
]
#(
AXI_TASK_HOLD
)
WDATA_IN
=
WDATA_IN_r
;
...
...
@@ -277,14 +277,14 @@ simul_axi_master_rdaddr
.
arid_in
(
ARID_IN
[
11
:
0
])
,
.
araddr_in
(
ARADDR_IN
[
31
:
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
])
,
.
arcache_in
(
4'b0
)
,
.
arprot_in
(
3'b0
)
,
// .arprot_in(2'b0),
.
arid
(
arid
[
11
:
0
])
,
.
araddr
(
araddr
[
31
:
0
])
,
.
arlen
(
arlen
[
3
:
0
])
,
.
arsize
(
arsize
[
2
:
0
])
,
.
arsize
(
arsize
[
1
:
0
])
,
.
arburst
(
arburst
[
1
:
0
])
,
.
arcache
(
arcache
[
3
:
0
])
,
.
arprot
(
arprot
[
2
:
0
])
,
...
...
@@ -308,14 +308,14 @@ simul_axi_master_wraddr
.
awid_in
(
AWID_IN
[
11
:
0
])
,
.
awaddr_in
(
AWADDR_IN
[
31
:
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
])
,
.
awcache_in
(
4'b0
)
,
.
awprot_in
(
3'b0
)
,
//.awprot_in(2'b0),
.
awid
(
awid
[
11
:
0
])
,
.
awaddr
(
awaddr
[
31
:
0
])
,
.
awlen
(
awlen
[
3
:
0
])
,
.
awsize
(
awsize
[
2
:
0
])
,
.
awsize
(
awsize
[
1
:
0
])
,
.
awburst
(
awburst
[
1
:
0
])
,
.
awcache
(
awcache
[
3
:
0
])
,
.
awprot
(
awprot
[
2
:
0
])
,
...
...
tb_ahci_01.sav
0 → 100644
View file @
17ebdc3d
[*]
[*] 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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment