diff --git a/boards/uniboard1/designs/unb1_minimal/tb/python/tc_unb1_minimal.py b/boards/uniboard1/designs/unb1_minimal/tb/python/tc_unb1_minimal.py new file mode 100644 index 0000000000000000000000000000000000000000..70feec9ec11da4de9e28d23635206cf7d33feaff --- /dev/null +++ b/boards/uniboard1/designs/unb1_minimal/tb/python/tc_unb1_minimal.py @@ -0,0 +1,251 @@ +#! /usr/bin/env python +############################################################################### +# +# Copyright (C) 2014 +# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################### + +"""Test case for unb1_minimal + +Usage: + + --rep = number of intervals that diagnostics results are verified + --sim targets a running simulation. + +Description: + This test case tests: + - system info + - read sensors + - read ppsh + - read status 1GbE + - write to wdi to force reload from bank 0 + - flash access: write image to bank 1 + - remote update: start image in bank 1 + +""" + +############################################################################### +# System imports +import sys +import test_case +import node_io +import pi_system_info +import pi_unb_sens +import pi_ppsh +import pi_wdi +import pi_epcs +import pi_remu +import pi_eth + +from tools import * +from common import * + + + + + +def test_info(tc, io): + tc.set_section_id('Read System Info - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the PIO_SYSTEM_INFO peripheral (pi_system_info.py)') + tc.append_log(3, '>>>') + + info = pi_system_info.PiSystemInfo(tc, io) + + info.make_register_info() + tc.append_log(3, '') + info.read_reg_map() + tc.append_log(3, '') + info.read_system_info() + tc.append_log(3, '') + info.read_use_phy() + tc.append_log(3, '') + info.read_design_name() + tc.append_log(3, '') + info.read_stamps() + tc.append_log(3, '') + info.read_design_note() + +def test_sensors(tc, io): + tc.set_section_id('Read sensors - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the REG_UNB_SENS peripheral (pi_unb_sens.py)') + tc.append_log(3, '>>>') + + sens = pi_unb_sens.PiUnbSens(tc, io) + + sens.read_unb_sensors() + tc.append_log(3, '') + sens.read_fpga_temperature() + tc.append_log(3, '') + sens.read_eth_temperature() + tc.append_log(3, '') + sens.read_unb_current() + sens.read_unb_voltage() + sens.read_unb_power() + + +def test_ppsh(tc,io): + tc.set_section_id('Read PPSH capture count - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the PIO_PPS peripheral (pi_ppsh.py)') + tc.append_log(3, '>>>') + + Ppsh = pi_ppsh.PiPpsh(tc, io) + Ppsh.read_ppsh_capture_cnt() + tc.append_log(3, '') + + +def test_wdi(tc,io): + tc.set_section_id('Reset to image in bank 0 using WDI - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the REG_WDI peripheral (pi_wdi.py)') + tc.append_log(3, '>>>') + + Wdi = pi_wdi.PiWdi(tc, io) + Wdi.write_wdi_override() + tc.append_log(3, '') + + +def test_remu(tc,io): + tc.set_section_id('REMU start image in bank 1 - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> REMU (pi_remu.py)') + tc.append_log(3, '>>>') + + Remu = pi_remu.PiRemu(tc, io) + try: + Remu.write_user_reconfigure() + except: + pass # ignoring FAILED + tc.append_log(3, '') + + +def test_eth(tc,io): + tc.set_section_id('ETH status - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> ETH (pi_eth.py)') + tc.append_log(3, '>>>') + + eth = pi_eth.PiEth(tc, io) + hdr=eth.read_hdr(0) + eth.disassemble_hdr(hdr) + tc.append_log(3, '') + + +def test_flash(tc,io): + tc.set_section_id('Flash write to bank 1 - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Write to flash (pi_epcs.py)') + tc.append_log(3, '>>>') + + Epcs = pi_epcs.PiEpcs(tc, io) + path_to_rbf = instanceName = tc.gpString + Epcs.write_raw_binary_file("user", path_to_rbf) + tc.append_log(3, '') + + tc.set_section_id('Flash read/verify bank 1 - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Read from flash (pi_epcs.py)') + tc.append_log(3, '>>>') + + path_to_rbf = instanceName = tc.gpString + Epcs.read_and_verify_raw_binary_file("user", path_to_rbf) + tc.append_log(3, '') + + +def sleep(tc,io): + tc.append_log(3, 'sleeping 1 second') + tc.sleep(1.0) + + +def show_help(tc,io): + help_text(tc,io) + + +# Avaliable commands +Cmd = { + 0 : ('SLEEP' , sleep, 'Sleep 1 second'), + 1 : ('INFO' , test_info, 'using pi_system_info to read system info'), + 2 : ('SENSORS', test_sensors, 'using pi_unb_sens to readout sensors'), + 3 : ('PPSH' , test_ppsh, 'using pi_ppsh to read PPSH capture count'), + 4 : ('WDI' , test_wdi, 'using pi_wdi to reset to image in bank 0'), + 5 : ('FLASH' , test_flash, 'using pi_epcs to program/verify flash'), + 6 : ('REMU' , test_remu, 'using pi_remu to load user image'), + 7 : ('ETH' , test_eth, 'using pi_eth to read eth status'), + 100 : ('HELP' , show_help, 'show help on commands') +} + +def help_text(tc,io): + tc.append_log(0, '>>> Usage [--cmd <command number or series of numbers>]:') + for cmd in sorted(Cmd): + tc.append_log(0, ' . %d : %s: %s' % (cmd,Cmd[cmd][0],Cmd[cmd][2])) + tc.append_log(0, '') + tc.append_log(0, '[full test] sequence: --cmd 1,4,0,0,0,0,1,5,6,0,0,0,1,2,3 -s file.rbf') + tc.append_log(0, '[image start and test] sequence: --cmd 1,4,0,0,0,0,1,6,0,0,0,1,2,3') + tc.append_log(0, '[read info,sensors] sequence: --cmd 1,2,3 --rep 10') + + + +############################################################################### +# Setup + +# Create a test case object +tc = test_case.Testcase('TB - ', '') +tc.set_result('PASSED') +dgnName = tc.gpString +tc.append_log(3, '>>>') +tc.append_log(1, '>>> Title : Test bench for tc_unb1_minimal.py on nodes %s, %s' % (tc.unb_nodes_string(''),dgnName)) +tc.append_log(3, '>>>') + + + +# Create access object for nodes +io = node_io.NodeIO(tc.nodeImages, tc.base_ip) + + + +rep = 0 +while rep < tc.repeat: + rep += 1 + tc.append_log(3, '') + tc.append_log(2, 'Rep = %d' % rep) + + + for cmd in tc.commands: + if cmd > len(Cmd): cmd = 100 # default to help_text + tc.append_log(3, 'Next command: %d : %s: %s' % (cmd,Cmd[cmd][0],Cmd[cmd][2])) + + Cmd[cmd][1](tc,io) + + + + + + +############################################################################### +############################################################################### +# End +tc.set_section_id('') +tc.append_log(3, '') +tc.append_log(3, '>>>') +tc.append_log(0, '>>> Test bench result: %s' % tc.get_result()) +tc.append_log(3, '>>>') + +sys.exit(tc.get_result()) + diff --git a/boards/uniboard1/designs/unb1_test/tb/python/tc_unb1_test.py b/boards/uniboard1/designs/unb1_test/tb/python/tc_unb1_test.py new file mode 100644 index 0000000000000000000000000000000000000000..932c6071ab698b3e1211ec2c09c9b10b150e2fe7 --- /dev/null +++ b/boards/uniboard1/designs/unb1_test/tb/python/tc_unb1_test.py @@ -0,0 +1,257 @@ +#! /usr/bin/env python +############################################################################### +# +# Copyright (C) 2014 +# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################### + +"""Test case for unb1_test + +Usage: + + --rep = number of intervals that diagnostics results are verified + --sim targets a running simulation. + +Description: + This test case tests: + - system info + - read sensors + - read ppsh + - write to wdi to force reload from bank 0 + - flash access: write image to bank 1 + - remote update: start image in bank 1 + - read status MAC 10GbE + - read status PHY XAUI + - BG - DB tests for 1 port on 1 FPGA + - BG - DB tests for all ports on all FPGAs + - link test between ports on the same FPGA (same XO) + - link test between ports on different Uniboards (XO drift) + - stable link after image restart + +""" + +############################################################################### +# System imports +import sys +import test_case +import node_io +import pi_system_info +import pi_unb_sens +import pi_ppsh +import pi_wdi +import pi_epcs +import pi_remu +import pi_eth + +from tools import * +from common import * + + + + + +def test_info(tc, io): + tc.set_section_id('Read System Info - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the PIO_SYSTEM_INFO peripheral (pi_system_info.py)') + tc.append_log(3, '>>>') + + info = pi_system_info.PiSystemInfo(tc, io) + + info.make_register_info() + tc.append_log(3, '') + info.read_reg_map() + tc.append_log(3, '') + info.read_system_info() + tc.append_log(3, '') + info.read_use_phy() + tc.append_log(3, '') + info.read_design_name() + tc.append_log(3, '') + info.read_stamps() + tc.append_log(3, '') + info.read_design_note() + +def test_sensors(tc, io): + tc.set_section_id('Read sensors - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the REG_UNB_SENS peripheral (pi_unb_sens.py)') + tc.append_log(3, '>>>') + + sens = pi_unb_sens.PiUnbSens(tc, io) + + sens.read_unb_sensors() + tc.append_log(3, '') + sens.read_fpga_temperature() + tc.append_log(3, '') + sens.read_eth_temperature() + tc.append_log(3, '') + sens.read_unb_current() + sens.read_unb_voltage() + sens.read_unb_power() + + +def test_ppsh(tc,io): + tc.set_section_id('Read PPSH capture count - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the PIO_PPS peripheral (pi_ppsh.py)') + tc.append_log(3, '>>>') + + Ppsh = pi_ppsh.PiPpsh(tc, io) + Ppsh.read_ppsh_capture_cnt() + tc.append_log(3, '') + + +def test_wdi(tc,io): + tc.set_section_id('Reset to image in bank 0 using WDI - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Access the REG_WDI peripheral (pi_wdi.py)') + tc.append_log(3, '>>>') + + Wdi = pi_wdi.PiWdi(tc, io) + Wdi.write_wdi_override() + tc.append_log(3, '') + + +def test_remu(tc,io): + tc.set_section_id('REMU start image in bank 1 - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> REMU (pi_remu.py)') + tc.append_log(3, '>>>') + + Remu = pi_remu.PiRemu(tc, io) + try: + Remu.write_user_reconfigure() + except: + pass # ignoring FAILED + tc.append_log(3, '') + + +def test_eth(tc,io): + tc.set_section_id('ETH status - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> ETH (pi_eth.py)') + tc.append_log(3, '>>>') + + eth = pi_eth.PiEth(tc, io) + hdr=eth.read_hdr(0) + eth.disassemble_hdr(hdr) + tc.append_log(3, '') + + +def test_flash(tc,io): + tc.set_section_id('Flash write to bank 1 - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Write to flash (pi_epcs.py)') + tc.append_log(3, '>>>') + + Epcs = pi_epcs.PiEpcs(tc, io) + path_to_rbf = instanceName = tc.gpString + Epcs.write_raw_binary_file("user", path_to_rbf) + tc.append_log(3, '') + + tc.set_section_id('Flash read/verify bank 1 - ') + tc.append_log(3, '>>>') + tc.append_log(1, '>>> Read from flash (pi_epcs.py)') + tc.append_log(3, '>>>') + + path_to_rbf = instanceName = tc.gpString + Epcs.read_and_verify_raw_binary_file("user", path_to_rbf) + tc.append_log(3, '') + + +def sleep(tc,io): + tc.append_log(3, 'sleeping 1 second') + tc.sleep(1.0) + + +def show_help(tc,io): + help_text(tc,io) + + +# Avaliable commands +Cmd = { + 0 : ('SLEEP' , sleep, 'Sleep 1 second'), + 1 : ('INFO' , test_info, 'using pi_system_info to read system info'), + 2 : ('SENSORS', test_sensors, 'using pi_unb_sens to readout sensors'), + 3 : ('PPSH' , test_ppsh, 'using pi_ppsh to read PPSH capture count'), + 4 : ('WDI' , test_wdi, 'using pi_wdi to reset to image in bank 0'), + 5 : ('FLASH' , test_flash, 'using pi_epcs to program/verify flash'), + 6 : ('REMU' , test_remu, 'using pi_remu to load user image'), + 7 : ('ETH' , test_eth, 'using pi_eth to read eth status'), + 100 : ('HELP' , show_help, 'show help on commands') +} + +def help_text(tc,io): + tc.append_log(0, '>>> Usage [--cmd <command number or series of numbers>]:') + for cmd in sorted(Cmd): + tc.append_log(0, ' . %d : %s: %s' % (cmd,Cmd[cmd][0],Cmd[cmd][2])) + tc.append_log(0, '') + tc.append_log(0, '[full test] sequence: --cmd 1,4,0,0,0,0,1,5,6,0,0,0,1,2,3 -s file.rbf') + tc.append_log(0, '[image start and test] sequence: --cmd 1,4,0,0,0,0,1,6,0,0,0,1,2,3') + tc.append_log(0, '[read info,sensors] sequence: --cmd 1,2,3 --rep 10') + + + +############################################################################### +# Setup + +# Create a test case object +tc = test_case.Testcase('TB - ', '') +tc.set_result('PASSED') +dgnName = tc.gpString +tc.append_log(3, '>>>') +tc.append_log(1, '>>> Title : Test bench for tc_unb1_test.py on nodes %s, %s' % (tc.unb_nodes_string(''),dgnName)) +tc.append_log(3, '>>>') + + + +# Create access object for nodes +io = node_io.NodeIO(tc.nodeImages, tc.base_ip) + + + +rep = 0 +while rep < tc.repeat: + rep += 1 + tc.append_log(3, '') + tc.append_log(2, 'Rep = %d' % rep) + + + for cmd in tc.commands: + if cmd > len(Cmd): cmd = 100 # default to help_text + tc.append_log(3, 'Next command: %d : %s: %s' % (cmd,Cmd[cmd][0],Cmd[cmd][2])) + + Cmd[cmd][1](tc,io) + + + + + + +############################################################################### +############################################################################### +# End +tc.set_section_id('') +tc.append_log(3, '') +tc.append_log(3, '>>>') +tc.append_log(0, '>>> Test bench result: %s' % tc.get_result()) +tc.append_log(3, '>>>') + +sys.exit(tc.get_result()) +