Skip to content
Snippets Groups Projects
Commit f1361eb3 authored by Daniel van der Schuur's avatar Daniel van der Schuur
Browse files

-Added stream definition of ARTS SC1 (v1).

parent 6734e66d
No related branches found
No related tags found
No related merge requests found
###############################################################################
#
# Copyright (C) 2016
# 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/>.
#
###############################################################################
# Author
# . Daniel van der Schuur
# Purpose
# . Use stream.py to model the ARTS SC1 data path
# Description
# . This stream model matches ASTRON-SP-062, chapter 5.
###############################################################################
# Import our StreamArray class
###############################################################################
from stream import *
###############################################################################
# Constants: definitions from SP-062, page 8
###############################################################################
# Parallel (physical) dimensions
N_DISH = 12 # Number of dishes
N_POL = 2 # Number of polarizations
N_BAND = 16 # Number of bands
N_BU = 4
# Serial (time) dimensions
nof_intervals = 0 # Unlimited runtime
T_INT_X = 1.024 # Correlator intergration period
N_INT_X = 800000 # Number of time samples per corrrelator intergration period
N_SLOT = (256, (0, 16383, 1)) # index 0..16383, stepsize 1 = increment horizontally
# Complex beamlet data width
W_BEAMLET = 6
N_COMPLEX = 2
DATA_WIDTH = N_COMPLEX*W_BEAMLET
###############################################################################
# Equation 1 a
###############################################################################
# StreamArray definition
parallel_definition = (('dish', N_DISH), ('polarization', N_POL), ('band', N_BAND), ('BU', N_BU))
serial_definition = (('interval', nof_intervals, T_INT_X),('timesample', N_INT_X), ('slot', N_SLOT))
CB480 = StreamArray(parallel_definition, serial_definition, DATA_WIDTH, block_size=256, nof_blocks=1) #Set to 0 (=unlimited) for 1b onwards
print 'CB480', CB480.shape, CB480.get_data_rate(), 'Gbps'
for i in CB480[0][0][0]: # dish 11, pol 0, band 0
for bfu in i: # bf unit streams 0..3
print bfu['slot'] # serial data
###############################################################################
# Equation 1 b (NOTE - not in document): forward first 240/256 beamlets
################################################################################
CB480_sel = dp_split(CB480, 240)
#print 'CB480_sel', CB480_sel.shape, CB480_sel[0][0][0].get_data_rate(), 'Gbps'
#for i in CB480_sel[0][0][0]:
# for bfu in i:
# print bfu['slot']
###############################################################################
# Equation 2: transpose the band and dish (physical) dimensions of CB480
# . flip dimensions 0 and 2
###############################################################################
#print 'CB480_sel', CB480_sel.shape
#for i in CB480_sel[0][0][1]:
# for bfu in i:
# print bfu[['dish','band']]
CB480_T = CB480_sel.transpose((2,1,0,3))
#print CB480_T.shape
#for i in CB480_T[0][0][1]:
# for bfu in i:
# print bfu[['dish','band']]
###############################################################################
# Equation 7: resize dimensions polarizations*dishes = 2*12 to
# processing_nodes*10GbE RX = 8*3
# . Total reshape: (16*2*12*4 -> 16*8*3*4)
###############################################################################
N_PROCESSING_NODES=8
N_10G_RX=3
CB480_TR = CB480_T.reshape((N_BAND, N_PROCESSING_NODES, N_10G_RX, N_BU))
#print CB480_TR.shape
#print CB480_TR[0][0].get_data_rate() # Input data rate on UniBoard 0, FN0
#for i in CB480_TR[0][0][0]: # beamlets slots incoming on UniBoard0, FN0, RX0
# for bfu in i:
# print bfu['slot']
###############################################################################
# Equation 10: FIXME - Not implemented as documented.
###############################################################################
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment