Commit cb4c8ed6 authored by Marek Gumiński's avatar Marek Gumiński

Changed the board name from FmcMasterFip to fmc-masterfip.

Removed outdated file.
parent b507a63a
FmcMasterFip
fmc-masterfip
#! /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
......@@ -131,7 +131,7 @@ def main (card=None, default_directory='.',suite=None, serial=None):
# vendor
"-v", "CERN",
# name
"-n", "FmcMasterFip",
"-n", "fmc-masterfip",
# serial
"-s", serial,
# part
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment