From 1e75346751d44d5c803ea113603cf12b61ef0ed1 Mon Sep 17 00:00:00 2001 From: Pepping <pepping> Date: Thu, 27 Aug 2015 11:47:30 +0000 Subject: [PATCH] Fixed for statistics read-out --- .../tc_apertif_unb1_correlator_filter.py | 343 +++++++----------- 1 file changed, 125 insertions(+), 218 deletions(-) diff --git a/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py b/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py index 784322bcc8..506a21f944 100644 --- a/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py +++ b/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py @@ -1,240 +1,147 @@ -#! /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 apertif_unb1_correlator_mesh_distr_ref design. - - Description: - - - Usage: - - > python tc_apertif_unb1_correlator_mesh_distr_ref.py --gn 0:7 --sim - -""" - -############################################################################### -# System imports import test_case import node_io import unb_apertif as apr -import pi_diag_block_gen -import pi_diag_data_buffer +import pi_st_sst +import pi_diag_wg_wideband +import pi_bsn_source import pi_bsn_monitor -import pi_ppsh -import pi_st_sst -import dsp_test - -import sys, os -import subprocess -import time +import pi_bsn_scheduler +import pi_fil_ppf_w +import pi_ss_ss_wide +import pi_bf_bf import pylab as pl import numpy as np import scipy as sp -import random from tools import * -from common import * -import mem_init_file +from common import * +from common_dsp import * + ############################################################################### +# Setup + +c_nof_regs_per_stat = 2 # The number of registers used for one statistic value + +c_nof_streams = 1 +c_fft_size = 64 +c_nof_chan = 2 + # Create a test case object tc = test_case.Testcase('TB - ', '') - -# Constants/Generics that are shared between VHDL and Python -# Name Value Default Description -# START_VHDL_GENERICS -g_nof_input_streams = 12 # 16 -g_blocks_per_sync = 16 #32 # 781250 - -# Define settings for the block generator -c_bg_nof_streams = g_nof_input_streams -c_bg_ram_size = 128 -c_db_nof_streams = g_nof_input_streams -c_db_ram_size = 8 -c_samples_per_packet = 128 -c_gapsize = 64 -c_mem_low_addr = 0 -c_mem_high_addr = c_samples_per_packet-1 -c_bsn_init = 42 -c_in_dat_w = 8 -c_nof_read_back_samples = 1 -c_nof_10GbE_streams = 3 -c_nof_lanes = 4 -c_nof_regs_per_stat = 2 # The number of registers used for one statistic value - -c_write_bg_data = False -c_write_bg_data_to_file = False - -tc.append_log(3, '>>>') -tc.append_log(1, '>>> Title : Test script for apertif_unb1_correlator_mesh_distr_ref' ) +tc.set_result('PASSED') +tc.append_log(3, '>>>') +tc.append_log(1, '>>> Title : Test bench for bn_filterbank design') tc.append_log(3, '>>>') tc.append_log(3, '') -tc.set_result('PASSED') + # Create access object for nodes io = node_io.NodeIO(tc.nodeImages, tc.base_ip) -# Create block generator instance -bg = pi_diag_block_gen.PiDiagBlockGen(tc, io, g_nof_input_streams, c_bg_ram_size, instanceName='INPUT') - -# Create databuffer instances -db_proc = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, instanceName = 'PROC', nofStreams=c_db_nof_streams, ramSizePerStream=c_db_ram_size) - -# Create bsn-monitor instance -bsn = pi_bsn_monitor.PiBsnMonitor(tc, io, nofStreams=2) - -# - Create statistics instance -st = pi_st_sst.PiStSst(tc, io, g_nof_input_streams, c_samples_per_packet, c_nof_regs_per_stat) - -# Create dsp_test instance for helpful methods -dsp_test_bg = dsp_test.DspTest(inDatW=c_in_dat_w) - -pps = pi_ppsh.PiPpsh(tc, io, nodeNr=tc.nodeFnNrs) - -if __name__ == "__main__": - - ################################################################################ - ## - ## Initialize the blockgenerators - ## - ################################################################################ - # - Write settings to the block generator - tc.append_log(3, '>>>') - tc.append_log(3, '>>> Write settings to the block generator') - tc.append_log(3, '>>>') - - bg.write_block_gen_settings(c_samples_per_packet, g_blocks_per_sync, c_gapsize, c_mem_low_addr, c_mem_high_addr, c_bsn_init) - - # - Create a list with the input data and write it to the RAMs of the block generator - tc.append_log(3, '>>>') - tc.append_log(3, '>>> Write data to the waveform RAM of all channels') - tc.append_log(3, '>>>') - inputData = [] - - dataList=[] - for h in range(tc.nofNodes): - nodeData = [] - for i in xrange(c_nof_10GbE_streams): #3 - for j in xrange(c_nof_lanes): #4 - data = [] - for k in xrange(0, c_samples_per_packet): - real = (c_nof_10GbE_streams*h + i) & (2**c_in_dat_w-1) # Telescope-stream number [23:0] in real part. Used as source-identifier. - imag = (2*j+ (k % 2)) & (2**c_in_dat_w-1) # Alternatng destination number in imag part: (0,1) (2,3) 4,5) (6,7) - data.append((imag << c_in_dat_w) + real) - nodeData.append(data) - dataList.append(nodeData) - for i in dataList: - print i - inputData = [] - in_h = 0 - for h in tc.nodeNrs: - for i in xrange(g_nof_input_streams): - if c_write_bg_data == True: - bg.write_waveform_ram(dataList[in_h][i], i, [h]) - if c_write_bg_data_to_file == True: - filename = "../../src/hex/node" + str(h) + "/bg_in_data_mesh_distr_" + str(i) + ".hex" - mem_init_file.list_to_hex(list_in=dataList[in_h][i], filename=filename, mem_width=c_nof_complex*c_in_dat_w, mem_depth=2**(ceil_log2(c_bg_ram_size))) - dataListComplex = bg.convert_concatenated_to_complex(dataList[in_h][i], c_in_dat_w) - inputData.append(dataListComplex) - in_h = in_h+1 - - # - Enable the block generator - tc.append_log(3, '>>>') - tc.append_log(3, '>>> Start the block generator') - tc.append_log(3, '>>>') - tc.append_log(3, '') - - bg.write_enable_pps() - -# bsn.read_bsn_monitor(0) -# bsn.read_bsn_monitor(1) - - do_until_ge(db_proc.read_nof_words, ms_retry=3000, val=c_db_ram_size, s_timeout=3600) - -# bsn.read_bsn_monitor(0) -# bsn.read_bsn_monitor(1) - - ############################################################################### - # - # Read data from data buffer - # - ############################################################################### - db_out = [] - for i in range(c_bg_nof_streams): - db_out.append(flatten(db_proc.read_data_buffer(streamNr=i, n=c_nof_read_back_samples, radix='uns', width=c_nof_complex*c_in_dat_w, nofColumns=8))) - - ############################################################################### - # - # Verify data - # - ############################################################################### - tc.append_log(0, 'The Real output ') - for i in db_out: - db_re = [] - for j in i: - real = j & 0xFF - db_re.append(real) - tc.append_log(0, '%s' % str(db_re)) - - tc.append_log(3, '') - tc.append_log(0, 'The Imaginary output ') - for i in db_out: - db_im = [] - for j in i: - imag = (j & 0xFF00) >> c_in_dat_w - db_im.append(imag) - tc.append_log(0, '%s' % str(db_im)) - - -# tc.append_log(0, '%s' % str((i & 0xFF00) >> c_in_dat_w)) - -# bsn.read_bsn_monitor(0) -# bsn.read_bsn_monitor(1) - - - # for i in range(c_bg_nof_streams): - # for j in range(tc.nofNodes): - # for k in range(c_nof_read_back_samples): - # if db_out_re[i][j*c_nof_read_back_samples + k] != i: - # tc.append_log(1, 'Error in real part. Expected %d. Received %d', (i,db_out_re[i][j*c_nof_read_back_samples + k])) - # tc.set_result('FAILED') - # if j < 4: - # if db_out_im[i][j*c_nof_read_back_samples + k] != j*2: - # tc.append_log(1, 'Error in imag part. Expected %d. Received %d', (j*2,db_out_im[i][j*c_nof_read_back_samples + k])) - # tc.set_result('FAILED') - # else: - # if db_out_im[i][j*c_nof_read_back_samples + k] != j*2+1: - # tc.append_log(1, 'Error in imag part. Expected %d. Received %d', (j*2+1,db_out_im[i][j*c_nof_read_back_samples + k])) - # tc.set_result('FAILED') - - ############################################################################### - # 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()) +#def __init__(self, tc, io, nofStats=256, statDataWidth=56, nofRegsPerStat=2, xstEnable=False, instanceNr = 0, nodeNr=None): + +# - Create statistics instance +cst = [] +for i in xrange(c_nof_streams): + cst.append( pi_st_sst.PiStSst(tc, io, c_fft_size*c_nof_chan, 56, c_nof_regs_per_stat, False, i, tc.nodeBnNrs)) + +# Create bsn-monitor instance +bsn_input = pi_bsn_monitor.PiBsnMonitor(tc, io, instanceName='INPUT', nofStreams=3) +bsn_proc = pi_bsn_monitor.PiBsnMonitor(tc, io, instanceName='PROC', nofStreams=4) + +# - Create filter instance +#fil = pi_fil_ppf_w.PiFilPpfw(tc, io, apr.c_nof_input_signals_per_bn, c_nof_taps, c_fft_size, apr.c_wb_factor) + +# - Read statistics +tc.append_log(3, '>>>') +tc.append_log(3, '>>> Read BSN monitors ') +tc.append_log(3, '>>>') +tc.append_log(3, '') + +#bsn_input.read_bsn_monitor(0) +#bsn_input.read_bsn_monitor(1) +#bsn_input.read_bsn_monitor(2) +# +#bsn_proc.read_bsn_monitor(0) +#bsn_proc.read_bsn_monitor(1) +#bsn_proc.read_bsn_monitor(2) +#bsn_proc.read_bsn_monitor(3) + +# - Read statistics +tc.append_log(3, '>>>') +tc.append_log(3, '>>> Read Statistics for first instance') +tc.append_log(3, '>>>') +tc.append_log(3, '') + +data = [] +for k in range(c_nof_streams): + data.append(cst[k].read_stats(return_complex=False)); + +print data +tc.append_log(3, '') +spectrum1 = [] +spectrum2 = [] + +for l in range(c_fft_size): + spectrum1.append(float(data[0][0][2*l]+1)); + spectrum2.append(float(data[0][0][2*l+1]+1)); + +#spectrum3 = [] +#spectrum4 = [] +#for k in range(apr.c_wb_factor): +# for l in range(c_fft_size/8): +# spectrum3.append(float(data[4+k][0][2*l]+1)); +# spectrum4.append(float(data[4+k][0][2*l+1]+1)); + +print len(spectrum1) +print spectrum1 + +spectrum1_reordered = fft_reorder(spectrum1) +spectrum2_reordered = fft_reorder(spectrum2) +print spectrum1_reordered + +spectrum_log1 = [] +spectrum_log2 = [] +#spectrum_log3 = [] +#spectrum_log4 = [] + +for k in range(c_fft_size): + spectrum_log1.append(10*math.log10(spectrum1_reordered[k])) + spectrum_log2.append(10*math.log10(spectrum2_reordered[k])) +## spectrum_log3.append(10*math.log10(spectrum3[k])) +## spectrum_log4.append(10*math.log10(spectrum4[k])) + +f_as = [] +for k in range(c_fft_size): +# f_as.append(k*0.781250/(c_fft_size)) + f_as.append(k) + +pl.figure(1) +pl.plot(f_as, spectrum_log1) +pl.grid(True) +pl.xlabel('Channel index') +pl.ylabel('channel power') + +pl.figure(2) +pl.plot(f_as, spectrum_log2) +pl.grid(True) +pl.xlabel('Channel index') +pl.ylabel('channel power') + +##pl.figure(3) +##pl.plot(f_as, spectrum_log3) +##pl.grid(True) +##pl.xlabel('frequency in Mhz') +##pl.ylabel('statistics') +## +##pl.figure(4) +##pl.plot(f_as, spectrum_log4) +##pl.grid(True) +##pl.xlabel('frequency in Mhz') +##pl.ylabel('statistics') +# +pl.show() -- GitLab