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
bda74800
Commit
bda74800
authored
May 03, 2015
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
preparing for testing membridge module on the target system
parent
079114c1
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
59589 additions
and
60002 deletions
+59589
-60002
.project
.project
+15
-15
x393_mcntrl.pickle
py393/dbg/x393_mcntrl.pickle
+59378
-59795
test_mcntrl.py
py393/test_mcntrl.py
+4
-1
vrlg.py
py393/vrlg.py
+67
-25
x393_axi_control_status.py
py393/x393_axi_control_status.py
+17
-15
x393_mcntrl_adjust.py
py393/x393_mcntrl_adjust.py
+1
-0
x393_mcntrl_buffers.py
py393/x393_mcntrl_buffers.py
+3
-3
x393_mcntrl_tests.py
py393/x393_mcntrl_tests.py
+14
-10
x393_mem.py
py393/x393_mem.py
+82
-23
x393_testbench01.sav
x393_testbench01.sav
+7
-17
x393_testbench01.tf
x393_testbench01.tf
+1
-98
No files found.
.project
View file @
bda74800
...
...
@@ -62,77 +62,77 @@
<link>
<name>
vivado_logs/VivadoBitstream.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoOpt.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoOptPhys.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoOptPower.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoPlace.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoRoute.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoSynthesis.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-201504
28234540494
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-201504
30123759800
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportImplemented.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportSynthesis.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-201504
28234540494
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-201504
30123759800
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoTimingReportImplemented.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-201504
2823474072
2.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-201504
3012395788
2.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoTimingReportSynthesis.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-201504
28234540494
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-201504
30123759800
.log
</location>
</link>
<link>
<name>
vivado_state/x393-opt-phys.dcp
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-opt-phys-201504
2823474072
2.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-opt-phys-201504
3012395788
2.dcp
</location>
</link>
<link>
<name>
vivado_state/x393-place.dcp
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-place-201504
2823474072
2.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-place-201504
3012395788
2.dcp
</location>
</link>
<link>
<name>
vivado_state/x393-route.dcp
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-route-201504
2823474072
2.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-route-201504
3012395788
2.dcp
</location>
</link>
<link>
<name>
vivado_state/x393-synth.dcp
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-synth-201504
28234540494
.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-synth-201504
30123759800
.dcp
</location>
</link>
</linkedResources>
</projectDescription>
py393/dbg/x393_mcntrl.pickle
View file @
bda74800
This source diff could not be displayed because it is too large. You can
view the blob
instead.
py393/test_mcntrl.py
View file @
bda74800
...
...
@@ -56,6 +56,7 @@ import x393_mcntrl_buffers
import
x393_mcntrl_tests
import
x393_mcntrl_eyepatterns
import
x393_mcntrl_adjust
import
x393_mcntrl_membridge
import
vrlg
__all__
=
[]
__version__
=
0.1
...
...
@@ -330,7 +331,7 @@ USAGE
x393Tests
=
x393_mcntrl_tests
.
X393McntrlTests
(
verbose
,
args
.
simulated
)
x393Eyepatterns
=
x393_mcntrl_eyepatterns
.
X393McntrlEyepattern
(
verbose
,
args
.
simulated
)
x393Adjust
=
x393_mcntrl_adjust
.
X393McntrlAdjust
(
verbose
,
args
.
simulated
,
args
.
localparams
)
X393Membridge
=
x393_mcntrl_membridge
.
X393McntrlMembridge
(
verbose
,
args
.
simulated
)
'''
print ("----------------------")
print("x393_mem.__dict__="+str(x393_mem.__dict__))
...
...
@@ -354,6 +355,8 @@ USAGE
extractTasks
(
x393_mcntrl_tests
.
X393McntrlTests
,
x393Tests
)
extractTasks
(
x393_mcntrl_eyepatterns
.
X393McntrlEyepattern
,
x393Eyepatterns
)
extractTasks
(
x393_mcntrl_adjust
.
X393McntrlAdjust
,
x393Adjust
)
extractTasks
(
x393_mcntrl_membridge
.
X393McntrlMembridge
,
X393Membridge
)
for
cmdLine
in
commands
:
print
(
'Running task: '
+
str
(
cmdLine
))
...
...
py393/vrlg.py
View file @
bda74800
...
...
@@ -121,14 +121,16 @@ def restore_default(vname=None):
DFLT_REFRESH_ADDR__TYPE
=
str
NUM_CYCLES_09__RAW
=
str
MEMBRIDGE_SIZE64__TYPE
=
str
DQSTRI_LAST__TYPE
=
str
DLY_LD_MASK__TYPE
=
str
STATUS_MSB_RSHFT__TYPE
=
str
MCONTR_BUF0_RD_ADDR
=
int
MCNTRL_SCANLINE_WINDOW_WH__RAW
=
str
MCNTRL_TEST01_STATUS_REG_CHN4_ADDR
=
int
WSEL
=
int
MCNTRL_TEST01_CHN3_STATUS_CNTRL
=
int
MCNTRL_PS_EN_RST__TYPE
=
str
LD_DLY_LANE1_IDELAY
=
int
MCONTR_TOP_16BIT_STATUS_CNTRL__TYPE
=
str
MCNTRL_TILED_CHN4_ADDR
=
int
WINDOW_Y0__RAW
=
str
...
...
@@ -146,26 +148,29 @@ TILED_STARTX__TYPE = str
HIGH_PERFORMANCE_MODE__TYPE
=
str
MCONTR_PHY_STATUS_REG_ADDR__TYPE
=
str
MCONTR_TOP_16BIT_ADDR__TYPE
=
str
AFI_LO_ADDR64__TYPE
=
str
WBUF_DLY_WLV__TYPE
=
str
TEST01_SUSPEND
=
int
MCONTR_TOP_16BIT_CHN_EN
=
int
NUM_XFER_BITS__TYPE
=
str
AFI_SIZE64
=
int
DLY_LANE1_IDELAY__TYPE
=
str
REF_JITTER1__RAW
=
str
MCNTRL_TILED_MASK__TYPE
=
str
MC
ONTR_BUF1_WR_ADDR
=
int
MC
NTRL_SCANLINE_MASK__TYPE
=
str
DFLT_DQ_TRI_ON_PATTERN
=
int
MCONTR_PHY_0BIT_SDRST_ACT
=
int
DEFAULT_STATUS_MODE
=
int
MEMBRIDGE_START64__TYPE
=
str
TILED_EXTRA_PAGES__TYPE
=
str
DLY_LD__TYPE
=
str
MCNTRL_TEST01_CHN2_STATUS_CNTRL__TYPE
=
str
MCNTRL_SCANLINE_FRAME_PAGE_RESET
=
int
STATUS_2LSB_SHFT__TYPE
=
str
DFLT_WBUF_DELAY__RAW
=
str
DLY_LANE1_ODELAY
__TYPE
=
str
MCNTRL_TILED_FRAME_PAGE_RESET
__TYPE
=
str
TILE_VSTEP__RAW
=
str
M
CNTRL_SCANLINE_STATUS_REG_CHN1_ADDR__RAW
=
str
M
EMBRIDGE_LEN64__TYPE
=
str
NUM_CYCLES_04
=
int
NUM_CYCLES_05
=
int
DLY_LD
=
int
...
...
@@ -180,7 +185,7 @@ MCNTRL_TEST01_CHN4_STATUS_CNTRL__TYPE = str
NUM_CYCLES_13__RAW
=
str
MCONTR_BUF0_RD_ADDR__TYPE
=
str
STATUS_ADDR__RAW
=
str
MCNTRL_SCANLINE_MASK
__TYPE
=
str
DLY_LANE0_IDELAY
__TYPE
=
str
MCNTRL_PS_ADDR__TYPE
=
str
WINDOW_WIDTH__RAW
=
str
CHNBUF_READ_LATENCY
=
int
...
...
@@ -199,7 +204,8 @@ MCNTRL_TILED_TILE_WHS = int
FRAME_START_ADDRESS__TYPE
=
str
MCNTRL_TILED_STATUS_REG_CHN2_ADDR
=
int
MCNTRL_TILED_STATUS_CNTRL__RAW
=
str
DQSTRI_FIRST
=
int
MEMBRIDGE_ADDR__RAW
=
str
DLY_PHASE
=
int
DFLT_DQS_TRI_OFF_PATTERN
=
int
NUM_CYCLES_03__TYPE
=
str
MCONTR_TOP_16BIT_CHN_EN__TYPE
=
str
...
...
@@ -211,8 +217,9 @@ VERBOSE = int
DLY_LANE1_ODELAY
=
long
MCONTR_TOP_16BIT_REFRESH_ADDRESS__TYPE
=
str
CMD_DONE_BIT__TYPE
=
str
MCNTRL_SCANLINE_STATUS_REG_CHN1_ADDR__RAW
=
str
MCNTRL_SCANLINE_STATUS_CNTRL__TYPE
=
str
DLY_LANE0_IDELAY
=
long
CLKFBOUT_DIV_AXIHP
=
int
NUM_CYCLES_13__TYPE
=
str
AXI_RD_ADDR_BITS__RAW
=
str
MCNTRL_TEST01_CHN3_STATUS_CNTRL__TYPE
=
str
...
...
@@ -220,11 +227,13 @@ MCONTR_WR_MASK__RAW = str
MCNTRL_TILED_WINDOW_STARTXY
=
int
MCONTR_TOP_0BIT_MCONTR_EN
=
int
SCANLINE_EXTRA_PAGES__RAW
=
str
MEMBRIDGE_LEN64__RAW
=
str
MCONTR_PHY_16BIT_EXTRA
=
int
MCONTR_ARBIT_ADDR_MASK__TYPE
=
str
TEST01_NEXT_PAGE__TYPE
=
str
MCONTR_PHY_0BIT_DLY_SET__TYPE
=
str
MCONTR_PHY_STATUS_REG_ADDR
=
int
NUM_CYCLES_LOW_BIT
=
int
CLKFBOUT_MULT_REF
=
int
NUM_CYCLES_14__RAW
=
str
MCONTR_PHY_0BIT_CMDA_EN__TYPE
=
str
...
...
@@ -254,7 +263,7 @@ MCONTR_BUF2_WR_ADDR__RAW = str
NUM_CYCLES_11__TYPE
=
str
MCNTRL_SCANLINE_STARTADDR__TYPE
=
str
WBUF_DLY_DFLT__RAW
=
str
D
LY_PHASE
=
int
D
QSTRI_FIRST
=
int
LD_DLY_CMDA__TYPE
=
str
DLY_CMDA_ODELAY__TYPE
=
str
LD_DLY_CMDA
=
int
...
...
@@ -267,10 +276,13 @@ MCNTRL_SCANLINE_MASK = int
TILE_HEIGHT
=
int
AXI_WR_ADDR_BITS__TYPE
=
str
MCNTRL_PS_MASK
=
int
MEMBRIDGE_CTRL
=
int
MCNTRL_TEST01_STATUS_REG_CHN3_ADDR
=
int
COLADDR_NUMBER
=
int
MCONTR_PHY_STATUS_CNTRL
=
int
MCNTRL_PS_ADDR__RAW
=
str
MCONTR_BUF2_RD_ADDR__TYPE
=
str
CLKFBOUT_DIV_AXIHP__RAW
=
str
TILED_STARTX__RAW
=
str
WRITE_BLOCK_OFFSET__TYPE
=
str
STATUS_ADDR_MASK
=
int
...
...
@@ -279,7 +291,7 @@ AXI_WR_ADDR_BITS = int
TEST01_NEXT_PAGE
=
int
CLKFBOUT_MULT__RAW
=
str
MAX_TILE_HEIGHT__RAW
=
str
INITIALIZE_OFFSET__TYPE
=
str
MCNTRL_TEST01_CHN1_STATUS_CNTRL
=
int
IBUF_LOW_PWR
=
str
CONTROL_ADDR
=
int
DQSTRI_FIRST__TYPE
=
str
...
...
@@ -318,7 +330,9 @@ LD_DLY_LANE1_ODELAY__RAW = str
MCNTRL_TILED_WINDOW_WH__TYPE
=
str
MCONTR_WR_MASK__TYPE
=
str
SS_MOD_PERIOD__RAW
=
str
MEMBRIDGE_WIDTH64__TYPE
=
str
MAX_TILE_HEIGHT
=
int
AFI_LO_ADDR64__RAW
=
str
MCNTRL_SCANLINE_STARTADDR__RAW
=
str
MCNTRL_SCANLINE_FRAME_FULL_WIDTH__RAW
=
str
MCNTRL_SCANLINE_STATUS_REG_CHN3_ADDR__TYPE
=
str
...
...
@@ -329,8 +343,10 @@ MCONTR_TOP_STATUS_REG_ADDR__TYPE = str
MCONTR_PHY_16BIT_WBUF_DELAY
=
int
DEFAULT_STATUS_MODE__RAW
=
str
DLY_LANE1_DQS_WLV_IDELAY__TYPE
=
str
TILE_HEIGHT__RAW
=
str
FRAME_WIDTH_BITS
=
int
MCNTRL_TILED_STATUS_REG_CHN2_ADDR__TYPE
=
str
MEMBRIDGE_STATUS_CNTRL
=
int
SLEW_CMDA__TYPE
=
str
MCONTR_RD_MASK__TYPE
=
str
READ_BLOCK_OFFSET__RAW
=
str
...
...
@@ -339,6 +355,7 @@ SLEW_DQ__RAW = str
FRAME_HEIGHT_BITS__TYPE
=
str
DLY_DQS_IDELAY
=
long
MCONTR_BUF3_RD_ADDR__TYPE
=
str
MEMBRIDGE_ADDR
=
int
DLY_DQ_ODELAY__TYPE
=
str
MCONTR_PHY_16BIT_PATTERNS_TRI__RAW
=
str
MCNTRL_TEST01_STATUS_REG_CHN4_ADDR__RAW
=
str
...
...
@@ -352,11 +369,13 @@ DLY_LANE0_DQS_WLV_IDELAY__TYPE = str
MCNTRL_SCANLINE_STATUS_CNTRL__RAW
=
str
SCANLINE_EXTRA_PAGES__TYPE
=
str
PHASE_WIDTH__RAW
=
str
MEMBRIDGE_START64
=
int
MEMBRIDGE_SIZE64__RAW
=
str
DFLT_DQS_PATTERN
=
int
DLY_LANE0_DQS_WLV_IDELAY__RAW
=
str
MCNTRL_TEST01_CHN2_MODE__TYPE
=
str
DLY_LANE1_IDELAY__RAW
=
str
MC
ONTR_BUF1_RD_ADDR
=
int
MC
NTRL_SCANLINE_WINDOW_X0Y0__TYPE
=
str
SLEW_CLK
=
str
LD_DLY_LANE1_ODELAY__TYPE
=
str
MCNTRL_PS_STATUS_CNTRL
=
int
...
...
@@ -365,7 +384,7 @@ SS_MODE__TYPE = str
MCONTR_TOP_16BIT_REFRESH_ADDRESS__RAW
=
str
WINDOW_Y0__TYPE
=
str
MCONTR_PHY_0BIT_DLY_RST__TYPE
=
str
MCONTR_BUF1_WR_ADDR__TYPE
=
str
CLKFBOUT_MULT_AXIHP__RAW
=
str
BUFFER_DEPTH32__TYPE
=
str
MCONTR_TOP_16BIT_STATUS_CNTRL
=
int
MCONTR_BUF4_RD_ADDR__RAW
=
str
...
...
@@ -380,8 +399,10 @@ DLY_CMDA = long
DLY_LANE0_IDELAY__RAW
=
str
MCONTR_ARBIT_ADDR
=
int
MCNTRL_TEST01_CHN1_STATUS_CNTRL__RAW
=
str
MEMBRIDGE_CTRL__RAW
=
str
CLKFBOUT_DIV_REF__TYPE
=
str
NUM_CYCLES_04__TYPE
=
str
WSEL__RAW
=
str
MCNTRL_SCANLINE_MODE__RAW
=
str
READ_PATTERN_OFFSET__TYPE
=
str
MCNTRL_TILED_PENDING_CNTR_BITS
=
int
...
...
@@ -390,14 +411,15 @@ MAX_TILE_WIDTH__TYPE = str
MCONTR_CMD_WR_ADDR
=
int
MCONTR_BUF3_RD_ADDR__RAW
=
str
CLKIN_PERIOD
=
int
MCNTRL_TILED_FRAME_PAGE_RESET__TYPE
=
str
DLY_LANE1_ODELAY__TYPE
=
str
RSEL__TYPE
=
str
MCNTRL_TEST01_MASK__RAW
=
str
MCONTR_PHY_16BIT_ADDR_MASK
=
int
MCNTRL_SCANLINE_STATUS_REG_CHN1_ADDR__TYPE
=
str
HIGH_PERFORMANCE_MODE
=
str
NUM_CYCLES_07__RAW
=
str
DQTRI_LAST__RAW
=
str
MCONTR_BUF1_RD_ADDR__RAW
=
str
TILE_WIDTH
=
int
CLKFBOUT_PHASE
=
float
DFLT_DQM_PATTERN
=
int
MCNTRL_TILED_STATUS_REG_CHN2_ADDR__RAW
=
str
...
...
@@ -438,8 +460,8 @@ MCNTRL_PS_CMD__RAW = str
MCONTR_BUF3_WR_ADDR
=
int
NEWPAR
=
int
MCNTRL_PS_MASK__RAW
=
str
AFI_SIZE64__RAW
=
str
MCONTR_PHY_0BIT_CKE_EN
=
int
MCNTRL_SCANLINE_WINDOW_X0Y0__TYPE
=
str
BUFFER_DEPTH32
=
int
MCNTRL_TILED_CHN2_ADDR__TYPE
=
str
SLEW_DQS
=
str
...
...
@@ -447,6 +469,7 @@ DFLT_REFRESH_ADDR = int
MCONTR_WR_MASK
=
int
MCNTRL_SCANLINE_STATUS_REG_CHN1_ADDR
=
int
TEST01_SUSPEND__RAW
=
str
MEMBRIDGE_STATUS_CNTRL__TYPE
=
str
T_REFI__TYPE
=
str
STATUS_DEPTH__RAW
=
str
DFLT_DQ_TRI_ON_PATTERN__TYPE
=
str
...
...
@@ -454,7 +477,6 @@ MCONTR_TOP_0BIT_ADDR_MASK__RAW = str
TEST01_START_FRAME
=
int
DQTRI_FIRST__TYPE
=
str
MCONTR_PHY_0BIT_ADDR_MASK__TYPE
=
str
DLY_LANE0_IDELAY__TYPE
=
str
T_RFC__RAW
=
str
DLY_CMDA__TYPE
=
str
CLKFBOUT_MULT__TYPE
=
str
...
...
@@ -477,20 +499,24 @@ COLADDR_NUMBER__TYPE = str
MCNTRL_SCANLINE_FRAME_FULL_WIDTH
=
int
TEST01_SUSPEND__TYPE
=
str
PICKLE
=
str
AFI_SIZE64__TYPE
=
str
NUM_CYCLES_15__RAW
=
str
MCONTR_PHY_0BIT_ADDR_MASK
=
int
MCNTRL_TILED_TILE_WHS__TYPE
=
str
DLY_DQ_IDELAY
=
long
WINDOW_X0
=
int
DFLT_WBUF_DELAY__TYPE
=
str
MCNTRL_TEST01_CHN1_STATUS_CNTRL
=
int
INITIALIZE_OFFSET__TYPE
=
str
LD_DLY_LANE0_ODELAY
=
int
SCANLINE_EXTRA_PAGES
=
int
READ_PATTERN_OFFSET__RAW
=
str
MCNTRL_SCANLINE_CHN1_ADDR__RAW
=
str
TILE_HEIGHT__RAW
=
str
MEMBRIDGE_LEN64
=
int
MEMBRIDGE_SIZE64
=
int
PICKLE__TYPE
=
str
MCONTR_PHY_0BIT_CKE_EN__TYPE
=
str
AFI_LO_ADDR64
=
int
RSEL
=
int
MCNTRL_TILED_MODE__TYPE
=
str
DIVCLK_DIVIDE
=
int
NUM_CYCLES_07__TYPE
=
str
...
...
@@ -512,23 +538,25 @@ MCONTR_PHY_0BIT_DLY_RST = int
MCONTR_PHY_16BIT_ADDR__TYPE
=
str
TILED_STARTY
=
int
TILED_STARTX
=
int
MEMBRIDGE_MASK__TYPE
=
str
AXI_WR_ADDR_BITS__RAW
=
str
MCONTR_BUF3_RD_ADDR
=
int
DFLT_REFRESH_PERIOD__TYPE
=
str
MCNTRL_TILED_FRAME_FULL_WIDTH__RAW
=
str
MCNTRL_TILED_MASK
=
int
NUM_CYCLES_03__RAW
=
str
MCONTR_BUF1_WR_ADDR__RAW
=
str
CLKFBOUT_PHASE__TYPE
=
str
MCONTR_PHY_16BIT_ADDR_MASK__RAW
=
str
DLY_LANE1_DQS_WLV_IDELAY
=
long
MCNTRL_TILED_WINDOW_WH
=
int
CLKFBOUT_PHASE__TYPE
=
str
NUM_CYCLES_06__RAW
=
str
MCNTRL_TILED_WINDOW_X0Y0__TYPE
=
str
NUM_XFER_BITS__RAW
=
str
MCNTRL_TILED_WINDOW_STARTXY__RAW
=
str
CLKFBOUT_MULT_AXIHP
=
int
DLY_CMDA_ODELAY
=
long
MCONTR_TOP_0BIT_ADDR
=
int
MEMBRIDGE_LO_ADDR64__TYPE
=
str
MCNTRL_SCANLINE_MODE
=
int
MCONTR_ARBIT_ADDR_MASK
=
int
NUM_CYCLES_05__RAW
=
str
...
...
@@ -541,6 +569,7 @@ MCONTR_TOP_0BIT_REFRESH_EN = int
MCNTRL_TILED_STATUS_REG_CHN4_ADDR
=
int
SLEW_CMDA__RAW
=
str
MCNTRL_TEST01_CHN2_MODE__RAW
=
str
CLKFBOUT_MULT_AXIHP__TYPE
=
str
LD_DLY_PHASE__RAW
=
str
MCONTR_TOP_STATUS_REG_ADDR__RAW
=
str
MCONTR_ARBIT_ADDR__TYPE
=
str
...
...
@@ -560,12 +589,13 @@ MCONTR_BUF2_RD_ADDR = int
MCONTR_BUF2_WR_ADDR__TYPE
=
str
NUM_CYCLES_02__TYPE
=
str
DQTRI_LAST__TYPE
=
str
T
ILE_WIDTH
=
int
T
EST_INITIAL_BURST
=
int
FRAME_HEIGHT_BITS__RAW
=
str
MCNTRL_TILED_STARTADDR
=
int
WINDOW_HEIGHT__TYPE
=
str
MCNTRL_TILED_FRAME_FULL_WIDTH
=
int
TILE_HEIGHT__TYPE
=
str
CLKFBOUT_DIV_AXIHP__TYPE
=
str
MCNTRL_TILED_CHN4_ADDR__TYPE
=
str
FRAME_HEIGHT_BITS
=
int
MCONTR_PHY_16BIT_ADDR_MASK__TYPE
=
str
...
...
@@ -590,15 +620,16 @@ REF_JITTER1__TYPE = str
MCNTRL_SCANLINE_MODE__TYPE
=
str
MCONTR_PHY_16BIT_PATTERNS_TRI
=
int
DLY_CMDA__RAW
=
str
NUM_CYCLES_LOW_BIT
=
int
MEMBRIDGE_MASK
=
int
READ_BLOCK_OFFSET
=
int
T_REFI__RAW
=
str
STATUS_MSB_RSHFT
=
int
BUFFER_DEPTH32__RAW
=
str
RSEL__RAW
=
str
CLKIN_PERIOD__TYPE
=
str
DIVCLK_DIVIDE__RAW
=
str
DLY_LANE0_ODELAY__TYPE
=
str
COLADDR_NUMBER
=
int
DLY_LANE0_IDELAY
=
long
SDCLK_PHASE__TYPE
=
str
SCANLINE_STARTY__TYPE
=
str
REFRESH_OFFSET__RAW
=
str
...
...
@@ -607,14 +638,17 @@ MCNTRL_TEST01_CHN1_MODE__RAW = str
MCONTR_BUF4_RD_ADDR__TYPE
=
str
LD_DLY_LANE0_ODELAY__TYPE
=
str
MCONTR_TOP_16BIT_ADDR__RAW
=
str
MEMBRIDGE_LO_ADDR64
=
int
MCNTRL_SCANLINE_PENDING_CNTR_BITS
=
int
DFLT_DQS_TRI_ON_PATTERN__TYPE
=
str
MCONTR_PHY_0BIT_SDRST_ACT__TYPE
=
str
TILED_KEEP_OPEN__RAW
=
str
MCNTRL_SCANLINE_STARTADDR
=
int
MEMBRIDGE_WIDTH64__RAW
=
str
MCONTR_TOP_0BIT_ADDR__TYPE
=
str
CLKFBOUT_MULT_REF__TYPE
=
str
MCNTRL_PS_CMD__TYPE
=
str
MEMBRIDGE_START64__RAW
=
str
STATUS_MSB_RSHFT__RAW
=
str
STATUS_PSHIFTER_RDY_MASK
=
int
NUM_CYCLES_04__RAW
=
str
...
...
@@ -632,6 +666,8 @@ MCNTRL_SCANLINE_FRAME_PAGE_RESET__TYPE = str
VERBOSE__RAW
=
str
WBUF_DLY_WLV
=
int
MCONTR_BUF3_WR_ADDR__RAW
=
str
MEMBRIDGE_LO_ADDR64__RAW
=
str
MEMBRIDGE_WIDTH64
=
int
MCNTRL_TEST01_CHN3_MODE
=
int
LD_DLY_PHASE__TYPE
=
str
MCONTR_PHY_0BIT_ADDR__TYPE
=
str
...
...
@@ -644,11 +680,12 @@ STATUS_ADDR_MASK__RAW = str
MCNTRL_SCANLINE_CHN3_ADDR
=
int
DLY_SET__TYPE
=
str
MCONTR_TOP_16BIT_ADDR
=
int
MCONTR_BUF1_RD_ADDR__TYPE
=
str
DLY_DM_ODELAY
=
long
MEMBRIDGE_STATUS_CNTRL__RAW
=
str
MCONTR_TOP_16BIT_REFRESH_ADDRESS
=
int
DFLT_DQS_TRI_OFF_PATTERN__RAW
=
str
FRAME_FULL_WIDTH
=
int
MEMBRIDGE_STATUS_REG
=
int
NUM_CYCLES_13
=
int
NUM_CYCLES_12
=
int
NUM_CYCLES_11
=
int
...
...
@@ -690,7 +727,7 @@ CLKIN_PERIOD__RAW = str
INITIALIZE_OFFSET
=
int
MCNTRL_PS_MASK__TYPE
=
str
CLK_DIV_PHASE__RAW
=
str
LD_DLY_LANE1_IDELAY
=
int
MCNTRL_PS_EN_RST__TYPE
=
str
MCONTR_PHY_16BIT_PATTERNS__TYPE
=
str
MCONTR_PHY_0BIT_CKE_EN__RAW
=
str
PICKLE__RAW
=
str
...
...
@@ -727,6 +764,7 @@ MCLK_PHASE__RAW = str
MCONTR_TOP_16BIT_REFRESH_PERIOD
=
int
T_REFI
=
int
MCNTRL_TILED_FRAME_FULL_WIDTH__TYPE
=
str
WSEL__TYPE
=
str
STATUS_SEQ_SHFT__TYPE
=
str
DFLT_CHN_EN__TYPE
=
str
MCNTRL_SCANLINE_PENDING_CNTR_BITS__RAW
=
str
...
...
@@ -747,15 +785,17 @@ SS_EN = str
DLY_LANE0_ODELAY
=
long
CLKFBOUT_DIV_REF
=
int
WRITELEV_OFFSET
=
int
MEMBRIDGE_ADDR__TYPE
=
str
MCONTR_TOP_16BIT_ADDR_MASK__TYPE
=
str
VERBOSE__TYPE
=
str
TILED_KEEP_OPEN
=
int
MCNTRL_SCANLINE_MASK__RAW
=
str
MCNTRL_SCANLINE_WINDOW_STARTXY
=
int
TEST_INITIAL_BURST
=
int
MCONTR_ARBIT_ADDR__RAW
=
str
MEMBRIDGE_MASK__RAW
=
str
MCNTRL_TEST01_ADDR
=
int
MCONTR_TOP_0BIT_MCONTR_EN__TYPE
=
str
MEMBRIDGE_CTRL__TYPE
=
str
MCONTR_BUF4_WR_ADDR__RAW
=
str
TILED_KEEP_OPEN__TYPE
=
str
CONTROL_ADDR_MASK__TYPE
=
str
...
...
@@ -771,6 +811,7 @@ REFRESH_OFFSET__TYPE = str
DFLT_INV_CLK_DIV__TYPE
=
str
MAX_TILE_WIDTH
=
int
CHNBUF_READ_LATENCY__RAW
=
str
MEMBRIDGE_STATUS_REG__TYPE
=
str
MCONTR_BUF4_RD_ADDR
=
int
SS_MOD_PERIOD__TYPE
=
str
MCNTRL_PS_STATUS_REG_ADDR__TYPE
=
str
...
...
@@ -783,6 +824,7 @@ INITIALIZE_OFFSET__RAW = str
CMD_DONE_BIT__RAW
=
str
MCONTR_TOP_0BIT_REFRESH_EN__TYPE
=
str
CLK_DIV_PHASE
=
float
MEMBRIDGE_STATUS_REG__RAW
=
str
MCONTR_TOP_16BIT_REFRESH_PERIOD__TYPE
=
str
MCNTRL_TEST01_CHN4_STATUS_CNTRL__RAW
=
str
MCONTR_BUF0_WR_ADDR__TYPE
=
str
...
...
py393/x393_axi_control_status.py
View file @
bda74800
...
...
@@ -187,19 +187,19 @@ class X393AxiControlStatus(object):
timeout
=
10.0
):
# maximal timeout (0 - no timeout)
"""
Poll specified status register until some condition is matched
<status_address> -
status register address (currently 0..255)
<
status_control_address> - control register address (to control status generation)
<status_mode> -
status generation mode:
0: disable status generation,
1: single status request,
2: auto status, keep specified seq number,
4: auto, inc sequence number
<pattern> -
26-bit pattern to match
<mask> -
26-bit mask to enable pattern matching (0-s - ignore)
<invert_match> -
invert match (wait until matching condition becomes false)
<wait_seq>-
wait for the correct sequence number, if False - assume always correct
<timeout>
maximal time to wait for condition
R
eturn 1 if success, 0 - if timeout
@param status_address
status register address (currently 0..255)
@param
status_control_address> - control register address (to control status generation)
@param status_mode
status generation mode:
0: disable status generation,
1: single status request,
2: auto status, keep specified seq number,
4: auto, inc sequence number
@param pattern
26-bit pattern to match
@param mask
26-bit mask to enable pattern matching (0-s - ignore)
@param invert_match
invert match (wait until matching condition becomes false)
@param wait_seq
wait for the correct sequence number, if False - assume always correct
@param timeout
maximal time to wait for condition
@r
eturn 1 if success, 0 - if timeout
"""
match
=
False
endTime
=
None
...
...
@@ -245,10 +245,11 @@ class X393AxiControlStatus(object):
print
(
"MCNTRL_SCANLINE_STATUS_REG_CHN3_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_SCANLINE_STATUS_REG_CHN3_ADDR
),
8
)))
print
(
"MCNTRL_TILED_STATUS_REG_CHN2_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_TILED_STATUS_REG_CHN2_ADDR
),
8
)))
print
(
"MCNTRL_TILED_STATUS_REG_CHN4_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_TILED_STATUS_REG_CHN4_ADDR
),
8
)))
print
(
"MCNTRL_TEST01_STATUS_REG_CHN1_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN1_ADDR
),
8
)))
#
print ("MCNTRL_TEST01_STATUS_REG_CHN1_ADDR: %s"%(hx(self.read_status(vrlg.MCNTRL_TEST01_STATUS_REG_CHN1_ADDR),8)))
print
(
"MCNTRL_TEST01_STATUS_REG_CHN2_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN2_ADDR
),
8
)))
print
(
"MCNTRL_TEST01_STATUS_REG_CHN3_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN3_ADDR
),
8
)))
print
(
"MCNTRL_TEST01_STATUS_REG_CHN4_ADDR:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN4_ADDR
),
8
)))
print
(
"MEMBRIDGE_STATUS_REG:
%
s"
%
(
hx
(
self
.
read_status
(
vrlg
.
MEMBRIDGE_STATUS_REG
),
8
)))
def
program_status
(
self
,
base_addr
,
# input [29:0] base_addr;
...
...
@@ -289,10 +290,11 @@ class X393AxiControlStatus(object):
self
.
program_status
(
vrlg
.
MCNTRL_SCANLINE_CHN3_ADDR
,
vrlg
.
MCNTRL_SCANLINE_STATUS_CNTRL
,
mode
,
seq_num
)
# //MCNTRL_SCANLINE_STATUS_REG_CHN3_ADDR='h5,
self
.
program_status
(
vrlg
.
MCNTRL_TILED_CHN2_ADDR
,
vrlg
.
MCNTRL_TILED_STATUS_CNTRL
,
mode
,
seq_num
)
# //MCNTRL_TILED_STATUS_REG_CHN4_ADDR= 'h6,
self
.
program_status
(
vrlg
.
MCNTRL_TILED_CHN4_ADDR
,
vrlg
.
MCNTRL_TILED_STATUS_CNTRL
,
mode
,
seq_num
)
#; //MCNTRL_TILED_STATUS_REG_CHN4_ADDR= 'h6,
self
.
program_status
(
vrlg
.
MCNTRL_TEST01_ADDR
,
vrlg
.
MCNTRL_TEST01_CHN1_STATUS_CNTRL
,
mode
,
seq_num
)
#; //MCNTRL_TEST01_STATUS_REG_CHN2_ADDR= 'h3c,
#
self.program_status (vrlg.MCNTRL_TEST01_ADDR, vrlg.MCNTRL_TEST01_CHN1_STATUS_CNTRL,mode,seq_num)#; //MCNTRL_TEST01_STATUS_REG_CHN2_ADDR= 'h3c,
self
.
program_status
(
vrlg
.
MCNTRL_TEST01_ADDR
,
vrlg
.
MCNTRL_TEST01_CHN2_STATUS_CNTRL
,
mode
,
seq_num
)
#; //MCNTRL_TEST01_STATUS_REG_CHN2_ADDR= 'h3c,
self
.
program_status
(
vrlg
.
MCNTRL_TEST01_ADDR
,
vrlg
.
MCNTRL_TEST01_CHN3_STATUS_CNTRL
,
mode
,
seq_num
)
#; //MCNTRL_TEST01_STATUS_REG_CHN3_ADDR= 'h3d,
self
.
program_status
(
vrlg
.
MCNTRL_TEST01_ADDR
,
vrlg
.
MCNTRL_TEST01_CHN4_STATUS_CNTRL
,
mode
,
seq_num
)
#; //MCNTRL_TEST01_STATUS_REG_CHN4_ADDR= 'h3e,
self
.
program_status
(
vrlg
.
MEMBRIDGE_ADDR
,
vrlg
.
MEMBRIDGE_STATUS_CNTRL
,
mode
,
seq_num
)
#; //MCNTRL_TEST01_STATUS_REG_CHN4_ADDR= 'h3e,
def
enable_cmda
(
self
,
en
):
# input en;
...
...
py393/x393_mcntrl_adjust.py
View file @
bda74800
...
...
@@ -5007,6 +5007,7 @@ write_settings= {
quiet
=
3
):
"""
@param tasks - "*" - load bitfile
"I" - initialize memory, set defaults
"C" cmda, "W' - write levelling, "R" - read levelling (DQI-DQSI), "P" - dqs input phase (DQSI-PHASE),
"O" - output timing (DQ odelay vs DQS odelay), "A" - address/bank lines output delays, "Z" - print results,
"B" - select R/W brances and get the optimal phase
...
...
py393/x393_mcntrl_buffers.py
View file @
bda74800
...
...
@@ -77,7 +77,7 @@ class X393McntrlBuffers(object):
if
self
.
DEBUG_MODE
>
1
:
print
(
"====== write_block_scanline_chn:
%
d page:
%
x X=0x
%
x Y=0x
%
x num=
%
dt"
%
(
chn
,
page
,
startX
,
startY
,
num_bursts
))
if
chn
==
0
:
start_addr
=
vrlg
.
MCONTR_BUF0_WR_ADDR
+
(
page
<<
8
)
elif
chn
==
1
:
start_addr
=
vrlg
.
MCONTR_BUF1_WR_ADDR
+
(
page
<<
8
)
#
elif chn == 1: start_addr=vrlg.MCONTR_BUF1_WR_ADDR + (page << 8)
elif
chn
==
2
:
start_addr
=
vrlg
.
MCONTR_BUF2_WR_ADDR
+
(
page
<<
8
)
elif
chn
==
3
:
start_addr
=
vrlg
.
MCONTR_BUF3_WR_ADDR
+
(
page
<<
8
)
elif
chn
==
4
:
start_addr
=
vrlg
.
MCONTR_BUF4_WR_ADDR
+
(
page
<<
8
)
...
...
@@ -154,7 +154,7 @@ class X393McntrlBuffers(object):
print
(
"==="
)
start_addr
=-
1
if
chn
==
0
:
start_addr
=
vrlg
.
MCONTR_BUF0_WR_ADDR
+
(
page
<<
8
)
elif
chn
==
1
:
start_addr
=
vrlg
.
MCONTR_BUF1_WR_ADDR
+
(
page
<<
8
)
#
elif chn==1:start_addr=vrlg.MCONTR_BUF1_WR_ADDR + (page << 8)
elif
chn
==
2
:
start_addr
=
vrlg
.
MCONTR_BUF2_WR_ADDR
+
(
page
<<
8
)
elif
chn
==
3
:
start_addr
=
vrlg
.
MCONTR_BUF3_WR_ADDR
+
(
page
<<
8
)
elif
chn
==
4
:
start_addr
=
vrlg
.
MCONTR_BUF4_WR_ADDR
+
(
page
<<
8
)
...
...
@@ -221,7 +221,7 @@ class X393McntrlBuffers(object):
"""
start_addr
=-
1
if
chn
==
0
:
start_addr
=
vrlg
.
MCONTR_BUF0_RD_ADDR
+
(
page
<<
8
)
elif
chn
==
1
:
start_addr
=
vrlg
.
MCONTR_BUF1_RD_ADDR
+
(
page
<<
8
)
#
elif chn==1: start_addr=vrlg.MCONTR_BUF1_RD_ADDR + (page << 8)
elif
chn
==
2
:
start_addr
=
vrlg
.
MCONTR_BUF2_RD_ADDR
+
(
page
<<
8
)
elif
chn
==
3
:
start_addr
=
vrlg
.
MCONTR_BUF3_RD_ADDR
+
(
page
<<
8
)
elif
chn
==
4
:
start_addr
=
vrlg
.
MCONTR_BUF4_RD_ADDR
+
(
page
<<
8
)
...
...
py393/x393_mcntrl_tests.py
View file @
bda74800
...
...
@@ -333,22 +333,24 @@ class X393McntrlTests(object):
pages_per_row
=
(
window_width
>>
vrlg
.
NUM_XFER_BITS
)
+
(
0
,
1
)[(
window_width
&
((
1
<<
vrlg
.
NUM_XFER_BITS
))
-
1
)
==
0
]
# (window_width>>NUM_XFER_BITS)+((window_width[NUM_XFER_BITS-1:0]==0)?0:1);
print
(
"====== test_scanline_write: channel=
%
d, extra_pages=
%
d, wait_done=
%
d"
%
(
channel
,
extra_pages
,
wait_done
))
'''
if channel == 1:
start_addr= vrlg.MCNTRL_SCANLINE_CHN1_ADDR
status_address= vrlg.MCNTRL_TEST01_STATUS_REG_CHN1_ADDR
status_control_address= vrlg.MCNTRL_TEST01_ADDR + vrlg.MCNTRL_TEST01_CHN1_STATUS_CNTRL
test_mode_address= vrlg.MCNTRL_TEST01_ADDR + vrlg.MCNTRL_TEST01_CHN1_MODE
elif
channel
==
3
:
'''
if
channel
==
3
:
start_addr
=
vrlg
.
MCNTRL_SCANLINE_CHN3_ADDR
status_address
=
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN3_ADDR
status_control_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN3_STATUS_CNTRL
test_mode_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN3_MODE
else
:
print
(
"**** ERROR: Invalid channel, only
1 and 3 are
valid"
)
print
(
"**** ERROR: Invalid channel, only
3 is
valid"
)
start_addr
=
vrlg
.
MCNTRL_SCANLINE_CHN1_ADDR
status_address
=
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN
1
_ADDR
status_control_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
1
_STATUS_CNTRL
test_mode_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
1
_MODE
status_address
=
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN
3
_ADDR
status_control_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
3
_STATUS_CNTRL
test_mode_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
3
_MODE
mode
=
self
.
func_encode_mode_scanline
(
extra_pages
,
...
...
@@ -452,22 +454,24 @@ class X393McntrlTests(object):
print
(
"====== test_scanline_read: channel=
%
d, extra_pages=
%
d, show_data=
%
d"
%
(
channel
,
extra_pages
,
show_data
))
'''
if channel == 1:
start_addr= vrlg.MCNTRL_SCANLINE_CHN1_ADDR
status_address= vrlg.MCNTRL_TEST01_STATUS_REG_CHN1_ADDR
status_control_address= vrlg.MCNTRL_TEST01_ADDR + vrlg.MCNTRL_TEST01_CHN1_STATUS_CNTRL
test_mode_address= vrlg.MCNTRL_TEST01_ADDR + vrlg.MCNTRL_TEST01_CHN1_MODE
elif
channel
==
3
:
'''
if
channel
==
3
:
start_addr
=
vrlg
.
MCNTRL_SCANLINE_CHN3_ADDR
status_address
=
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN3_ADDR
status_control_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN3_STATUS_CNTRL
test_mode_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN3_MODE
else
:
print
(
"**** ERROR: Invalid channel, only
1 and 3 are
valid"
)
print
(
"**** ERROR: Invalid channel, only
3 is
valid"
)
start_addr
=
vrlg
.
MCNTRL_SCANLINE_CHN1_ADDR
status_address
=
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN
1
_ADDR
status_control_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
1
_STATUS_CNTRL
test_mode_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
1
_MODE
status_address
=
vrlg
.
MCNTRL_TEST01_STATUS_REG_CHN
3
_ADDR
status_control_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
3
_STATUS_CNTRL
test_mode_address
=
vrlg
.
MCNTRL_TEST01_ADDR
+
vrlg
.
MCNTRL_TEST01_CHN
3
_MODE
mode
=
self
.
func_encode_mode_scanline
(
extra_pages
,
0
,
# write_mem,
...
...
py393/x393_mem.py
View file @
bda74800
...
...
@@ -44,11 +44,12 @@ class X393Mem(object):
def
__init__
(
self
,
debug_mode
=
1
,
dry_mode
=
True
):
self
.
DEBUG_MODE
=
debug_mode
self
.
DRY_MODE
=
dry_mode
def
write_mem
(
self
,
addr
,
data
):
def
write_mem
(
self
,
addr
,
data
,
quiet
=
1
):
"""
Write 32-bit word to physical memory
<addr> - physical byte address
<data> - 32-bit data to write
@param addr - physical byte address
@param data - 32-bit data to write
@param quiet - reduce output
"""
if
self
.
DRY_MODE
:
print
(
"simulated: write_mem(0x
%
x,0x
%
x)"
%
(
addr
,
data
))
...
...
@@ -62,7 +63,7 @@ class X393Mem(object):
packedData
=
struct
.
pack
(
self
.
ENDIAN
+
"L"
,
data
)
d
=
struct
.
unpack
(
self
.
ENDIAN
+
"L"
,
packedData
)[
0
]
mm
[
page_offs
:
page_offs
+
4
]
=
packedData
if
self
.
DEBUG_MODE
>
2
:
if
quiet
<
1
:
print
(
"0x
%08
x <== 0x
%08
x (
%
d)"
%
(
addr
,
d
,
d
))
'''
if MONITOR_EMIO and VEBOSE:
...
...
@@ -74,10 +75,11 @@ class X393Mem(object):
exit (0)
'''
def
read_mem
(
self
,
addr
):
def
read_mem
(
self
,
addr
,
quiet
=
1
):
'''
Read 32-bit word from physical memory
<addr> - physical byte address
Read 32-bit word from physical memory
@param addr physical byte address
@param quiet - reduce output
'''
if
self
.
DRY_MODE
:
print
(
"simulated: read_mem(0x
%
x)"
%
(
addr
))
...
...
@@ -90,45 +92,102 @@ class X393Mem(object):
mm
=
mmap
.
mmap
(
f
.
fileno
(),
self
.
PAGE_SIZE
,
offset
=
page_addr
)
data
=
struct
.
unpack
(
self
.
ENDIAN
+
"L"
,
mm
[
page_offs
:
page_offs
+
4
])
d
=
data
[
0
]
if
self
.
DEBUG_MODE
>
2
:
if
quiet
<
1
:
print
(
"0x
%08
x ==> 0x
%08
x (
%
d)"
%
(
addr
,
d
,
d
))
return
d
# mm.close() #probably not needed with "with"
def
mem_dump
(
self
,
start_addr
,
end_addr
=
0
):
def
mem_dump
(
self
,
start_addr
,
end_addr
=
1
,
byte_mode
=
4
):
'''
Read and print memory range from physical memory
<start_addr> - physical byte start address
<end_addr> - physical byte end address (inclusive)
Returns list of read values
@param start_addr physical byte start address
@param end_addr physical byte end address (inclusive), if negative/less than start_addr - number of items
@param byte_mode number of bytes per item (1,2,4,8)
@return list of read values
'''
frmt_bytes
=
{
1
:
'B'
,
2
:
'H'
,
4
:
'L'
,
8
:
'Q'
}
bytes_per_line_mask
=
{
1
:
0x1f
,
2
:
0x1f
,
4
:
0x3f
,
8
:
0x3f
}
default_byte_mode
=
4
if
not
byte_mode
in
frmt_bytes
.
keys
():
print
(
"Invalid byte mode: '
%
s'. Only
%
s are supported. Using
%
d"
%
(
str
(
byte_mode
),
str
(
frmt_bytes
.
keys
()),
default_byte_mode
))
byte_mode
=
default_byte_mode
data_frmt
=
"
%%0%
dx"
%
(
2
*
byte_mode
)
simul_mask
=
(
1
<<
(
8
*
byte_mode
))
-
1
addr_mask
=
0xffffffff
^
(
byte_mode
-
1
)
start_addr
&=
addr_mask
if
end_addr
<
start_addr
:
end_addr
=
start_addr
+
abs
(
end_addr
*
byte_mode
)
-
1
end_addr
&=
addr_mask
# align start address to 32-bit word even if the mode is byte/short
start_addr
&=
0xfffffffc
end_addr
&=
0xfffffffc
if
end_addr
<
start_addr
:
end_addr
=
start_addr
print_mask
=
bytes_per_line_mask
[
byte_mode
]
rslt
=
[]
if
self
.
DRY_MODE
:
rslt
=
range
(
start_addr
,
end_addr
+
1
,
4
)
rslt
=
[
d
&
simul_mask
for
d
in
range
(
start_addr
,
end_addr
+
byte_mode
,
byte_mode
)]
else
:
with
open
(
"/dev/mem"
,
"r+b"
)
as
f
:
for
addr
in
range
(
start_addr
,
end_addr
+
4
,
4
):
for
addr
in
range
(
start_addr
,
end_addr
+
byte_mode
,
byte_mode
):
page_addr
=
addr
&
(
~
(
self
.
PAGE_SIZE
-
1
))
page_offs
=
addr
-
page_addr
if
(
page_addr
>=
0x80000000
):
page_addr
-=
(
1
<<
32
)
mm
=
mmap
.
mmap
(
f
.
fileno
(),
self
.
PAGE_SIZE
,
offset
=
page_addr
)
data
=
struct
.
unpack
(
self
.
ENDIAN
+
"L"
,
mm
[
page_offs
:
page_offs
+
4
]
)
data
=
struct
.
unpack
_from
(
self
.
ENDIAN
+
frmt_bytes
[
byte_mode
],
mm
,
page_offs
)
rslt
.
append
(
data
[
0
])
for
addr
in
range
(
start_addr
,
end_addr
+
4
,
4
):
if
(
addr
==
start_addr
)
or
((
addr
&
0x3f
)
==
0
):
for
addr
in
range
(
start_addr
,
end_addr
+
byte_mode
,
byte_mode
):
if
(
addr
==
start_addr
)
or
((
addr
&
print_mask
)
==
0
):
if
self
.
DRY_MODE
:
print
(
"
\n
simulated: 0x
%08
x:"
%
addr
,
end
=
""
)
else
:
print
(
"
\n
0x
%08
x:"
%
addr
,
end
=
""
)
d
=
rslt
[(
addr
-
start_addr
)
>>
2
]
print
(
"
%08
x "
%
d
,
end
=
""
),
d
=
rslt
[(
addr
-
start_addr
)
//
byte_mode
]
print
(
data_frmt
%
(
d
),
end
=
" "
)
print
(
""
)
return
rslt
def
mem_fill
(
self
,
start_addr
,
start_data
=
0
,
end_addr
=
1
,
inc_data
=
0
,
byte_mode
=
4
):
'''
Read and print memory range from physical memory
@param start_addr physical byte start address
@param start_data data/start data to write
@param end_addr physical byte end address (inclusive), if negative/less than start_addr - number of items
@param inc_data increment each next item by this value
@param byte_mode number of bytes per item (1,2,4,8)
'''
frmt_bytes
=
{
1
:
'B'
,
2
:
'H'
,
4
:
'L'
,
8
:
'Q'
}
default_byte_mode
=
4
if
not
byte_mode
in
frmt_bytes
.
keys
():
print
(
"Invalid byte mode: '
%
s'. Only
%
s are supported. Using
%
d"
%
(
str
(
byte_mode
),
str
(
frmt_bytes
.
keys
()),
default_byte_mode
))
byte_mode
=
default_byte_mode
data_mask
=
(
1
<<
(
8
*
byte_mode
))
-
1
addr_mask
=
0xffffffff
^
(
byte_mode
-
1
)
start_addr
&=
addr_mask
if
end_addr
<
start_addr
:
end_addr
=
start_addr
+
abs
(
end_addr
*
byte_mode
)
-
1
end_addr
&=
addr_mask
# align start address to 32-bit word even if the mode is byte/short
start_addr
&=
0xfffffffc
if
self
.
DRY_MODE
:
print
(
"Simulated mem_fill(0x
%
x, 0x
%
x, 0x
%
x, 0x
%
x,
%
d)"
%
(
start_addr
,
start_data
,
end_addr
,
inc_data
,
byte_mode
))
data_frmt
=
"
%%0%
dx"
%
(
2
*
byte_mode
)
for
addr
in
range
(
start_addr
,
end_addr
+
byte_mode
,
byte_mode
):
data
=
(
start_data
+
((
addr
-
start_addr
)
//
byte_mode
)
*
inc_data
)
&
data_mask
page_addr
=
addr
&
(
~
(
self
.
PAGE_SIZE
-
1
))
page_offs
=
addr
-
page_addr
if
(
page_addr
>=
0x80000000
):
page_addr
-=
(
1
<<
32
)
print
((
"0x
%08
x: "
+
data_frmt
)
%
(
addr
,
data
))
else
:
with
open
(
"/dev/mem"
,
"r+b"
)
as
f
:
for
addr
in
range
(
start_addr
,
end_addr
+
byte_mode
,
byte_mode
):
data
=
(
start_data
+
((
addr
-
start_addr
)
//
byte_mode
)
*
inc_data
)
&
data_mask
page_addr
=
addr
&
(
~
(
self
.
PAGE_SIZE
-
1
))
page_offs
=
addr
-
page_addr
if
(
page_addr
>=
0x80000000
):
page_addr
-=
(
1
<<
32
)
mm
=
mmap
.
mmap
(
f
.
fileno
(),
self
.
PAGE_SIZE
,
offset
=
page_addr
)
struct
.
pack_into
(
self
.
ENDIAN
+
frmt_bytes
[
byte_mode
],
mm
,
page_offs
,
data
)
'''
Read/write slave AXI using byte addresses relative to the AXI memory region
'''
...
...
x393_testbench01.sav
View file @
bda74800
[*]
[*] GTKWave Analyzer v3.3.64 (w)1999-2014 BSI
[*] Thu Apr 30 18:
06:37
2015
[*] Thu Apr 30 18:
37:14
2015
[*]
[dumpfile] "/home/andrey/git/x393/simulation/x393_testbench01-201504301
15913649
.lxt"
[dumpfile_mtime] "Thu Apr 30 18:
02:38
2015"
[dumpfile_size] 17402
4137
[dumpfile] "/home/andrey/git/x393/simulation/x393_testbench01-201504301
20701234
.lxt"
[dumpfile_mtime] "Thu Apr 30 18:
10:21
2015"
[dumpfile_size] 17402
3349
[savefile] "/home/andrey/git/x393/x393_testbench01.sav"
[timestart] 37450000
[size] 1823 1180
...
...
@@ -15,7 +15,7 @@
[treeopen] x393_testbench01.simul_axi_hp_wr_i.
[treeopen] x393_testbench01.x393_i.
[sst_width] 301
[signals_width]
333
[signals_width]
446
[sst_expanded] 1
[sst_vpaned_height] 367
@800200
...
...
@@ -370,7 +370,6 @@ x393_testbench01.simul_axi_hp_wr_i.wresp_re[0]
x393_testbench01.x393_i.membridge_i.afi_bvalid[0]
x393_testbench01.x393_i.membridge_i.afi_bvalid_r[0]
@22
x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
x393_testbench01.x393_i.membridge_i.axi_arw_requested[7:0]
x393_testbench01.x393_i.membridge_i.wresp_conf[7:0]
x393_testbench01.x393_i.membridge_i.axi_wr_pending[7:0]
...
...
@@ -589,17 +588,8 @@ x393_testbench01.x393_i.membridge_i.wr_id[4:0]
@28
x393_testbench01.x393_i.membridge_i.wr_mode[0]
x393_testbench01.x393_i.membridge_i.wr_start[0]
@c00022
x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
@28
(0)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(1)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(2)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(3)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(4)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(5)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(6)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
(7)x393_testbench01.x393_i.membridge_i.wresp_pending[7:0]
@c00200
-x393_testbench01.x393_i.membridge_i.wresp_pending
@1401200
-group_end
@28
...
...
x393_testbench01.tf
View file @
bda74800
...
...
@@ -1405,103 +1405,6 @@ task test_read_block; // SuppressThisWarning VEditor - may be unused
end
endtask
task
membridge_setup
;
input
[
28
:
0
]
len64
;
// number of 64-bit words to transfer
input
[
28
:
0
]
width64
;
// frame width in 64-bit words
input
[
28
:
0
]
start64
;
// relative start adderss of the transfer (set to 0 when writing lo_addr64)
input
[
28
:
0
]
lo_addr64
;
// low address of the system memory range, in 64-bit words
input
[
28
:
0
]
size64
;
// size of the system memory range in 64-bit words
begin
write_contol_register
(
MEMBRIDGE_ADDR
+
MEMBRIDGE_LO_ADDR64
,
{
3
'b0,lo_addr64});
write_contol_register(MEMBRIDGE_ADDR + MEMBRIDGE_SIZE64, {3'
b0
,
size64
}
);
write_contol_register
(
MEMBRIDGE_ADDR
+
MEMBRIDGE_START64
,
{
3
'b0,start64});
write_contol_register(MEMBRIDGE_ADDR + MEMBRIDGE_LEN64, {3'
b0
,
len64
}
);
write_contol_register
(
MEMBRIDGE_ADDR
+
MEMBRIDGE_WIDTH64
,
{
3
'b0,width64});
end
endtask
task membridge_start;
input continue; // 0 start from start64, 1 - continue from where it was
begin
write_contol_register(MEMBRIDGE_ADDR + MEMBRIDGE_CTRL, {29'
b0
,
continue
,
2
'b11});
end
endtask
task membridge_en; // SuppressThisWarning VEditor - may be unused
input en; // not needed to start, pauses axi if set to 0 whil running, resets "done" status bit
begin
write_contol_register(MEMBRIDGE_ADDR + MEMBRIDGE_CTRL, {31'
b0
,
en
}
);
end
endtask
task
afi_setup
;
input
[
1
:
0
]
port_num
;
begin
afi_write_reg
(
port_num
,
'h0, 0); // AFI_RDCHAN_CTRL
afi_write_reg(port_num, '
h4
,
7
);
// AFI_RDCHAN_ISSUINGCAP
afi_write_reg
(
port_num
,
'h8, 0); // AFI_RDQOS
//afi_write_reg(port_num, '
hc
,
0
);
// AFI_RDDATAFIFO_LEVEL
//afi_write_reg(port_num, 'h10, 0); // AFI_RDDEBUG
afi_write_reg
(
port_num
,
'h14, '
hf00
);
// AFI_WRCHAN_CTRL
afi_write_reg
(
port_num
,
'h18, 0); // AFI_WRCHAN_ISSUINGCAP
afi_write_reg(port_num, '
h1c
,
0
);
// AFI_WRQOS
//afi_write_reg(port_num, 'h20, 0); // AFI_WRDATAFIFO_LEVEL
//afi_write_reg(port_num, 'h24, 0); // AFI_WRDEBUG
end
endtask
task
afi_write_reg
;
input
[
1
:
0
]
port_num
;
input
integer
rel_baddr
;
// relative byte address
input
[
31
:
0
]
data
;
begin
ps_write_reg
(
32
'hf8008000+ (port_num << 12) + (rel_baddr & '
hfffffffc
),
data
);
end
endtask
task
afi_read_reg
;
// SuppressThisWarning VEditor - may be unused
input
[
1
:
0
]
port_num
;
input
integer
rel_baddr
;
// relative byte address
input
verbose
;
begin
ps_read_reg
(
32
'hf8008000+ (port_num << 12) + (rel_baddr & '
hfffffffc
),
verbose
);
end
endtask
task
ps_write_reg
;
input
[
31
:
0
]
ps_reg_addr
;
input
[
31
:
0
]
ps_reg_data
;
begin
@(
posedge
HCLK
);
PS_REG_ADDR
<=
ps_reg_addr
;
PS_REG_DIN
<=
ps_reg_data
;
PS_REG_WR
<=
1
'b1;
@(posedge HCLK);
PS_REG_ADDR <= '
bx
;
PS_REG_DIN
<=
'bx;
PS_REG_WR <= 1'
b0
;
end
endtask
task
ps_read_reg
;
input
[
31
:
0
]
ps_reg_addr
;
input
verbose
;
begin
@(
posedge
HCLK
);
PS_REG_ADDR
<=
ps_reg_addr
;
PS_REG_RD
<=
1
'b1;
@(posedge HCLK);
PS_REG_ADDR <= '
bx
;
PS_REG_DIN
<=
'bx;
PS_REG_WR <= 1'
b0
;
@(
negedge
HCLK
);
if
(
verbose
)
begin
$display
(
"ps_read_reg(%x) -> %x @%t"
,
ps_reg_addr
,
PS_RDATA
,
$time
);
end
end
endtask
// above - move to include
...
...
@@ -2102,7 +2005,7 @@ task enable_memcntrl_en_dis;
end
endtask
*/
`include "includes/x393_tasks_afi.vh" // SuppressThisWarning VEditor - may be unused
`include "includes/x393_tasks_mcntrl_en_dis_priority.vh"
`include "includes/x393_tasks_mcntrl_buffers.vh"
`include "includes/x393_tasks_pio_sequences.vh"
...
...
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