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
ba05fb7c
Commit
ba05fb7c
authored
Jan 21, 2016
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finished initial code, starting verification
parent
c50815d1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
203 additions
and
194 deletions
+203
-194
ahci_sata_layers.v
ahci/ahci_sata_layers.v
+2
-2
sata_ahci_top.v
ahci/sata_ahci_top.v
+169
-171
sata_top.v
dma/sata_top.v
+13
-10
top.v
dma/top.v
+18
-11
system_defines.vh
system_defines.vh
+1
-0
No files found.
ahci/ahci_sata_layers.v
View file @
ba05fb7c
...
@@ -52,7 +52,7 @@ module ahci_sata_layers #(
...
@@ -52,7 +52,7 @@ module ahci_sata_layers #(
output
x_rdy_collision
,
// X_RDY/X_RDY collision on interface
output
x_rdy_collision
,
// X_RDY/X_RDY collision on interface
output
syncesc_recv
,
// Where to get it?
output
syncesc_recv
,
// Where to get it?
input
pcmd_cleared
,
// PxCMD.ST 1->0 transition by software
input
pcmd_
st_
cleared
,
// PxCMD.ST 1->0 transition by software
input
syncesc_send
,
// Send sync escape
input
syncesc_send
,
// Send sync escape
output
syncesc_send_done
,
// "SYNC escape until the interface is quiescent..."
output
syncesc_send_done
,
// "SYNC escape until the interface is quiescent..."
input
comreset_send
,
// Not possible yet?
input
comreset_send
,
// Not possible yet?
...
@@ -231,7 +231,7 @@ module ahci_sata_layers #(
...
@@ -231,7 +231,7 @@ module ahci_sata_layers #(
.
link_reset
(
ll_link_reset
)
,
// input wire // oob sequence is reinitiated and link now is not established or rxelecidle
.
link_reset
(
ll_link_reset
)
,
// input wire // oob sequence is reinitiated and link now is not established or rxelecidle
.
sync_escape_req
(
syncesc_send
)
,
// input wire // TL demands to brutally cancel current transaction
.
sync_escape_req
(
syncesc_send
)
,
// input wire // TL demands to brutally cancel current transaction
.
sync_escape_ack
(
syncesc_send_done
)
,
// output wire // acknowlegement of a successful reception?
.
sync_escape_ack
(
syncesc_send_done
)
,
// output wire // acknowlegement of a successful reception?
.
incom_stop_req
(
pcmd_cleared
)
,
// input wire // TL demands to stop current recieving session
.
incom_stop_req
(
pcmd_
st_
cleared
)
,
// input wire // TL demands to stop current recieving session
// inputs from phy
// inputs from phy
.
phy_ready
(
phy_ready
)
,
// input wire // phy is ready - link is established
.
phy_ready
(
phy_ready
)
,
// input wire // phy is ready - link is established
// data-primitives stream from phy
// data-primitives stream from phy
...
...
ahci/sata_ahci_top.v
View file @
ba05fb7c
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
* Commands interface
* Commands interface
*/
*/
input
wire
ACLK
,
// AXI PS Master GP1 Clock , input
input
wire
ACLK
,
// AXI PS Master GP1 Clock , input
input
wire
ARESETN
,
// AXI PS Master GP1 Reset, output
input
wire
ARESETN
,
// AXI PS Master GP1 Reset, output
// @SuppressThisWarning VEditor unused (arst instead)
// AXI PS Master GP1: Read Address
// AXI PS Master GP1: Read Address
input
wire
[
31
:
0
]
ARADDR
,
// AXI PS Master GP1 ARADDR[31:0], output
input
wire
[
31
:
0
]
ARADDR
,
// AXI PS Master GP1 ARADDR[31:0], output
input
wire
ARVALID
,
// AXI PS Master GP1 ARVALID, output
input
wire
ARVALID
,
// AXI PS Master GP1 ARVALID, output
...
@@ -141,6 +141,7 @@
...
@@ -141,6 +141,7 @@
input
wire
[
2
:
0
]
afi_racount
,
input
wire
[
2
:
0
]
afi_racount
,
output
wire
afi_rdissuecap1en
,
output
wire
afi_rdissuecap1en
,
output
wire
irq
,
/*
/*
* PHY
* PHY
*/
*/
...
@@ -153,8 +154,8 @@
...
@@ -153,8 +154,8 @@
input
wire
EXTCLK_N
input
wire
EXTCLK_N
)
;
)
;
wire
sata_clk
;
//
wire sata_clk;
wire
sata_rst
;
//
wire sata_rst;
wire
exrst
;
wire
exrst
;
// Data/type FIFO, host -> device
// Data/type FIFO, host -> device
...
@@ -173,7 +174,7 @@
...
@@ -173,7 +174,7 @@
// communication with transport/link/phys layers
// communication with transport/link/phys layers
// wire phy_rst; // frome phy, as a response to hba_arst || port_arst. It is deasserted when clock is stable
// wire phy_rst; // frome phy, as a response to hba_arst || port_arst. It is deasserted when clock is stable
wire
[
1
:
0
]
phy_
ready
;
// 0 - not ready, 1..3 - negotiated speed
wire
[
1
:
0
]
phy_
speed
;
// 0 - not ready, 1..3 - negotiated speed
wire
xmit_ok
;
// FIS transmission acknowledged OK
wire
xmit_ok
;
// FIS transmission acknowledged OK
wire
xmit_err
;
// Error during sending of a FIS
wire
xmit_err
;
// Error during sending of a FIS
wire
syncesc_recv
;
// These two inputs interrupt transmit
wire
syncesc_recv
;
// These two inputs interrupt transmit
...
@@ -207,9 +208,6 @@
...
@@ -207,9 +208,6 @@
wire
[
3
:
0
]
sctl_ipm
;
// Interface power management transitions allowed
wire
[
3
:
0
]
sctl_ipm
;
// Interface power management transitions allowed
wire
[
3
:
0
]
sctl_spd
;
// Interface maximal speed
wire
[
3
:
0
]
sctl_spd
;
// Interface maximal speed
wire
irq
;
// CPU interrupt request
ahci_top
#(
ahci_top
#(
.
PREFETCH_ALWAYS
(
0
)
,
.
PREFETCH_ALWAYS
(
0
)
,
...
@@ -217,181 +215,181 @@
...
@@ -217,181 +215,181 @@
.
READ_CT_LATENCY
(
1
)
,
.
READ_CT_LATENCY
(
1
)
,
.
ADDRESS_BITS
(
10
)
.
ADDRESS_BITS
(
10
)
)
ahci_top_i
(
)
ahci_top_i
(
.
aclk
(
ACLK
)
,
// input
.
aclk
(
ACLK
)
,
// input
.
arst
(
arst
)
,
// input
.
arst
(
arst
)
,
// input
.
mclk
(
sata_clk
)
,
// input
.
mclk
(
sata_clk
)
,
// input
.
mrst
(
sata_rst
)
,
// input
.
mrst
(
sata_rst
)
,
// input
.
hba_arst
(
exrst
)
,
// output
.
hba_arst
(
exrst
)
,
// output
.
port_arst
()
,
// output
.
port_arst
()
,
// output
.
hclk
(
hclk
)
,
// input
.
hclk
(
hclk
)
,
// input
.
hrst
()
,
// input
.
hrst
()
,
// input
.
awaddr
(
AWADDR
)
,
// input[31:0]
.
awaddr
(
AWADDR
)
,
// input[31:0]
.
awvalid
(
AWVALID
)
,
// input
.
awvalid
(
AWVALID
)
,
// input
.
awready
(
AWREADY
)
,
// output
.
awready
(
AWREADY
)
,
// output
.
awid
(
AWID
)
,
// input[11:0]
.
awid
(
AWID
)
,
// input[11:0]
.
awlen
(
AWLEN
)
,
// input[3:0]
.
awlen
(
AWLEN
)
,
// input[3:0]
.
awsize
(
AWSIZE
)
,
// input[1:0]
.
awsize
(
AWSIZE
)
,
// input[1:0]
.
awburst
(
AWBURST
)
,
// input[1:0]
.
awburst
(
AWBURST
)
,
// input[1:0]
.
wdata
(
WDATA
)
,
// input[31:0]
.
wdata
(
WDATA
)
,
// input[31:0]
.
wvalid
(
WVALID
)
,
// input
.
wvalid
(
WVALID
)
,
// input
.
wready
(
WREADY
)
,
// output
.
wready
(
WREADY
)
,
// output
.
wid
(
WID
)
,
// input[11:0]
.
wid
(
WID
)
,
// input[11:0]
.
wlast
(
WLAST
)
,
// input
.
wlast
(
WLAST
)
,
// input
.
wstb
(
WSTRB
)
,
// input[3:0]
.
wstb
(
WSTRB
)
,
// input[3:0]
.
bvalid
(
BVALID
)
,
// output
.
bvalid
(
BVALID
)
,
// output
.
bready
(
BREADY
)
,
// input
.
bready
(
BREADY
)
,
// input
.
bid
(
BID
)
,
// output[11:0]
.
bid
(
BID
)
,
// output[11:0]
.
bresp
(
BRESP
)
,
// output[1:0]
.
bresp
(
BRESP
)
,
// output[1:0]
.
araddr
(
ARADDR
)
,
// input[31:0]
.
araddr
(
ARADDR
)
,
// input[31:0]
.
arvalid
(
ARVALID
)
,
// input
.
arvalid
(
ARVALID
)
,
// input
.
arready
(
ARREADY
)
,
// output
.
arready
(
ARREADY
)
,
// output
.
arid
(
ARID
)
,
// input[11:0]
.
arid
(
ARID
)
,
// input[11:0]
.
arlen
(
ARLEN
)
,
// input[3:0]
.
arlen
(
ARLEN
)
,
// input[3:0]
.
arsize
(
ARSIZE
)
,
// input[1:0]
.
arsize
(
ARSIZE
)
,
// input[1:0]
.
arburst
(
ARBURST
)
,
// input[1:0]
.
arburst
(
ARBURST
)
,
// input[1:0]
.
rdata
(
RDATA
)
,
// output[31:0]
.
rdata
(
RDATA
)
,
// output[31:0]
.
rvalid
(
RVALID
)
,
// output
.
rvalid
(
RVALID
)
,
// output
.
rready
(
RREADY
)
,
// input
.
rready
(
RREADY
)
,
// input
.
rid
(
RID
)
,
// output[11:0]
.
rid
(
RID
)
,
// output[11:0]
.
rlast
(
RLAST
)
,
// output
.
rlast
(
RLAST
)
,
// output
.
rresp
(
RRESP
)
,
// output[1:0]
.
rresp
(
RRESP
)
,
// output[1:0]
.
afi_awaddr
(
afi_awaddr
)
,
// output[31:0]
.
afi_awaddr
(
afi_awaddr
)
,
// output[31:0]
.
afi_awvalid
(
afi_awvalid
)
,
// output
.
afi_awvalid
(
afi_awvalid
)
,
// output
.
afi_awready
(
afi_awready
)
,
// input
.
afi_awready
(
afi_awready
)
,
// input
.
afi_awid
(
afi_awid
)
,
// output[5:0]
.
afi_awid
(
afi_awid
)
,
// output[5:0]
.
afi_awlock
(
afi_awlock
)
,
// output[1:0]
.
afi_awlock
(
afi_awlock
)
,
// output[1:0]
.
afi_awcache
(
afi_awcache
)
,
// output[3:0]
.
afi_awcache
(
afi_awcache
)
,
// output[3:0]
.
afi_awprot
(
afi_awprot
)
,
// output[2:0]
.
afi_awprot
(
afi_awprot
)
,
// output[2:0]
.
afi_awlen
(
afi_awlen
)
,
// output[3:0]
.
afi_awlen
(
afi_awlen
)
,
// output[3:0]
.
afi_awsize
(
afi_awsize
)
,
// output[1:0]
.
afi_awsize
(
afi_awsize
)
,
// output[1:0]
.
afi_awburst
(
afi_awburst
)
,
// output[1:0]
.
afi_awburst
(
afi_awburst
)
,
// output[1:0]
.
afi_awqos
(
afi_awqos
)
,
// output[3:0]
.
afi_awqos
(
afi_awqos
)
,
// output[3:0]
.
afi_wdata
(
afi_wdata
)
,
// output[63:0]
.
afi_wdata
(
afi_wdata
)
,
// output[63:0]
.
afi_wvalid
(
afi_wvalid
)
,
// output
.
afi_wvalid
(
afi_wvalid
)
,
// output
.
afi_wready
(
afi_wready
)
,
// input
.
afi_wready
(
afi_wready
)
,
// input
.
afi_wid
(
afi_wid
)
,
// output[5:0]
.
afi_wid
(
afi_wid
)
,
// output[5:0]
.
afi_wlast
(
afi_wlast
)
,
// output
.
afi_wlast
(
afi_wlast
)
,
// output
.
afi_wstrb
(
afi_wstrb
)
,
// output[7:0]
.
afi_wstrb
(
afi_wstrb
)
,
// output[7:0]
.
afi_bvalid
(
afi_bvalid
)
,
// input
.
afi_bvalid
(
afi_bvalid
)
,
// input
.
afi_bready
(
afi_bready
)
,
// output
.
afi_bready
(
afi_bready
)
,
// output
.
afi_bid
(
afi_bid
)
,
// input[5:0]
.
afi_bid
(
afi_bid
)
,
// input[5:0]
.
afi_bresp
(
afi_bresp
)
,
// input[1:0]
.
afi_bresp
(
afi_bresp
)
,
// input[1:0]
.
afi_wcount
(
afi_wcount
)
,
// input[7:0]
.
afi_wcount
(
afi_wcount
)
,
// input[7:0]
.
afi_wacount
(
afi_wacount
)
,
// input[5:0]
.
afi_wacount
(
afi_wacount
)
,
// input[5:0]
.
afi_wrissuecap1en
(
afi_wrissuecap1en
)
,
// output
.
afi_wrissuecap1en
(
afi_wrissuecap1en
)
,
// output
.
afi_araddr
(
afi_araddr
)
,
// output[31:0]
.
afi_araddr
(
afi_araddr
)
,
// output[31:0]
.
afi_arvalid
(
afi_arvalid
)
,
// output
.
afi_arvalid
(
afi_arvalid
)
,
// output
.
afi_arready
(
afi_arready
)
,
// input
.
afi_arready
(
afi_arready
)
,
// input
.
afi_arid
(
afi_arid
)
,
// output[5:0]
.
afi_arid
(
afi_arid
)
,
// output[5:0]
.
afi_arlock
(
afi_arlock
)
,
// output[1:0]
.
afi_arlock
(
afi_arlock
)
,
// output[1:0]
.
afi_arcache
(
afi_arcache
)
,
// output[3:0]
.
afi_arcache
(
afi_arcache
)
,
// output[3:0]
.
afi_arprot
(
afi_arprot
)
,
// output[2:0]
.
afi_arprot
(
afi_arprot
)
,
// output[2:0]
.
afi_arlen
(
afi_arlen
)
,
// output[3:0]
.
afi_arlen
(
afi_arlen
)
,
// output[3:0]
.
afi_arsize
(
afi_arsize
)
,
// output[1:0]
.
afi_arsize
(
afi_arsize
)
,
// output[1:0]
.
afi_arburst
(
afi_arburst
)
,
// output[1:0]
.
afi_arburst
(
afi_arburst
)
,
// output[1:0]
.
afi_arqos
(
afi_arqos
)
,
// output[3:0]
.
afi_arqos
(
afi_arqos
)
,
// output[3:0]
.
afi_rdata
(
afi_rdata
)
,
// input[63:0]
.
afi_rdata
(
afi_rdata
)
,
// input[63:0]
.
afi_rvalid
(
afi_rvalid
)
,
// input
.
afi_rvalid
(
afi_rvalid
)
,
// input
.
afi_rready
(
afi_rready
)
,
// output
.
afi_rready
(
afi_rready
)
,
// output
.
afi_rid
(
afi_rid
)
,
// input[5:0]
.
afi_rid
(
afi_rid
)
,
// input[5:0]
.
afi_rlast
(
afi_rlast
)
,
// input
.
afi_rlast
(
afi_rlast
)
,
// input
.
afi_rresp
(
afi_rresp
)
,
// input[1:0]
.
afi_rresp
(
afi_rresp
)
,
// input[1:0]
.
afi_rcount
(
afi_rcount
)
,
// input[7:0]
.
afi_rcount
(
afi_rcount
)
,
// input[7:0]
.
afi_racount
(
afi_racount
)
,
// input[2:0]
.
afi_racount
(
afi_racount
)
,
// input[2:0]
.
afi_rdissuecap1en
(
afi_rdissuecap1en
)
,
// output
.
afi_rdissuecap1en
(
afi_rdissuecap1en
)
,
// output
.
h2d_data
(
h2d_data
)
,
// output[31:0]
.
h2d_data
(
h2d_data
)
,
// output[31:0]
.
h2d_type
(
h2d_type
)
,
// output[1:0]
.
h2d_type
(
h2d_type
)
,
// output[1:0]
.
h2d_valid
(
h2d_valid
)
,
// output
.
h2d_valid
(
h2d_valid
)
,
// output
.
h2d_ready
(
h2d_ready
)
,
// input
.
h2d_ready
(
h2d_ready
)
,
// input
.
d2h_data
(
d2h_data
)
,
// input[31:0]
.
d2h_data
(
d2h_data
)
,
// input[31:0]
.
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_many
()
,
// input
.
d2h_many
(
d2h_many
)
,
// input
.
d2h_ready
()
,
// output
.
d2h_ready
(
d2h_ready
)
,
// output
.
phy_ready
()
,
// input[1:0]
.
phy_ready
(
phy_speed
)
,
// input[1:0]
.
xmit_ok
()
,
// input
.
xmit_ok
(
xmit_ok
)
,
// input
.
xmit_err
()
,
// input
.
xmit_err
(
xmit_err
)
,
// input
.
syncesc_recv
()
,
// input
.
syncesc_recv
(
syncesc_recv
)
,
// input
.
pcmd_st_cleared
()
,
// output
.
pcmd_st_cleared
(
pcmd_st_cleared
)
,
// output
.
syncesc_send
()
,
// output
.
syncesc_send
(
syncesc_send
)
,
// output
.
syncesc_send_done
(
)
,
// input
.
syncesc_send_done
(
syncesc_send_done
)
,
// input
.
comreset_send
()
,
// output
.
comreset_send
(
comreset_send
)
,
// output
.
cominit_got
()
,
// input
.
cominit_got
(
cominit_got
)
,
// input
.
set_offline
()
,
// output
.
set_offline
(
set_offline
)
,
// output
.
x_rdy_collision
()
,
// input
.
x_rdy_collision
(
x_rdy_collision
)
,
// input
.
send_R_OK
()
,
// output
.
send_R_OK
(
send_R_OK
)
,
// output
.
send_R_ERR
()
,
// output
.
send_R_ERR
(
send_R_ERR
)
,
// output
.
serr_DT
()
,
// input
.
serr_DT
(
serr_DT
)
,
// input
.
serr_DS
()
,
// input
.
serr_DS
(
serr_DS
)
,
// input
.
serr_DH
()
,
// input
.
serr_DH
(
serr_DH
)
,
// input
.
serr_DC
()
,
// input
.
serr_DC
(
serr_DC
)
,
// input
.
serr_DB
()
,
// input
.
serr_DB
(
serr_DB
)
,
// input
.
serr_DW
()
,
// input
.
serr_DW
(
serr_DW
)
,
// input
.
serr_DI
()
,
// input
.
serr_DI
(
serr_DI
)
,
// input
.
serr_EP
()
,
// input
.
serr_EP
(
serr_EP
)
,
// input
.
serr_EC
()
,
// input
.
serr_EC
(
serr_EC
)
,
// input
.
serr_ET
()
,
// input
.
serr_ET
(
serr_ET
)
,
// input
.
serr_EM
()
,
// input
.
serr_EM
(
serr_EM
)
,
// input
.
serr_EI
()
,
// input
.
serr_EI
(
serr_EI
)
,
// input
.
sctl_ipm
()
,
// output[3:0]
.
sctl_ipm
(
sctl_ipm
)
,
// output[3:0]
.
sctl_spd
()
,
// output[3:0]
.
sctl_spd
(
sctl_spd
)
,
// output[3:0]
.
irq
()
// output
.
irq
(
irq
)
// output
)
;
)
;
ahci_sata_layers
#(
ahci_sata_layers
#(
.
BITS_TO_START_XMIT
(
6
)
,
.
BITS_TO_START_XMIT
(
6
)
,
.
DATA_BYTE_WIDTH
(
4
)
.
DATA_BYTE_WIDTH
(
4
)
)
ahci_sata_layers_i
(
)
ahci_sata_layers_i
(
.
exrst
(
exrst
)
,
// input
.
exrst
(
exrst
)
,
// input
.
reliable_clk
(
ACLK
)
,
// input
.
reliable_clk
(
reliable_clk
)
,
// input
.
rst
(
sata_rst
)
,
// output
.
rst
(
sata_rst
)
,
// output
.
clk
(
sata_clk
)
,
// output
.
clk
(
sata_clk
)
,
// output
.
h2d_data
()
,
// input[31:0]
.
h2d_data
(
h2d_data
)
,
// input[31:0]
.
h2d_mask
(
)
,
// input[1:0]
.
h2d_mask
(
2'h3
)
,
//h2d_mask
), // input[1:0]
.
h2d_type
()
,
// input[1:0]
.
h2d_type
(
h2d_type
)
,
// input[1:0]
.
h2d_valid
()
,
// input
.
h2d_valid
(
h2d_valid
)
,
// input
.
h2d_ready
()
,
// output
.
h2d_ready
(
h2d_ready
)
,
// output
.
d2h_data
()
,
// output[31:0]
.
d2h_data
(
d2h_data
)
,
// output[31:0]
.
d2h_mask
(
)
,
// output[1:0]
.
d2h_mask
()
,
// 2h_mask
), // output[1:0]
.
d2h_type
()
,
// output[1:0]
.
d2h_type
(
d2h_type
)
,
// output[1:0]
.
d2h_valid
()
,
// output
.
d2h_valid
(
d2h_valid
)
,
// output
.
d2h_many
()
,
// output
.
d2h_many
(
d2h_many
)
,
// output
.
d2h_ready
()
,
// input
.
d2h_ready
(
d2h_ready
)
,
// input
.
phy_speed
()
,
// output[1:0]
.
phy_speed
(
phy_speed
)
,
// output[1:0]
.
gtx_ready
()
,
// output
.
gtx_ready
()
,
// output
.
xmit_ok
()
,
// output
.
xmit_ok
(
xmit_ok
)
,
// output
.
xmit_err
()
,
// output
.
xmit_err
(
xmit_err
)
,
// output
.
x_rdy_collision
()
,
// output
.
x_rdy_collision
(
x_rdy_collision
)
,
// output
.
syncesc_recv
()
,
// output
.
syncesc_recv
(
syncesc_recv
)
,
// output
.
pcmd_
cleared
()
,
// input
.
pcmd_
st_cleared
(
pcmd_st_cleared
)
,
// input
.
syncesc_send
()
,
// input
.
syncesc_send
(
syncesc_send
)
,
// input
.
syncesc_send_done
(
)
,
// output
.
syncesc_send_done
(
syncesc_send_done
)
,
// output
.
comreset_send
()
,
// input
.
comreset_send
(
comreset_send
)
,
// input
.
cominit_got
()
,
// output
.
cominit_got
(
cominit_got
)
,
// output
.
set_offline
()
,
// input
.
set_offline
(
set_offline
)
,
// input
.
send_R_OK
()
,
// input
.
send_R_OK
(
send_R_OK
)
,
// input
.
send_R_ERR
()
,
// input
.
send_R_ERR
(
send_R_ERR
)
,
// input
.
serr_DT
()
,
// output
.
serr_DT
(
serr_DT
)
,
// output
.
serr_DS
()
,
// output
.
serr_DS
(
serr_DS
)
,
// output
.
serr_DH
()
,
// output
.
serr_DH
(
serr_DH
)
,
// output
.
serr_DC
()
,
// output
.
serr_DC
(
serr_DC
)
,
// output
.
serr_DB
()
,
// output
.
serr_DB
(
serr_DB
)
,
// output
.
serr_DW
()
,
// output
.
serr_DW
(
serr_DW
)
,
// output
.
serr_DI
()
,
// output
.
serr_DI
(
serr_DI
)
,
// output
.
serr_EP
()
,
// output
.
serr_EP
(
serr_EP
)
,
// output
.
serr_EC
()
,
// output
.
serr_EC
(
serr_EC
)
,
// output
.
serr_ET
()
,
// output
.
serr_ET
(
serr_ET
)
,
// output
.
serr_EM
()
,
// output
.
serr_EM
(
serr_EM
)
,
// output
.
serr_EI
()
,
// output
.
serr_EI
(
serr_EI
)
,
// output
.
sctl_ipm
()
,
// input[3:0]
.
sctl_ipm
(
sctl_ipm
)
,
// input[3:0]
.
sctl_spd
()
,
// input[3:0]
.
sctl_spd
(
sctl_spd
)
,
// input[3:0]
.
extclk_p
()
,
// input wire
.
extclk_p
(
EXTCLK_P
)
,
// input wire
.
extclk_n
()
,
// input wire
.
extclk_n
(
EXTCLK_N
)
,
// input wire
.
txp_out
()
,
// output wire
.
txp_out
(
TXP
)
,
// output wire
.
txn_out
()
,
// output wire
.
txn_out
(
TXN
)
,
// output wire
.
rxp_in
()
,
// input wire
.
rxp_in
(
RXP
)
,
// input wire
.
rxn_in
()
// input wire
.
rxn_in
(
RXN
)
// input wire
)
;
)
;
...
...
dma/sata_top.v
View file @
ba05fb7c
...
@@ -42,9 +42,10 @@
...
@@ -42,9 +42,10 @@
* 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_top
(
module
sata_top
(
output
wire
sclk
,
output
wire
s
ata_
clk
,
output
wire
sata_rst
,
output
wire
sata_rst
,
input
wire
extrst
,
// input wire extrst,
input
wire
arst
,
// reliable clock to source drp and cpll lock det circuits
// reliable clock to source drp and cpll lock det circuits
input
wire
reliable_clk
,
input
wire
reliable_clk
,
...
@@ -147,6 +148,8 @@
...
@@ -147,6 +148,8 @@
input
wire
[
2
:
0
]
afi_racount
,
input
wire
[
2
:
0
]
afi_racount
,
output
wire
afi_rdissuecap1en
,
output
wire
afi_rdissuecap1en
,
output
wire
irq
,
// not used here, for compatibility with AHCI branch
/*
/*
* PHY
* PHY
*/
*/
...
@@ -158,7 +161,7 @@
...
@@ -158,7 +161,7 @@
input
wire
EXTCLK_P
,
input
wire
EXTCLK_P
,
input
wire
EXTCLK_N
input
wire
EXTCLK_N
)
;
)
;
assign
irq
=
0
;
//wire sata_rst;
//wire sata_rst;
// dma_regs <-> sata host
// dma_regs <-> sata host
// tmp to cmd control
// tmp to cmd control
...
@@ -238,7 +241,7 @@ wire bram_regen;
...
@@ -238,7 +241,7 @@ wire bram_regen;
// sata logic reset
// sata logic reset
//wire rst;
//wire rst;
// sata clk
// sata clk
//wire sclk;
//wire s
ata_
clk;
// dma_regs <-> dma_control
// dma_regs <-> dma_control
wire
[
31
:
7
]
mem_address
;
wire
[
31
:
7
]
mem_address
;
wire
[
31
:
0
]
lba
;
wire
[
31
:
0
]
lba
;
...
@@ -354,7 +357,7 @@ axi_regs axi_regs(
...
@@ -354,7 +357,7 @@ axi_regs axi_regs(
dma_regs
dma_regs
(
dma_regs
dma_regs
(
.
rst
(
ARESETN
)
,
// input wire
.
rst
(
ARESETN
)
,
// input wire
.
ACLK
(
ACLK
)
,
// input wire
.
ACLK
(
ACLK
)
,
// input wire
.
sclk
(
sclk
)
,
// input wire
.
sclk
(
s
ata_
clk
)
,
// input wire
// control iface
// control iface
.
mem_address
(
mem_address
[
31
:
7
])
,
// output[31:7] wire
.
mem_address
(
mem_address
[
31
:
7
])
,
// output[31:7] wire
.
lba
(
lba
)
,
// output[31:0] wire
.
lba
(
lba
)
,
// output[31:0] wire
...
@@ -442,7 +445,7 @@ dma_regs dma_regs(
...
@@ -442,7 +445,7 @@ dma_regs dma_regs(
dma_control
dma_control
(
dma_control
dma_control
(
.
sclk
(
sclk
)
,
// input wire
.
sclk
(
s
ata_
clk
)
,
// input wire
.
hclk
(
hclk
)
,
// input wire
.
hclk
(
hclk
)
,
// input wire
.
rst
(
sata_rst
)
,
// input wire
.
rst
(
sata_rst
)
,
// input wire
...
@@ -545,9 +548,9 @@ V .MEMBRIDGE_ADDR (),
...
@@ -545,9 +548,9 @@ V .MEMBRIDGE_ADDR (),
.FRAME_HEIGHT_BITS (),
.FRAME_HEIGHT_BITS (),
.FRAME_WIDTH_BITS ()
.FRAME_WIDTH_BITS ()
)*/
membridge
(
)*/
membridge
(
.
mrst
(
sata_rst
)
,
// hrst), // input Andrey: Wrong, should be @sclk
.
mrst
(
sata_rst
)
,
// hrst), // input Andrey: Wrong, should be @s
ata_
clk
.
hrst
(
hrst
)
,
// input
.
hrst
(
hrst
)
,
// input
.
mclk
(
sclk
)
,
// input
.
mclk
(
s
ata_
clk
)
,
// input
.
hclk
(
hclk
)
,
// input
.
hclk
(
hclk
)
,
// input
.
cmd_ad
(
cmd_ad
)
,
// input[7:0]
.
cmd_ad
(
cmd_ad
)
,
// input[7:0]
.
cmd_stb
(
cmd_stb
)
,
// input // Nothing here
.
cmd_stb
(
cmd_stb
)
,
// input // Nothing here
...
@@ -619,11 +622,11 @@ V .MEMBRIDGE_ADDR (),
...
@@ -619,11 +622,11 @@ V .MEMBRIDGE_ADDR (),
assign
rdata_done
=
1'b0
;
assign
rdata_done
=
1'b0
;
sata_host
sata_host
(
sata_host
sata_host
(
.
extrst
(
ext
rst
)
,
.
extrst
(
a
rst
)
,
// sata rst
// sata rst
.
rst
(
sata_rst
)
,
.
rst
(
sata_rst
)
,
// sata clk
// sata clk
.
clk
(
sclk
)
,
.
clk
(
s
ata_
clk
)
,
// reliable clock to source drp and cpll lock det circuits
// reliable clock to source drp and cpll lock det circuits
.
reliable_clk
(
reliable_clk
)
,
.
reliable_clk
(
reliable_clk
)
,
// temporary
// temporary
...
...
dma/top.v
View file @
ba05fb7c
...
@@ -54,12 +54,12 @@ module top #(
...
@@ -54,12 +54,12 @@ module top #(
)
;
)
;
wire
axi_aclk0
;
wire
axi_aclk0
;
wire
sclk
;
wire
sclk
;
// Just output from SATA subsystem SuppressThisWarning VEditor Not used
wire
sata_rst
;
wire
sata_rst
;
// Just output from SATA subsystem SuppressThisWarning VEditor Not used
wire
extrst
;
wire
extrst
;
wire
[
3
:
0
]
fclk
;
wire
[
3
:
0
]
fclk
;
wire
[
3
:
0
]
frst
;
wire
[
3
:
0
]
frst
;
wire
axi_aclk
;
//
wire axi_aclk;
wire
axi_rst
;
wire
axi_rst
;
wire
hclk
;
wire
hclk
;
wire
comb_rst
;
wire
comb_rst
;
...
@@ -141,6 +141,8 @@ wire [ 7:0] afi3_rcount; // input[7:0]
...
@@ -141,6 +141,8 @@ wire [ 7:0] afi3_rcount; // input[7:0]
wire
[
2
:
0
]
afi3_racount
;
// input[2:0]
wire
[
2
:
0
]
afi3_racount
;
// input[2:0]
wire
afi3_rdissuecap1en
;
// output
wire
afi3_rdissuecap1en
;
// output
wire
irq
;
// ps7 IRQ
assign
comb_rst
=~
frst
[
0
]
|
frst
[
1
]
;
assign
comb_rst
=~
frst
[
0
]
|
frst
[
1
]
;
always
@
(
posedge
comb_rst
or
posedge
axi_aclk0
)
begin
always
@
(
posedge
comb_rst
or
posedge
axi_aclk0
)
begin
if
(
comb_rst
)
axi_rst_pre
<=
1'b1
;
if
(
comb_rst
)
axi_rst_pre
<=
1'b1
;
...
@@ -148,10 +150,10 @@ always @(posedge comb_rst or posedge axi_aclk0) begin
...
@@ -148,10 +150,10 @@ always @(posedge comb_rst or posedge axi_aclk0) begin
end
end
//BUFG bufg_axi_aclk_i (.O(axi_aclk),.I(/*fclk[0]*/ sclk));
//BUFG bufg_axi_aclk_i (.O(axi_aclk),.I(/*fclk[0]*/ sclk));
assign
axi_aclk
=
sclk
;
//
assign axi_aclk = sclk;
BUFG
bufg_axi_aclk0_i
(
.
O
(
axi_aclk0
)
,.
I
(
fclk
[
0
]))
;
BUFG
bufg_axi_aclk0_i
(
.
O
(
axi_aclk0
)
,.
I
(
fclk
[
0
]))
;
BUFG
bufg_axi_rst_i
(
.
O
(
axi_rst
)
,.
I
(
axi_rst_pre
))
;
BUFG
bufg_axi_rst_i
(
.
O
(
axi_rst
)
,.
I
(
axi_rst_pre
))
;
BUFG
bufg_extrst_i
(
.
O
(
extrst
)
,.
I
(
axi_rst_pre
))
;
BUFG
bufg_extrst_i
(
.
O
(
extrst
)
,.
I
(
axi_rst_pre
))
;
axi_hp_clk
#(
axi_hp_clk
#(
.
CLKIN_PERIOD
(
20.000
)
,
.
CLKIN_PERIOD
(
20.000
)
,
.
CLKFBOUT_MULT_AXIHP
(
18
)
,
.
CLKFBOUT_MULT_AXIHP
(
18
)
,
...
@@ -162,14 +164,17 @@ axi_hp_clk #(
...
@@ -162,14 +164,17 @@ axi_hp_clk #(
.
clk_axihp
(
hclk
)
,
// output
.
clk_axihp
(
hclk
)
,
// output
.
locked_axihp
()
// output // not controlled?
.
locked_axihp
()
// output // not controlled?
)
;
)
;
`ifdef
AHCI_SATA
sata_ahci_top
sata_top
(
`else
sata_top
sata_top
(
sata_top
sata_top
(
.
sclk
(
sclk
)
,
`endif
.
sata_clk
(
sclk
)
,
// reliable clock to source drp and cpll lock det circuits
// reliable clock to source drp and cpll lock det circuits
.
reliable_clk
(
axi_aclk0
)
,
.
reliable_clk
(
axi_aclk0
)
,
.
hclk
(
hclk
)
,
.
hclk
(
hclk
)
,
.
sata_rst
(
sata_rst
)
,
.
sata_rst
(
sata_rst
)
,
.
extrst
(
extrst
)
,
.
arst
(
extrst
)
,
.
ACLK
(
axi_aclk0
)
,
.
ACLK
(
axi_aclk0
)
,
.
ARESETN
(
axi_rst
/* | sata_rst*/
)
,
.
ARESETN
(
axi_rst
/* | sata_rst*/
)
,
// AXI PS Master GP1: Read Address
// AXI PS Master GP1: Read Address
...
@@ -263,6 +268,8 @@ sata_top sata_top(
...
@@ -263,6 +268,8 @@ sata_top sata_top(
.
afi_racount
(
afi3_racount
)
,
.
afi_racount
(
afi3_racount
)
,
.
afi_rdissuecap1en
(
afi3_rdissuecap1en
)
,
.
afi_rdissuecap1en
(
afi3_rdissuecap1en
)
,
.
irq
(
irq
)
,
// output wire
/*
/*
* PHY
* PHY
*/
*/
...
@@ -502,8 +509,8 @@ PS7 ps7_i (
...
@@ -502,8 +509,8 @@ PS7 ps7_i (
.
DMA3DATYPE
()
,
// DMAC 3 DMA Ackbowledge TYpe (completed single AXI, completed burst AXI, flush request), output
.
DMA3DATYPE
()
,
// DMAC 3 DMA Ackbowledge TYpe (completed single AXI, completed burst AXI, flush request), output
.
DMA3RSTN
()
,
// DMAC 3 RESET output (reserved, do not use), output
.
DMA3RSTN
()
,
// DMAC 3 RESET output (reserved, do not use), output
// Interrupt signals
// Interrupt signals
.
IRQF2P
(
)
,
// Interrupts, O
L to PS [19:0], input
.
IRQF2P
(
{
19'b0
,
irq
}
)
,
// Interrupts, P
L to PS [19:0], input
.
IRQP2F
()
,
// Interrupts,
OL to PS
[28:0], output
.
IRQP2F
()
,
// Interrupts,
PS to PL
[28:0], output
// Event Signals
// Event Signals
.
EVENTEVENTI
()
,
// EVENT Wake up one or both CPU from WFE state, input
.
EVENTEVENTI
()
,
// EVENT Wake up one or both CPU from WFE state, input
.
EVENTEVENTO
()
,
// EVENT Asserted when one of the COUs executed SEV instruction, output
.
EVENTEVENTO
()
,
// EVENT Asserted when one of the COUs executed SEV instruction, output
...
...
system_defines.vh
View file @
ba05fb7c
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
`ifndef SYSTEM_DEFINES
`ifndef SYSTEM_DEFINES
`define SYSTEM_DEFINES
`define SYSTEM_DEFINES
`define PRELOAD_BRAMS
`define PRELOAD_BRAMS
`define AHCI_SATA 1
// Enviroment-dependent options
// Enviroment-dependent options
`ifdef IVERILOG
`ifdef IVERILOG
`define SIMULATION
`define SIMULATION
...
...
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