Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
x393
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
Commits
f4751492
Commit
f4751492
authored
Feb 13, 2015
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debugging, more corrections, tested block write through PIO channel 1
parent
bb237119
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
324 additions
and
58 deletions
+324
-58
ddrc_test01_testbench.tf
ddrc_test01_testbench.tf
+2
-2
x393_parameters.vh
includes/x393_parameters.vh
+1
-1
x393_tasks01.vh
includes/x393_tasks01.vh
+7
-1
mcntrl393.v
memctrl/mcntrl393.v
+4
-4
memctrl16.v
memctrl/memctrl16.v
+134
-18
mcont_from_chnbuf_reg.v
util_modules/mcont_from_chnbuf_reg.v
+1
-1
x393.v
x393.v
+1
-1
x393_testbench01.sav
x393_testbench01.sav
+94
-15
x393_testbench01.tf
x393_testbench01.tf
+80
-15
No files found.
ddrc_test01_testbench.tf
View file @
f4751492
...
...
@@ -269,7 +269,7 @@ module ddrc_test01_testbench #(
reg [ 9:0] SIMUL_AXI_ADDR;
// SuppressWarnings VEditor
reg SIMUL_AXI_FULL; // some data available
wire SIMUL_AXI_EMPTY= ~rvalid && rready && (rid==LAST_ARID); // use it to wait for?
reg [31:0] registered_rdata;
reg CLK;
...
...
@@ -1069,7 +1069,7 @@ simul_axi_read #(
task run_read_block;
begin
$display("RUN
WRITE
BLOCK @ %t",$time);
$display("RUN
READ
BLOCK @ %t",$time);
run_sequence(0,READ_BLOCK_OFFSET);
end
endtask
...
...
includes/x393_parameters.vh
View file @
f4751492
...
...
@@ -91,7 +91,7 @@
parameter MCONTR_TOP_STATUS_REG_ADDR= 'h1, // 8 or less bits: status register address to use for memory controller
parameter CHNBUF_READ_LATENCY =
0
, // external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter CHNBUF_READ_LATENCY =
1
, // external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter DFLT_DQS_PATTERN= 8'h55,
parameter DFLT_DQM_PATTERN= 8'h00, // 8'h00
...
...
includes/x393_tasks01.vh
View file @
f4751492
...
...
@@ -19,7 +19,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/> .
*******************************************************************************/
// Low-level tasks
// alternative way to check for empty read queue (without a separate counter)
task wait_read_queue_empty;
begin
wait (~rvalid && rready && (rid==LAST_ARID)); // nothing left in read queue?
SIMUL_AXI_FULL<=1'b0;
end
endtask
task axi_set_rd_lag;
input [3:0] lag;
begin
...
...
memctrl/mcntrl393.v
View file @
f4751492
...
...
@@ -100,7 +100,7 @@ module mcntrl393 #(
parameter
MCONTR_TOP_STATUS_REG_ADDR
=
'h1
,
// 8 or less bits: status register address to use for memory controller
parameter
CHNBUF_READ_LATENCY
=
0
,
// external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter
CHNBUF_READ_LATENCY
=
1
,
// external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter
DFLT_DQS_PATTERN
=
8'h55
,
parameter
DFLT_DQM_PATTERN
=
8'h00
,
// 8'h00
...
...
@@ -545,7 +545,7 @@ module mcntrl393 #(
assign
select_buf3_w
=
((
axiwr_pre_awaddr
^
MCONTR_BUF3_WR_ADDR
)
&
MCONTR_WR_MASK
)
==
0
;
assign
select_buf4_w
=
((
axird_pre_araddr
^
MCONTR_BUF4_RD_ADDR
)
&
MCONTR_RD_MASK
)
==
0
;
always
@
(
axi_rst
or
axi_clk
)
begin
always
@
(
posedge
axi_rst
or
posedge
axi_clk
)
begin
if
(
axi_rst
)
select_cmd0
<=
0
;
else
if
(
axiwr_start_burst
)
select_cmd0
<=
select_cmd0_w
;
...
...
@@ -567,7 +567,7 @@ module mcntrl393 #(
if
(
axi_rst
)
axird_selected_r
<=
0
;
else
if
(
axird_start_burst
)
axird_selected_r
<=
select_buf0_w
||
select_buf1_w
||
select_buf2_w
;
end
always
@
(
axi_clk
)
begin
always
@
(
posedge
axi_clk
)
begin
if
(
axiwr_wen
)
buf_wdata
<=
axiwr_data
;
if
(
axiwr_wen
)
buf_waddr
<=
axiwr_waddr
;
cmd_we
<=
axiwr_wen
&&
select_cmd0
;
...
...
@@ -1101,7 +1101,7 @@ module mcntrl393 #(
.
channel_pgm_en1
(
channel_pgm_en1
)
,
// output reg
.
seq_data1
(
{
22'b0
,
seq_data0
}
)
,
// input[31:0] // same as for channel 0
.
seq_wr1
(
1'b0
)
,
// not used: seq_wr1), // input
.
seq_set1
(
1'b0
)
,
// not used: seq_set1
), // input
.
seq_set1
(
seq_set0
)
,
// seq_set0 from channel 0 (shared in ps_pio
), // input
.
seq_done1
(
seq_done1
)
,
// output
.
rpage_nxt_chn1
(
rpage_nxt_chn1
)
,
// output
.
buf_rd_chn1
(
buf_rd_chn1
)
,
// output
...
...
memctrl/memctrl16.v
View file @
f4751492
...
...
@@ -86,7 +86,7 @@ module memctrl16 #(
parameter
MCONTR_TOP_STATUS_REG_ADDR
=
'h1
,
// 8 or less bits: status register address to use for memory controller
parameter
CHNBUF_READ_LATENCY
=
0
,
// external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter
CHNBUF_READ_LATENCY
=
1
,
// external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter
DFLT_DQS_PATTERN
=
8'h55
,
parameter
DFLT_DQM_PATTERN
=
8'h00
,
// 8'h00
...
...
@@ -511,7 +511,7 @@ wire rst=rst_in; // TODO: decide where toi generate
// wire [6:0] ext_buf_raddr;
wire
[
3
:
0
]
ext_buf_rchn
;
wire
ext_buf_rrefresh
;
wire
[
63
:
0
]
ext_buf_rdata
;
reg
[
63
:
0
]
ext_buf_rdata
;
wire
ext_buf_wr
;
wire
ext_buf_wpage_nxt
;
// wire [6:0] ext_buf_waddr;
...
...
@@ -934,8 +934,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
0
))
mcont_to_chnbuf_reg0_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn0
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn0
)
,.
buf_wdata_chn
(
buf_wdata_chn0
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata0
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
0
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg0_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn0
)
,.
buf_rdata_chn
(
buf_rdata_chn0
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
0
)
,.
buf_rd_chn
(
buf_rd_chn0
)
,.
buf_rdata_chn
(
buf_rdata_chn0
))
;
`endif
`endif
...
...
@@ -946,8 +947,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
1
))
mcont_to_chnbuf_reg1_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn1
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn1
)
,.
buf_wdata_chn
(
buf_wdata_chn1
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata1
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
1
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg1_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn1
)
,.
buf_rdata_chn
(
buf_rdata_chn1
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
1
)
,.
buf_rd_chn
(
buf_rd_chn1
)
,.
buf_rdata_chn
(
buf_rdata_chn1
))
;
`endif
`endif
...
...
@@ -958,8 +960,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
2
))
mcont_to_chnbuf_reg2_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn2
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn2
)
,.
buf_wdata_chn
(
buf_wdata_chn2
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata2
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
2
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg2_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn2
)
,.
buf_rdata_chn
(
buf_rdata_chn2
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
2
)
,.
buf_rd_chn
(
buf_rd_chn2
)
,.
buf_rdata_chn
(
buf_rdata_chn2
))
;
`endif
`endif
...
...
@@ -970,8 +973,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
3
))
mcont_to_chnbuf_reg3_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn3
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn3
)
,.
buf_wdata_chn
(
buf_wdata_chn3
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata3
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
3
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg3_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn3
)
,.
buf_rdata_chn
(
buf_rdata_chn3
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
3
)
,.
buf_rd_chn
(
buf_rd_chn3
)
,.
buf_rdata_chn
(
buf_rdata_chn3
))
;
`endif
`endif
...
...
@@ -982,8 +986,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
4
))
mcont_to_chnbuf_reg4_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn4
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn4
)
,.
buf_wdata_chn
(
buf_wdata_chn4
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata4
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
4
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg4_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn4
)
,.
buf_rdata_chn
(
buf_rdata_chn4
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
4
)
,.
buf_rd_chn
(
buf_rd_chn4
)
,.
buf_rdata_chn
(
buf_rdata_chn4
))
;
`endif
`endif
...
...
@@ -994,8 +999,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
5
))
mcont_to_chnbuf_reg5_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn5
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn5
)
,.
buf_wdata_chn
(
buf_wdata_chn5
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata5
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
5
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg5_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn5
)
,.
buf_rdata_chn
(
buf_rdata_chn5
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
5
)
,.
buf_rd_chn
(
buf_rd_chn5
)
,.
buf_rdata_chn
(
buf_rdata_chn5
))
;
`endif
`endif
...
...
@@ -1006,8 +1012,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
6
))
mcont_to_chnbuf_reg6_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn6
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn6
)
,.
buf_wdata_chn
(
buf_wdata_chn6
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata6
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
6
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg6_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn6
)
,.
buf_rdata_chn
(
buf_rdata_chn6
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
6
)
,.
buf_rd_chn
(
buf_rd_chn6
)
,.
buf_rdata_chn
(
buf_rdata_chn6
))
;
`endif
`endif
...
...
@@ -1018,8 +1025,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
7
))
mcont_to_chnbuf_reg7_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn7
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn7
)
,.
buf_wdata_chn
(
buf_wdata_chn7
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata7
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
7
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg7_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn7
)
,.
buf_rdata_chn
(
buf_rdata_chn7
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
7
)
,.
buf_rd_chn
(
buf_rd_chn7
)
,.
buf_rdata_chn
(
buf_rdata_chn7
))
;
`endif
`endif
...
...
@@ -1030,8 +1038,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
8
))
mcont_to_chnbuf_reg8_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn8
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn8
)
,.
buf_wdata_chn
(
buf_wdata_chn8
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata8
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
8
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg8_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn8
)
,.
buf_rdata_chn
(
buf_rdata_chn8
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
8
)
,.
buf_rd_chn
(
buf_rd_chn8
)
,.
buf_rdata_chn
(
buf_rdata_chn8
))
;
`endif
`endif
...
...
@@ -1042,8 +1051,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
9
))
mcont_to_chnbuf_reg9_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn9
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn9
)
,.
buf_wdata_chn
(
buf_wdata_chn9
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata9
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
9
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg9_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn9
)
,.
buf_rdata_chn
(
buf_rdata_chn9
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
9
)
,.
buf_rd_chn
(
buf_rd_chn9
)
,.
buf_rdata_chn
(
buf_rdata_chn9
))
;
`endif
`endif
...
...
@@ -1054,8 +1064,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
10
))
mcont_to_chnbuf_reg10_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn10
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn10
)
,.
buf_wdata_chn
(
buf_wdata_chn10
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata10
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
10
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg10_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn10
)
,.
buf_rdata_chn
(
buf_rdata_chn10
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
10
)
,.
buf_rd_chn
(
buf_rd_chn10
)
,.
buf_rdata_chn
(
buf_rdata_chn10
))
;
`endif
`endif
...
...
@@ -1066,8 +1077,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
11
))
mcont_to_chnbuf_reg11_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn11
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn11
)
,.
buf_wdata_chn
(
buf_wdata_chn11
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata11
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
11
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg11_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn11
)
,.
buf_rdata_chn
(
buf_rdata_chn11
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
11
)
,.
buf_rd_chn
(
buf_rd_chn11
)
,.
buf_rdata_chn
(
buf_rdata_chn11
))
;
`endif
`endif
...
...
@@ -1078,8 +1090,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
12
))
mcont_to_chnbuf_reg12_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn12
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn12
)
,.
buf_wdata_chn
(
buf_wdata_chn12
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata12
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
12
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg12_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn12
)
,.
buf_rdata_chn
(
buf_rdata_chn12
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
12
)
,.
buf_rd_chn
(
buf_rd_chn12
)
,.
buf_rdata_chn
(
buf_rdata_chn12
))
;
`endif
`endif
...
...
@@ -1090,8 +1103,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
13
))
mcont_to_chnbuf_reg13_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn13
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn13
)
,.
buf_wdata_chn
(
buf_wdata_chn13
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata13
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
13
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg13_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn13
)
,.
buf_rdata_chn
(
buf_rdata_chn13
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
13
)
,.
buf_rd_chn
(
buf_rd_chn13
)
,.
buf_rdata_chn
(
buf_rdata_chn13
))
;
`endif
`endif
...
...
@@ -1102,8 +1116,9 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
14
))
mcont_to_chnbuf_reg14_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn14
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn14
)
,.
buf_wdata_chn
(
buf_wdata_chn14
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata14
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
14
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg14_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn14
)
,.
buf_rdata_chn
(
buf_rdata_chn14
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
14
)
,.
buf_rd_chn
(
buf_rd_chn14
)
,.
buf_rdata_chn
(
buf_rdata_chn14
))
;
`endif
`endif
...
...
@@ -1114,10 +1129,111 @@ end
mcont_to_chnbuf_reg
#(
.
CHN_NUMBER
(
15
))
mcont_to_chnbuf_reg15_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_wr
(
ext_buf_wr
)
,.
ext_buf_wpage_nxt
(
ext_buf_wpage_nxt
)
,
.
ext_buf_wchn
(
ext_buf_wchn
)
,
.
ext_buf_wrefresh
(
ext_buf_wrefresh
)
,.
ext_buf_wdata
(
ext_buf_wdata
)
,.
buf_wr_chn
(
buf_wr_chn15
)
,.
buf_wpage_nxt_chn
(
buf_wpage_nxt_chn15
)
,.
buf_wdata_chn
(
buf_wdata_chn15
))
;
`else
wire
[
63
:
0
]
ext_buf_rdata15
;
mcont_from_chnbuf_reg
#(
.
CHN_NUMBER
(
15
)
,.
CHN_LATENCY
(
CHNBUF_READ_LATENCY
))
mcont_from_chnbuf_reg15_i
(
.
rst
(
rst
)
,.
clk
(
mclk
)
,.
ext_buf_rd
(
ext_buf_rd
)
,
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata
)
,.
buf_rd_chn
(
buf_rd_chn15
)
,.
buf_rdata_chn
(
buf_rdata_chn15
))
;
.
ext_buf_rchn
(
ext_buf_rchn
)
,
.
ext_buf_rrefresh
(
ext_buf_rrefresh
)
,.
ext_buf_rdata
(
ext_buf_rdata15
)
,.
buf_rd_chn
(
buf_rd_chn15
)
,.
buf_rdata_chn
(
buf_rdata_chn15
))
;
`endif
`endif
/// Combine read data from multiple channel buffers
wire
[
3
:
0
]
ext_buf_rchn_late
;
wire
ext_buf_rd_late
;
localparam
[
3
:
0
]
EXT_READ_LATENCY
=
CHNBUF_READ_LATENCY
+
1
;
dly_16
#(
.
WIDTH
(
5
)
)
dly_16_i
(
.
clk
(
mclk
)
,
// input
.
rst
(
rst
)
,
// input
.
dly
(
EXT_READ_LATENCY
)
,
// input[3:0]
.
din
(
{~
ext_buf_rrefresh
&
ext_buf_rd
,
ext_buf_rchn
}
)
,
// input[0:0]
.
dout
(
{
ext_buf_rd_late
,
ext_buf_rchn_late
}
)
// output[0:0]
)
;
always
@
(
posedge
mclk
)
if
(
ext_buf_rd_late
)
begin
case
(
ext_buf_rchn_late
)
`ifdef
def_enable_mem_chn0
`ifndef
def_read_mem_chn0
4'h0
:
ext_buf_rdata
<=
ext_buf_rdata0
;
`endif
`endif
`ifdef
def_enable_mem_chn1
`ifndef
def_read_mem_chn1
4'h1
:
ext_buf_rdata
<=
ext_buf_rdata1
;
`endif
`endif
`ifdef
def_enable_mem_chn2
`ifndef
def_read_mem_chn2
4'h2
:
ext_buf_rdata
<=
ext_buf_rdata2
;
`endif
`endif
`ifdef
def_enable_mem_chn3
`ifndef
def_read_mem_chn3
4'h3
:
ext_buf_rdata
<=
ext_buf_rdata3
;
`endif
`endif
`ifdef
def_enable_mem_chn4
`ifndef
def_read_mem_chn4
4'h4
:
ext_buf_rdata
<=
ext_buf_rdata4
;
`endif
`endif
`ifdef
def_enable_mem_chn5
`ifndef
def_read_mem_chn5
4'h5
:
ext_buf_rdata
<=
ext_buf_rdata5
;
`endif
`endif
`ifdef
def_enable_mem_chn6
`ifndef
def_read_mem_chn6
4'h6
:
ext_buf_rdata
<=
ext_buf_rdata6
;
`endif
`endif
`ifdef
def_enable_mem_chn7
`ifndef
def_read_mem_chn7
4'h7
:
ext_buf_rdata
<=
ext_buf_rdata7
;
`endif
`endif
`ifdef
def_enable_mem_chn8
`ifndef
def_read_mem_chn8
4'h8
:
ext_buf_rdata
<=
ext_buf_rdata8
;
`endif
`endif
`ifdef
def_enable_mem_chn9
`ifndef
def_read_mem_chn9
4'h9
:
ext_buf_rdata
<=
ext_buf_rdata9
;
`endif
`endif
`ifdef
def_enable_mem_chn10
`ifndef
def_read_mem_chn10
4'h10
:
ext_buf_rdata
<=
ext_buf_rdata10
;
`endif
`endif
`ifdef
def_enable_mem_chn11
`ifndef
def_read_mem_chn11
4'h11
:
ext_buf_rdata
<=
ext_buf_rdata11
;
`endif
`endif
`ifdef
def_enable_mem_chn12
`ifndef
def_read_mem_chn12
4'h12
:
ext_buf_rdata
<=
ext_buf_rdata12
;
`endif
`endif
`ifdef
def_enable_mem_chn13
`ifndef
def_read_mem_chn13
4'h13
:
ext_buf_rdata
<=
ext_buf_rdata13
;
`endif
`endif
`ifdef
def_enable_mem_chn14
`ifndef
def_read_mem_chn14
4'h14
:
ext_buf_rdata
<=
ext_buf_rdata14
;
`endif
`endif
`ifdef
def_enable_mem_chn15
`ifndef
def_read_mem_chn15
4'h15
:
ext_buf_rdata
<=
ext_buf_rdata15
;
`endif
`endif
default:
ext_buf_rdata
<=
'bx
;
endcase
end
// combining channel control signals to buses
`ifndef
def_enable_mem_chn0
wire
want_rq0
=
0
,
need_rq0
=
0
;
...
...
util_modules/mcont_from_chnbuf_reg.v
View file @
f4751492
...
...
@@ -22,7 +22,7 @@
module
mcont_from_chnbuf_reg
#(
parameter
CHN_NUMBER
=
0
,
parameter
CHN_LATENCY
=
0
// 0 - no extra latency in extrenal BRAM - data available next cycle after re (but prev. data
)
parameter
CHN_LATENCY
=
1
// 0 - no extra latency in extrenal BRAM - data available next cycle after regen (1 extra from ren
)
)(
input
rst
,
input
clk
,
...
...
x393.v
View file @
f4751492
...
...
@@ -96,7 +96,7 @@ module x393 #(
parameter
MCONTR_TOP_STATUS_REG_ADDR
=
'h1
,
// 8 or less bits: status register address to use for memory controller
parameter
CHNBUF_READ_LATENCY
=
0
,
// external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter
CHNBUF_READ_LATENCY
=
1
,
// external channel buffer extra read latency ( 0 - data available next cycle after re (but prev. data))
parameter
DFLT_DQS_PATTERN
=
8'h55
,
parameter
DFLT_DQM_PATTERN
=
8'h00
,
// 8'h00
...
...
x393_testbench01.sav
View file @
f4751492
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*]
Thu Feb 12 06:17:01
2015
[*]
Fri Feb 13 00:32:14
2015
[*]
[dumpfile] "/home/andrey/git/x393/simulation/x393_testbench01-2015021
1231241531
.lxt"
[dumpfile_mtime] "
Thu Feb 12 06:16:34
2015"
[dumpfile_size]
89243462
[dumpfile] "/home/andrey/git/x393/simulation/x393_testbench01-2015021
2171214320
.lxt"
[dumpfile_mtime] "
Fri Feb 13 00:16:41
2015"
[dumpfile_size]
226686145
[savefile] "/home/andrey/git/x393/x393_testbench01.sav"
[timestart]
766300
00
[size] 1823 11
80
[timestart]
1413104
00
[size] 1823 11
73
[pos] 1922 0
*-
23.698503 135570000
-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
*-
14.698502 141381875
-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] x393_testbench01.
[treeopen] x393_testbench01.x393_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.
chn1_buf_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.cmd_deser_16bit_i.
...
...
@@ -23,7 +24,7 @@
[treeopen] x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.scheduler16_i.i_index_max_16.
[treeopen] x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.status_router2_top_i.
[treeopen] x393_testbench01.x393_i.mcntrl393_test01_i.status_router4_i.
[sst_width]
202
[sst_width]
328
[signals_width] 377
[sst_expanded] 1
[sst_vpaned_height] 371
...
...
@@ -31,10 +32,10 @@
-top_simulation
@28
x393_testbench01.CLK[0]
@29
x393_testbench01.WAITING_STATUS[0]
@28
x393_testbench01.AXI_RD_EMPTY[0]
x393_testbench01.SIMUL_AXI_EMPTY[0]
x393_testbench01.SIMUL_AXI_FULL[0]
@22
x393_testbench01.SIMUL_AXI_ADDR[15:0]
x393_testbench01.SIMUL_AXI_READ[31:0]
...
...
@@ -48,8 +49,6 @@ x393_testbench01.rstb[0]
@22
x393_testbench01.rdata[31:0]
x393_testbench01.SIMUL_AXI_ADDR_W[15:0]
@28
x393_testbench01.SIMUL_AXI_FULL[0]
@c00022
x393_testbench01.registered_rdata[31:0]
@28
...
...
@@ -1396,6 +1395,34 @@ x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn0_buf_i.wpage_in[1:0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn0_buf_i.wpage_set[0]
@1000200
-PS_PIO_CHN0
@200
-
@800200
-PS_PIO_CHN1
@22
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.data_out[63:0]
@28
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.ext_clk[0]
@22
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.ext_data_in[31:0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.ext_waddr[9:0]
@28
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.ext_we[0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.page[1:0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.page_next[0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.page_r[1:0]
@22
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.raddr[6:0]
@28
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.rclk[0]
@29
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.rd[0]
@28
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.regen[0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.rpage_in[1:0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.chn1_buf_i.rpage_set[0]
@1000200
-PS_PIO_CHN1
@28
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.buf_rd_chn1[0]
@22
...
...
@@ -1493,9 +1520,38 @@ x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.want_rq0[0]
x393_testbench01.x393_i.mcntrl393_i.mcntrl_ps_pio_i.want_rq1[0]
@1000200
-PS_PIO
@
c
00200
@
8
00200
-memcntrl16_0
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rchn_late[3:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rd_late[0]
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.buf_rdata_chn1[63:0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rdata1[63:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rpage_nxt[0]
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rchn[3:0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rdata[63:0]
@200
-
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.buf_chn_sel[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.buf_rd_chn[0]
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.buf_rdata_chn[63:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.clk[0]
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.ext_buf_rchn[3:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.ext_buf_rd[0]
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.ext_buf_rdata[63:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.ext_buf_rrefresh[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcont_from_chnbuf_reg1_i.rst[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.mclk[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_enabled[0]
@22
...
...
@@ -1526,6 +1582,30 @@ x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.seq_done0[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.run_addr[10:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.run_busy[0]
@800200
-memcntr_sequencer
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_word[31:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_nop[0]
@22
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_addr_in[14:0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_bank_in[2:0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_rcw_pos[2:0]
@28
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_odt_in[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_cke_dis[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_sel_in[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_dq_en_in[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_dqs_en_in[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_dqs_toggle_en[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_dq_en_in[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_buf_wr[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_buf_rd[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_cmd_add_pause[0]
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.phy_cmd_i.phy_buf_rst[0]
@1000200
-memcntr_sequencer
@200
-
@800200
...
...
@@ -1549,7 +1629,6 @@ x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.cmd0_buf_i.we
x393_testbench01.x393_i.mcntrl393_i.memctrl16_i.ext_buf_rrefresh[0]
@1000200
-cmd0_buf
@1401200
-memcntrl16_0
@c00200
-max_0001
...
...
x393_testbench01.tf
View file @
f4751492
...
...
@@ -24,6 +24,9 @@
`
undef
WAIT_MRS
`
define
SET_PER_PIN_DEALYS
1
// set individual (including per-DQ pin delays)
`
define
TEST_WRITE_LEVELLING
1
`
define
TEST_READ_PATTERN
1
`
define
TEST_WRITE_BLOCK
1
`
define
TEST_READ_BLOCK
1
module
x393_testbench01
#(
`
include
"includes/x393_parameters.vh"
...
...
@@ -90,7 +93,7 @@ module x393_testbench01 #(
reg
[
SIMUL_AXI_READ_WIDTH
-
1
:
0
]
SIMUL_AXI_ADDR
;
// SuppressWarnings VEditor
reg
SIMUL_AXI_FULL
;
// some data available
wire
SIMUL_AXI_EMPTY
=
~
rvalid
&&
rready
&&
(
rid
==
LAST_ARID
);
//SuppressThisWarning VEditor : may be unused, just for simulation // use it to wait for?
reg
[
31
:
0
]
registered_rdata
;
// here read data from tasks goes
// SuppressWarnings VEditor
reg
WAITING_STATUS
;
// tasks are waiting for status
...
...
@@ -177,7 +180,7 @@ module x393_testbench01 #(
wire
bready
;
integer
NUM_WORDS_READ
;
integer
NUM_WORDS_EXPECTED
;
wire
AXI_RD_EMPTY
=
NUM_WORDS_READ
==
NUM_WORDS_EXPECTED
;
wire
AXI_RD_EMPTY
=
NUM_WORDS_READ
==
NUM_WORDS_EXPECTED
;
//SuppressThisWarning VEditor : may be unused, just for simulation
// integer ii;
always
#(CLKIN_PERIOD/2) CLK <= ~CLK;
initial
begin
...
...
@@ -273,12 +276,43 @@ always #(CLKIN_PERIOD/2) CLK <= ~CLK;
0
);
// input chn; // channel buffer to use: 0 - memory read, 1 - memory write
wait_ps_pio_done
(
DEFAULT_STATUS_MODE
);
// wait previous memory transaction finished before changing delays (effective immediately)
read_block_buf_chn
(
0
,
1
,
32
,
1
);
// chn=0, page=1, number of 32-bit words=32, wait_done
// task wait_read_queue_empty; - alternative way to check fo empty read queue
// @ (negedge rstb);
axi_set_dqs_idelay_nominal
;
axi_set_dqs_odelay_nominal
;
// axi_set_dqs_odelay_nominal;
axi_set_dqs_odelay
(
'h78);
axi_set_wbuf_delay(WBUF_DLY_DFLT);
`endif
`ifdef TEST_READ_PATTERN
schedule_ps_pio ( // shedule software-control memory operation (may need to check FIFO status first)
READ_PATTERN_OFFSET, // input [9:0] seq_addr; // sequence start address
2, // input [1:0] page; // buffer page number
0, // input urgent; // high priority request (only for competion with other channels, wiil not pass in this FIFO)
0); // input chn; // channel buffer to use: 0 - memory read, 1 - memory write
wait_ps_pio_done(DEFAULT_STATUS_MODE); // wait previous memory transaction finished before changing delays (effective immediately)
read_block_buf_chn (0, 2, 32, 1 ); // chn=0, page=2, number of 32-bit words=32, wait_done
`endif
`ifdef TEST_WRITE_BLOCK
// write_block_buf_chn; // fill block memory - already set in set_up task
schedule_ps_pio ( // shedule software-control memory operation (may need to check FIFO status first)
WRITE_BLOCK_OFFSET, // input [9:0] seq_addr; // sequence start address
0, // input [1:0] page; // buffer page number
0, // input urgent; // high priority request (only for competion with other channels, wiil not pass in this FIFO)
1); // input chn; // channel buffer to use: 0 - memory read, 1 - memory write
// tempoary - for debugging:
wait_ps_pio_done(DEFAULT_STATUS_MODE); // wait previous memory transaction finished before changing delays (effective immediately)
`endif
`ifdef TEST_READ_BLOCK
schedule_ps_pio ( // shedule software-control memory operation (may need to check FIFO status first)
READ_BLOCK_OFFSET, // input [9:0] seq_addr; // sequence start address
3, // input [1:0] page; // buffer page number
0, // input urgent; // high priority request (only for competion with other channels, wiil not pass in this FIFO)
0); // input chn; // channel buffer to use: 0 - memory read, 1 - memory write
wait_ps_pio_done(DEFAULT_STATUS_MODE); // wait previous memory transaction finished before changing delays (effective immediately)
read_block_buf_chn (0, 3, 256, 1 ); // chn=0, page=3, number of 32-bit words=256, wait_done
`endif
#20000;
$
finish;
end
...
...
@@ -861,7 +895,7 @@ simul_axi_read #(
// prepare all sequences
set_all_sequences
;
// prepare write buffer
write_block_buf
;
// fill block memory
write_block_buf
_chn
(
1
,
0
,
256
);
// fill block memory (channel, page, number)
// set all delays
//#axi_set_delays - from tables, per-pin
`
ifdef
SET_PER_PIN_DEALYS
...
...
@@ -971,15 +1005,36 @@ task schedule_ps_pio; // shedule software-control memory operation (may need to
write_contol_register(MCNTRL_PS_ADDR + MCNTRL_PS_CMD, {18'
b0
,
chn
,
urgent
,
page
,
seq_addr
}
);
end
endtask
//MCONTR_BUF1_WR_ADDR
task
write_block_buf_chn
;
// S uppressThisWarning VEditor : may be unused
input
integer
chn
;
// buffer channel
input
[
1
:
0
]
page
;
input
integer
num_words
;
// number of words to write (will be rounded up to multiple of 16)
reg
[
29
:
0
]
start_addr
;
begin
case
(
chn
)
1
:
start_addr
=
MCONTR_BUF1_WR_ADDR
+
(
page
<<
8
);
3: start_addr=MCONTR_BUF3_WR_ADDR + (page << 8);
default: begin
$display("**** ERROR: Invalid channel for write buffer = %d @%t", chn, $time);
start_addr = MCONTR_BUF1_WR_ADDR+ (page << 8);
end
endcase
write_block_buf (start_addr, num_words);
end
endtask
task write_block_buf;
input [29:0] start_word_address;
input integer num_words; // number of words to write (will be rounded up to multiple of 16)
integer i, j;
begin
$display("**** write_block_buf @%t", $time);
for
(
i
=
0
;
i
<
256
;
i
=
i
+
16
)
begin
for (i = 0; i <
num_words
; i = i + 16) begin
axi_write_addr_data(
i, // id
MCONTR_BUF1_WR_ADDR
+
(
i
<<
2
), // addr
{start_word_address,2'b0}+( i << 2),
// (MCONTR_BUF1_WR_ADDR + (page <<8)+ i) << 2, // addr
i | (((i + 7) & 'hff) << 8) | (((i + 23) & 'hff) << 16) | (((i + 31) & 'hff) << 24),
4'hf, // len
1, // burst type - increment
...
...
@@ -1030,6 +1085,8 @@ task read_block_buf;
input wait_done;
integer i; //,j;
begin
wait (~rstb);
SIMUL_AXI_FULL<=1'b0;
$display("**** read_block_buf @%t", $time);
axi_set_rd_lag(0);
for (i = 0; i < num_read; i = i + 16) begin
...
...
@@ -1043,7 +1100,8 @@ task read_block_buf;
);
end
if (wait_done) begin
wait (AXI_RD_EMPTY);
// wait (AXI_RD_EMPTY);
wait_read_queue_empty;
end
end
endtask
...
...
@@ -1124,27 +1182,33 @@ task set_write_block;
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// see if pause is needed . See when buffer read should be started - maybe before WR command
// skip done bank ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD B_RST
data <= func_encode_skip( 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0); // tRCD
data <= func_encode_skip( 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0); // tRCD - 2 read bufs
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// first write
// first write
, 3 rd_buf
// write
// addr bank RCW ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD NOP, B_RST
data <= func_encode_cmd( {5'b0,ca[9:0]}, ba[2:0], 3, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0); // B_RD moved 1 cycle earlier
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// nop
// nop
4-th rd_buf
// skip done bank ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD B_RST
data <= func_encode_skip( 0, 0, ba[2:0], 1, 0, 1, 1, 1, 0, 1, 0, 1, 0);
// data <= func_encode_skip( 0, 0, ba[2:0], 1, 0, 1, 1, 1, 0, 1, 0, 1, 0);
data <= func_encode_skip( 0, 0, ba[2:0], 1, 0, 0, 1, 1, 0, 0, 0, 1, 0);
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
//repeat remaining writes
for (i = 1; i < 6
4
; i = i + 1) begin
for (i = 1; i < 6
3
; i = i + 1) begin
// write
// add bank RCW ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD NOP, B_RST
data <= func_encode_cmd( {5'b0,ca[9:0]}
, ba[2:0], 3,
1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0);
data <= func_encode_cmd( {5'b0,ca[9:0]}
+(i<<3),ba[2:0],3,
1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0);
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
end
// One last write pair w/o buffer
// add bank RCW ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD NOP, B_RST
data <= func_encode_cmd( {5'b0,ca[9:0]}+(63<<3),ba[2:0],3,1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0);
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// nop
// skip done bank ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD B_RST
data <= func_encode_skip( 0, 0, ba[2:0], 1, 0, 0, 1, 1, 1, 0, 0,
1
, 0);
data <= func_encode_skip( 0, 0, ba[2:0], 1, 0, 0, 1, 1, 1, 0, 0,
0
, 0);
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// nop
// skip done bank ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD B_RST
...
...
@@ -1160,7 +1224,7 @@ task set_write_block;
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// precharge, ODT off
// addr bank RCW ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD NOP, B_RST
data <= func_encode_cmd( ra[14:0], ba[2:0], 5, 0, 0, 0, 0, 0, 0,
1
, 0, 0, 0, 0);
data <= func_encode_cmd( ra[14:0], ba[2:0], 5, 0, 0, 0, 0, 0, 0,
0
, 0, 0, 0, 0);
@(posedge CLK) axi_write_single_w(cmd_addr, data); cmd_addr <= cmd_addr + 1;
// skip done bank ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD B_RST
data <= func_encode_skip( 2, 0, ba[2:0], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
...
...
@@ -1193,6 +1257,7 @@ task set_read_pattern;
mr3_patt <= ddr3_mr3(
1'h1, // mpr; // MPR mode: 0 - normal, 1 - dataflow from MPR
2'h0); // [1:0] mpr_rf; // MPR read function: 2'b00: predefined pattern 0101...
@(posedge CLK);
// Set pattern mode
// addr bank RCW ODT CKE SEL DQEN DQSEN DQSTGL DCI B_WR B_RD NOP, B_RST
data <= func_encode_cmd(mr3_patt[14:0], mr3_patt[17:15], 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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