diff --git a/applications/stagiair/libraries/wave_gen/tb/python/tc_wave_gen.py b/applications/stagiair/libraries/wave_gen/tb/python/tc_wave_gen.py new file mode 100644 index 0000000000000000000000000000000000000000..9e7fc771c696ba484fdfe0078738d373d43205f4 --- /dev/null +++ b/applications/stagiair/libraries/wave_gen/tb/python/tc_wave_gen.py @@ -0,0 +1,139 @@ +#! /usr/bin/env python +############################################################################### +# +# Copyright (C) 2012 +# 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 the bf_unit entity. + + Description: + + This testcase is used in conjunction with the tb_bf_unit.vhd file. + + Generics for the VHDL testbench are passed to modelsim to configure the + current simulation. + To observe the VHDL signals in the wave window modelsim needs to be + started manually and then c_start_modelsim must be set to 0 and the generics + also must be set manually. + + NOTE: Use c_write_bg, c_write_bf_weights and c_write_bf_ss_wide to en- or disable + the time-consuming writes to the mm-interface. WHen disabled, be sure to + have the according .hex files in place. The .hex files can be generated + with the bf_unit.py script. + + BEWARE: If the hex files change due to different script settings, then it is + necessary to run the script again to ensure that Modelsim starts with the + latest hex files. + + Usage: + + > python tc_bf_unit.py --unb 0 --fn 0 --sim + +""" + +############################################################################### +# System imports +import test_case +import node_io +import sys +import pi_diag_data_buffer +import pi_stagiair_wave_gen +from tools import * +from common import * +import csv +import cmath +############################################################################### + +# Debug control +c_debug_print = False + +# Create a test case object +tc = test_case.Testcase('TB - ', '') + +tc.append_log(3, '>>>') +tc.append_log(1, '>>> Title : Test bench for wave_gen' ) +tc.append_log(3, '>>>') +tc.append_log(3, '') +tc.set_result('PASSED') + +############################################################################### + +c_size = 2048 +c_filename = 'values.csv' +# Create access object for nodes +io = node_io.NodeIO(tc.nodeImages, tc.base_ip) + + +# Create databuffer instances +db = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, instanceName = '', nofStreams=1, ramSizePerStream=c_size) + +wg = pi_stagiair_wave_gen.PiWaveGen(tc, io, nof_inst=1) + + +def listToCsv(fileName = 'default.csv', overwrite = False, value_list = []): + header = None + if overwrite: + ofile = open(fileName, "w") + header = ['real', 'imag', 'abs', 'phase'] + else: + ofile = open(fileName, "a") + writer = csv.writer(ofile, delimiter=',', quoting=csv.QUOTE_NONE) + if not header == None: + writer.writerow(header) + + for value in value_list: + if type(value) == complex: + row_list = [value.real, value.imag, abs(value), cmath.phase(value)] + else: + row_list = [value] + writer.writerow(row_list) + + + + +if __name__ == "__main__": + + wg.write(registers=[('gain_sel', 16)]) + wg.write(registers=[('wave_sel', 0)]) + wg.write(registers=[('enable', 1)]) + + do_until_ge(db.read_nof_words, ms_retry=1000, val=c_size, s_timeout=3600) + wg.write(registers=[('enable', 0)]) + val_list = flatten(db.read_data_buffer(streamNr=0, n=c_size, radix='dec', width=8, nofColumns=1)) + listToCsv(fileName = c_filename, overwrite = True, value_list = val_list) + + for i in range(1,5): + wg.write(registers=[('wave_sel', i)]) + wg.write(registers=[('enable', 1)]) + do_until_ge(db.read_nof_words, ms_retry=1000, val=c_size, s_timeout=3600) + wg.write(registers=[('enable', 0)]) + val_list = flatten(db.read_data_buffer(streamNr=0, n=c_size, radix='dec', width=8, nofColumns=1)) + listToCsv(fileName = c_filename, overwrite = False, value_list = val_list) + + + + ############################################################################### + # 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())