Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
M
MasterFIP - Testing
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
MasterFIP - Testing
Commits
cb4c8ed6
Commit
cb4c8ed6
authored
Jul 27, 2016
by
Marek Gumiński
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changed the board name from FmcMasterFip to fmc-masterfip.
Removed outdated file.
parent
b507a63a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
2 additions
and
380 deletions
+2
-380
name
python/sdbfs/name
+1
-1
test02_wdgn_only.py
python/test02_wdgn_only.py
+0
-378
test05.py
python/test05.py
+1
-1
No files found.
python/sdbfs/name
View file @
cb4c8ed6
FmcMasterF
ip
fmc-masterf
ip
python/test02_wdgn_only.py
deleted
100644 → 0
View file @
b507a63a
#! /usr/bin/env python
# Copyright Creotech SA, 2016
# Author: Marek Guminski <marek.guminski@creotech.pl>
# Licence: GPL v2 or later.
# Website: http://www.ohwr.org
import
spec
import
fmcmasterfip
as
fmc
import
utilities
as
util
import
time
import
ptsexcept
from
time
import
sleep
PLOT
=
True
def
wait_transmission_termination
(
dut
,
ret
=
1000
,
val
=
2
):
util
.
info_msg
(
"Waiting for termination of transmission (inactive CD_N)"
)
for
i
in
xrange
(
ret
):
if
dut
.
fipcore
.
read_regname
(
'fd_rxcdn_cnt'
)
>
val
-
1
:
# util.dbg_msg("Finished waiting for cdn after %d tries" % i)
break
else
:
time
.
sleep
(
0.001
)
#
for
i
in
xrange
(
ret
):
if
dut
.
fipcore
.
read_regname
(
'fd.cd_n'
)
==
1
:
util
.
info_msg
(
"FD CDN line did go high after transmission termination after
%
d tries."
%
i
)
return
True
else
:
time
.
sleep
(
1
)
util
.
info_msg
(
"FD CDN line did not go high after transmission termination"
)
return
False
def
verify_rx_status
(
stat
):
# assume test failure
test_result
=
{
'Number of bytes'
:
0
,
'CRC'
:
0
,
'Frame size'
:
0
,
'Frame format'
:
0
,
'Preamble'
:
0
}
if
util
.
bitvector
(
stat
,
8
,
16
)
!=
10
:
util
.
info_msg
(
"Wrong number of bytes received"
)
else
:
test_result
[
'Number of bytes'
]
=
1
if
(
util
.
bitvector
(
stat
,
3
,
5
)
==
0x1
)
and
(
util
.
bitvector
(
stat
,
2
,
2
)
==
1
):
util
.
info_msg
(
"CRC error"
)
else
:
test_result
[
'CRC'
]
=
1
if
(
util
.
bitvector
(
stat
,
3
,
5
)
==
0x2
)
and
(
util
.
bitvector
(
stat
,
2
,
2
)
==
1
):
util
.
info_msg
(
"Unexpected frame size"
)
else
:
test_result
[
'Frame size'
]
=
1
if
util
.
bitvector
(
stat
,
1
,
1
)
==
0
:
util
.
info_msg
(
"Not complete frame received"
)
else
:
test_result
[
'Frame format'
]
=
1
if
util
.
bitvector
(
stat
,
0
,
0
)
==
0
:
util
.
info_msg
(
"Preamble not detected"
)
else
:
test_result
[
'Preamble'
]
=
1
return
test_result
def
verify_presence
(
carrier
):
util
.
info_msg
(
"Bus transmission: checking presence"
)
# Send ID_DAT for presence variable (0x14)
# nanoFIPdiag address (common to all such modules in CERN): 7F
carrier
.
send_id_dat
(
0x7F14
)
# wait for response
time
.
sleep
(
1
)
# Read RP_DAT reply from nanoFIPdiag
[
stat
,
ctrl
,
data
]
=
carrier
.
read_rp_dat
()
test_result
=
verify_rx_status
(
stat
)
util
.
info_msg
(
"Control field in bus response: 0x
%
x"
%
ctrl
)
# replay should have ctrl value equal to 2
if
ctrl
==
2
:
test_result
[
'Data control field'
]
=
1
else
:
test_result
[
'Data control field'
]
=
0
# presence variable data is always the same
if
util
.
bitvector
(
data
,
0
,
8
*
6
)
==
0x00f00003800550
:
util
.
info_msg
(
"Presence variable OK!"
)
test_result
[
'Data field'
]
=
1
elif
(
data
==
0x0
):
util
.
info_msg
(
"No WorldFIP traffic"
)
test_result
[
'Data field'
]
=
0
else
:
util
.
info_msg
(
"Data errors"
)
test_result
[
'Data field'
]
=
0
return
test_result
def
test_cdn
(
dut
,
maxtries
=
50
):
last
=
0
det
=
0
test_result
=
{
'CD_N during transmission'
:
0
}
# time.sleep(0.5)
# no transmission
# cdn should be high
for
i
in
xrange
(
10
):
if
dut
.
fipcore
.
read_regname
(
'fd.cd_n'
)
==
0
:
if
i
==
9
:
test_result
[
'CD_N during idle'
]
=
0
util
.
err_msg
(
"CD_N doesn't change value to inactive"
)
else
:
time
.
sleep
(
0.5
)
else
:
test_result
[
'CD_N during idle'
]
=
1
util
.
info_msg
(
"CD_N found high during bus idle. Took
%
d tries"
%
i
)
break
# resets error counter
# dut.rst_core()
before
=
dut
.
fipcore
.
read_regname
(
'fd_rxcdn_cnt'
)
util
.
info_msg
(
"CD_N counter value before transmission:
%
d"
%
before
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
1
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0
)
dut
.
fipcore
.
write_regname
(
'tx_data_ctrl'
,
0x3
)
dut
.
fipcore
.
write_regname
(
'tx_data_reg1'
,
0x7F14
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0x202
)
time
.
sleep
(
1
)
det
=
dut
.
fipcore
.
read_regname
(
'fd_rxcdn_cnt'
)
det
=
det
-
before
if
det
>
0
:
test_result
[
'CD_N during transmission'
]
=
1
;
util
.
info_msg
(
"CD_N detected during transmission. (Counter value:
%
d)"
%
det
)
else
:
test_result
[
'CD_N during transmission'
]
=
0
;
util
.
err_msg
(
"CD_N NOT detected during transmission"
)
wait_transmission_termination
(
dut
)
return
test_result
def
test_txerr
(
dut
,
box
,
maxtries
=
50
):
test_result
=
{
'TX_ERR during normal transmission'
:
0
,
'TX_ERR during corrupted transmission'
:
0
,
'TX_ERR during idle'
:
0
}
dut
.
fipcore
.
write_regname
(
'test'
,
0
)
########################################################################
util
.
section_msg
(
"Checking if TX_ERR is not stack on active value"
)
for
i
in
xrange
(
10
):
# check pin value during bus idle
if
dut
.
fipcore
.
read_regname
(
'fd.txer'
)
==
0
:
test_result
[
'TX_ERR during idle'
]
=
1
util
.
info_msg
(
"TX_ERR is inactive during bus idle"
)
break
else
:
if
i
==
9
:
test_result
[
'TX_ERR during idle'
]
=
0
util
.
err_msg
(
"TX_ERR doesn't go inactive during bus idle"
)
else
:
time
.
sleep
(
0.5
)
########################################################################
util
.
section_msg
(
"Checking if TX_ERR is not going active during normal transmission"
)
dut
.
rst_core
()
util
.
info_msg
(
"TX_ERR counter before transmission:
%
d"
%
dut
.
fipcore
.
read_regname
(
'fd_txerr_cnt'
)
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
1
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0
)
dut
.
fipcore
.
write_regname
(
'tx_data_ctrl'
,
0x3
)
dut
.
fipcore
.
write_regname
(
'tx_data_reg1'
,
0x7F14
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0x202
)
time
.
sleep
(
1
)
[
stat
,
ctrl
,
data
]
=
dut
.
read_rp_dat
()
tmp
=
verify_rx_status
(
stat
)
test_result
=
util
.
merge_dictionaries_prefix
(
test_result
,
tmp
,
""
,
"Transmission verification during TX_ERR test. "
)
time
.
sleep
(
0.5
)
det
=
dut
.
fipcore
.
read_regname
(
'fd_txerr_cnt'
)
if
det
==
0
:
test_result
[
'TX_ERR during normal transmission'
]
=
1
;
util
.
info_msg
(
"TXERR NOT detected during transmission"
)
else
:
test_result
[
'TX_ERR during normal transmission'
]
=
0
;
util
.
err_msg
(
"TX_ERR counter after transmission:
%
d"
%
det
)
########################################################################
util
.
section_msg
(
"Checking if TX_ERR IS going active during corrupted transmission"
)
dut
.
rst_core
()
util
.
info_msg
(
"TX_ERR counter before transmission:
%
d"
%
dut
.
fipcore
.
read_regname
(
'fd_txerr_cnt'
)
)
# corrupting serial output!!!!!
dut
.
fipcore
.
write_regname
(
'test'
,
1
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
1
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0
)
dut
.
fipcore
.
write_regname
(
'tx_data_ctrl'
,
0x3
)
dut
.
fipcore
.
write_regname
(
'tx_data_reg1'
,
0x7F14
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0x202
)
time
.
sleep
(
0.5
)
det
=
dut
.
fipcore
.
read_regname
(
'fd_txerr_cnt'
)
# since worldfip cable is disconnected
# transmission errors should be detected
if
det
>
0
:
test_result
[
'TX_ERR during corrupted transmission'
]
=
1
;
util
.
info_msg
(
"TX_ERR counter after corrupted transmission:
%
d"
%
det
)
else
:
test_result
[
'TX_ERR during corrupted transmission'
]
=
0
;
util
.
err_msg
(
"TXERR NOT detected during corrupted transmission"
)
# fixing serial output!!!!!
dut
.
fipcore
.
write_regname
(
'test'
,
0
)
wait_transmission_termination
(
dut
)
return
test_result
def
test_wdgn
(
dut
):
###################### test ##################################################
########################################################################
util
.
section_msg
(
"Checking if WDG_N is not stack on active value"
)
result
=
{
}
for
i
in
xrange
(
100
):
tmp
=
dut
.
fipcore
.
read_regname
(
'fd.wdgn'
)
if
tmp
:
util
.
info_msg
(
"WDG_N value during bus idle:
%
x"
%
tmp
)
result
[
'WDG_N during idle'
]
=
1
break
else
:
if
i
==
99
:
result
[
'WDG_N during idle'
]
=
0
util
.
err_msg
(
"WDG_N value is did not go inactive"
)
else
:
time
.
sleep
(
0.5
)
dut
.
rst_core
()
###################### test ##################################################
########################################################################
util
.
section_msg
(
"Checking if WDG_N becomes active during normal transmission"
)
dut
.
rst_core
()
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
1
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0
)
dut
.
fipcore
.
write_regname
(
'tx_data_ctrl'
,
0x3
)
dut
.
fipcore
.
write_regname
(
'tx_data_reg1'
,
0x7F14
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0x202
)
wait_transmission_termination
(
dut
,
100
,
2
)
tmp
=
dut
.
fipcore
.
read_regname
(
'fd.wdgn_latch'
)
if
tmp
>
0
:
util
.
info_msg
(
"WDGN was inactive after normal transmission"
)
else
:
util
.
err_msg
(
"WDGN was active after normal transmission"
)
result
[
'WDG_N during correct transmission'
]
=
tmp
time
.
sleep
(
4
)
###################### test ##################################################
util
.
section_msg
(
"Checking if WDG_N becomes active during very long transmission"
)
dut
.
rst_core
()
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
1
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0
)
dut
.
fipcore
.
write_regname
(
'tx_data_ctrl'
,
0x3
)
dut
.
fipcore
.
write_regname
(
'tx_data_reg1'
,
0x7F14
)
dut
.
fipcore
.
write_regname
(
'tx_ctrl'
,
0x20002
)
wait_transmission_termination
(
dut
,
100
,
1
)
tmp
=
dut
.
fipcore
.
read_regname
(
'fd.wdgn_latch'
)
if
tmp
>
0
:
util
.
err_msg
(
"WDGN was inactive after corrupted transmission"
)
else
:
util
.
info_msg
(
"WDGN was active after corrupted transmission"
)
result
[
'WDG_N during long transmission'
]
=
1
if
tmp
==
0
else
0
return
result
def
main
(
card
=
None
,
default_directory
=
'.'
,
suite
=
None
,
serial
=
""
):
testname
=
"Test02: WorldFIP communication"
util
.
header_msg
(
testname
,
[
"Simple communication"
,
"FieldDrive CD_N line"
,
"FieldDrive WDG_N line"
,
"FieldDrive RESET line"
,
"FieldDrive TX_ERR line"
]
)
box
=
util
.
calibration_box_init
()
###############################################################################
############################ initialization ###################################
###############################################################################
util
.
section_msg
(
"Hardware initialization"
)
abspath
=
util
.
find_prj_topdir
(
util
.
TOPDIRNAME
);
carrier
=
spec
.
spec
(
abspath
);
# FPGA bitstream and FMC presence are verified during initialization
dut
=
fmc
.
fmcmasterfip
(
carrier
,
abspath
,
util
.
FIRMWARE_PATH
)
###############################################################################
############################ actual test ######################################
###############################################################################
time
.
sleep
(
4
)
############################### test ##########################################
# transmit long frame
# pool CSR looking for TXERR during normal operation
# and with disconnected WorldFIP cable (should give error)
while
1
:
util
.
section_msg
(
"Testing FD WDG_N line"
)
dut
.
rst_core
()
wait_transmission_termination
(
dut
)
tmp
=
test_wdgn
(
dut
)
wait_transmission_termination
(
dut
)
util
.
info_msg
(
"Testing FD WDG_N line finished"
)
time
.
sleep
(
5
)
##############################################################################
return
0
if
__name__
==
'__main__'
:
main
()
\ No newline at end of file
python/test05.py
View file @
cb4c8ed6
...
...
@@ -131,7 +131,7 @@ def main (card=None, default_directory='.',suite=None, serial=None):
# vendor
"-v"
,
"CERN"
,
# name
"-n"
,
"
FmcMasterF
ip"
,
"-n"
,
"
fmc-masterf
ip"
,
# serial
"-s"
,
serial
,
# part
...
...
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