def get_data():
    # read the data
    snapdata_p0 = fpgautils.threaded_fpga_operation(fpgas, 10,
                                                    lambda fpga_: fpga_.snapshots.snap_adc0_ss.read(man_trig=True))
    snapdata_p1 = fpgautils.threaded_fpga_operation(fpgas, 10,
                                                    lambda fpga_: fpga_.snapshots.snap_adc1_ss.read(man_trig=True))
    try:
        for key, value in snapdata_p0.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p0 snap data from host %s' % key)
    except:
        print snapdata_p0
        raise RuntimeError('Error getting p0 snap data')
    try:
        for key, value in snapdata_p1.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p1 snap data from host %s' % key)
    except:
        print snapdata_p1
        raise RuntimeError('Error getting p1 snap data')

    # unpack the data
    up_data = {_fpga: {'p0': [], 'p1': []} for _fpga in snapdata_p0}
    for fpga in snapdata_p0.keys():
        p0_data = snapdata_p0[fpga]
        p1_data = snapdata_p1[fpga]
        p0_unpacked = []
        p1_unpacked = []
        for ctr, _ in enumerate(p0_data['data']['d0']):
            for word_ctr in range(0, 8):
                p0_unpacked.append(p0_data['data']['d{}'.format(word_ctr)][ctr])
                p1_unpacked.append(p1_data['data']['d{}'.format(word_ctr)][ctr])
        up_data[fpga]['p0'] = p0_unpacked[:]
        up_data[fpga]['p1'] = p1_unpacked[:]
    return up_data
Exemplo n.º 2
0
def enable_disable(endisable):
    print '%s tx on all hosts' % ('Enabling' if endisable else 'Disabling')
    if fpgas[0].registers.names().count('control') > 0:
        if fpgas[0].registers.control.field_names().count('gbe_out_en') > 0:
            print '\tProduction control registers found.'
            fpgautils.threaded_fpga_operation(
                fpgas, 10,
                lambda fpga: fpga.registers.control.write(
                    gbe_out_en=endisable))
        elif fpgas[0].registers.control.field_names().count('gbe_txen') > 0:
            print '\tSim-style control registers found.'
            fpgautils.threaded_fpga_operation(
                fpgas, 10,
                lambda fpga: fpga.registers.control.write(
                    gbe_txen=endisable))
        elif fpgas[0].registers.control.field_names().count('comms_en') > 0:
            print '\tOld-style control registers found.'
            fpgautils.threaded_fpga_operation(
                fpgas, 10,
                lambda fpga: fpga.registers.control.write(
                    comms_en=endisable))
    elif fpgas[0].registers.names().count('ctrl') > 0:
        if fpgas[0].registers.ctrl.field_names().count('comms_en') > 0:
            print '\tSome control registers found?'
            print fpgautils.threaded_fpga_operation(
                fpgas, 10,
                lambda fpga: fpga.registers.ctrl.write(comms_en=endisable))
    else:
        print '\tCould not find the correct registers to control TX'
def get_data():
    # read the data
    snapdata = []
    for loop_ctr in range(0, loops_necessary):
        temp_snapdata = {}
        for snap in required_snaps:
            offset = 8*1024*loop_ctr
            # print 'reading at offset %i' % offset
            temp_snapdata[snap] = fpgautils.threaded_fpga_operation(
                fpgas, 10, lambda fpga_: fpga_.snapshots[snap].read(offset=offset))
        snapdata.append(temp_snapdata)

    fpga_data = {key: {'p0': [], 'p1': []} for key in snapdata[0][required_snaps[0]].keys()}
    for fpga in snapdata[0][required_snaps[0]].keys():
        p0_data = []
        p1_data = []
        for loop_ctr in range(0, loops_necessary):
            # reorder the data
            quant0_data = snapdata[loop_ctr][required_snaps[0]][fpga]['data']
            quant1_data = snapdata[loop_ctr][required_snaps[1]][fpga]['data']
            for ctr in range(0, len(quant0_data['real0'])):
                p0_data.append(numpy.complex(quant0_data['real0'][ctr], quant0_data['imag0'][ctr]))
                p0_data.append(numpy.complex(quant0_data['real1'][ctr], quant0_data['imag1'][ctr]))
                p0_data.append(numpy.complex(quant0_data['real2'][ctr], quant0_data['imag2'][ctr]))
                p0_data.append(numpy.complex(quant0_data['real3'][ctr], quant0_data['imag3'][ctr]))
                p1_data.append(numpy.complex(quant1_data['real0'][ctr], quant1_data['imag0'][ctr]))
                p1_data.append(numpy.complex(quant1_data['real1'][ctr], quant1_data['imag1'][ctr]))
                p1_data.append(numpy.complex(quant1_data['real2'][ctr], quant1_data['imag2'][ctr]))
                p1_data.append(numpy.complex(quant1_data['real3'][ctr], quant1_data['imag3'][ctr]))
        print '%s data is %d points long.' % (fpga, len(p0_data))
        assert len(p0_data) == EXPECTED_FREQS, 'Not enough snap data for the number of channels!'
        fpga_data[fpga]['p0'] = p0_data
        fpga_data[fpga]['p1'] = p1_data
    return fpga_data
Exemplo n.º 4
0
def check_sync(all_fpgas):
    synctimes = fpgautils.threaded_fpga_operation(all_fpgas, 10, get_sync)
    if args.log_level != "":
        logging.info(synctimes)
    synctime = synctimes[synctimes.keys()[0]]
    for stime in synctimes.values():
        if stime != synctime:
            return False, synctimes
    return True, synctimes
def get_data():
    """
    Read the snap data from the f-engines
    :return:
    """
    # arm the snaps
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_0_ss.arm())
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_1_ss.arm())

    # allow them to trigger
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(snapcoarse_arm='pulse'))

    # read the data
    snapdata_p0 = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_0_ss.read(arm=False))
    snapdata_p1 = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_1_ss.read(arm=False))

    try:
        for key, value in snapdata_p0.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p0 snap data from host %s' % key)
    except:
        print snapdata_p0
        raise RuntimeError('Error getting p0 snap data')
    try:
        for key, value in snapdata_p1.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p1 snap data from host %s' % key)
    except:
        print snapdata_p1
        raise RuntimeError('Error getting p1 snap data')

    # unpack the data and the timestamps
    _unpacked_data = {}
    for _fpga in snapdata_p0.keys():
        _unpacked_data[_fpga] = {}
        p0_data = snapdata_p0[_fpga]
        p1_data = snapdata_p1[_fpga]
        packettime = (p0_data['extra_value']['data']['time36_msb'] << 4) | p1_data['extra_value']['data']['time36_lsb']
        _unpacked_data[_fpga]['packettime36'] = packettime
        _unpacked_data[_fpga]['packettime48'] = packettime << 12
        p0_unpacked = []
        p1_unpacked = []
        for _ctr, _ in enumerate(p0_data['data']['p0_80']):
            p0_80 = p0_data['data']['p0_80'][_ctr]
            p1_80 = (p0_data['data']['p1_80_msb'][_ctr] << 32) | p1_data['data']['p1_80_lsb'][_ctr]
            p0_unpacked.append(p0_80)
            p1_unpacked.append(p1_80)
        _unpacked_data[_fpga]['p0'] = p0_unpacked[:]
        _unpacked_data[_fpga]['p1'] = p1_unpacked[:]
    return _unpacked_data
Exemplo n.º 6
0
#     HOSTCLASS = dcp_fpga.DcpFpga

if 'CORR2INI' in os.environ.keys() and args.hosts == '':
    args.hosts = os.environ['CORR2INI']
hosts = utils.parse_hosts(args.hosts, section='xengine')
if len(hosts) == 0:
    raise RuntimeError('No good carrying on without hosts.')

#TODO - sort out getting sys info from the config file

# create the devices and connect to them
fpgas = fpgautils.threaded_create_fpgas_from_hosts(xhost_fpga.FpgaXHost, hosts)
fpgautils.threaded_fpga_function(fpgas, 15, 'get_system_information')

if args.rstcnt:
    fpgautils.threaded_fpga_operation(fpgas, 10,
                                      lambda fpga_: fpga_.registers.control.write(cnt_rst='pulse'))


def get_fpga_data(fpga):
    vaccstats = fpga.vacc_get_status()
    _data = {}
    for _ctr in range(0, 4):
        _data['err%i' % _ctr] = vaccstats[_ctr]['errors']
        _data['cnt%i' % _ctr] = vaccstats[_ctr]['count']
        _data['armcnt%i' % _ctr] = vaccstats[_ctr]['armcount']
        _data['ldcnt%i' % _ctr] = vaccstats[_ctr]['loadcount']
    return _data

try:
    data = get_fpga_data(fpgas[0])
    reg_names = data.keys()
Exemplo n.º 7
0
polltime = args.polltime

if args.log_level != '':
    import logging
    log_level = args.log_level.strip()
    try:
        logging.basicConfig(level=eval('logging.%s' % log_level))
    except AttributeError:
        raise RuntimeError('No such log level: %s' % log_level)

# create the fpgas
fpgas = utils.xeng_script_get_fpgas(args)

if args.rstcnt:
    fpgautils.threaded_fpga_operation(
        fpgas, 10, lambda fpga_:
        fpga_.registers.control.write(status_clr='pulse'))


def get_fpga_data(fpga):
    """
    :param fpga:
    :return: a dictionary of flags set per x-engine
    """
    data = fpga.get_status_registers()
    rv = []
    for xd in data:
        xdata = {}
        for k in xd.keys():
            if xd[k] == 1:
                xdata[k] = 1
Exemplo n.º 8
0
    raise RuntimeError


def exit_gracefully(sig, frame):
    import sys
    fpgautils.threaded_fpga_function(fpgas, 10, 'disconnect')
    sys.exit(0)
import signal
signal.signal(signal.SIGINT, exit_gracefully)
signal.signal(signal.SIGHUP, exit_gracefully)

while True:

    # arm the snaps
    for snap in required_snaps:
        fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots[snap].arm())

    # allow them to trigger
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(snapquant_arm='pulse'))

    # read the data
    snapdata = {}
    for snap in required_snaps:
        snapdata[snap] = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots[snap].read(arm=False))

    for fpga in snapdata[required_snaps[0]].keys():
        # reorder the data
        quant_data = snapdata[required_snaps[0]][fpga]['data']
        p0_data = []
        p1_data = []
        for ctr in range(0, len(quant_data['r00'])):
        old_val &= int('111011', 2)
    else:
        old_val |= (0x01 << 2)
    fpga.registers.tvg_control.write(vacc=old_val)

N_PULSES = (128 * 40)-1

N_PULSES = (2**32)-1

N_PER_GROUP = 40
GROUP_PERIOD = 100

# fpgautils.threaded_fpga_operation(c.xhosts, 10, lambda fpga_: fpga_.registers.acc_len.write_int(1))

for ctr in range(0, 4):
    fpgautils.threaded_fpga_operation(c.xhosts, 10, lambda fpga_: fpga_.registers['sys%i_vacc_tvg0_n_pulses' % ctr].write_int(N_PULSES))
    fpgautils.threaded_fpga_operation(c.xhosts, 10, lambda fpga_: fpga_.registers['sys%i_vacc_tvg0_n_per_group' % ctr].write_int(N_PER_GROUP))
    fpgautils.threaded_fpga_operation(c.xhosts, 10, lambda fpga_: fpga_.registers['sys%i_vacc_tvg0_group_period' % ctr].write_int(GROUP_PERIOD))

fpgautils.threaded_fpga_operation(c.xhosts, 10, valid_select, 0)
fpgautils.threaded_fpga_operation(c.xhosts, 10, enable_pulses, 0)
fpgautils.threaded_fpga_operation(c.xhosts, 10, reset, 0)
fpgautils.threaded_fpga_operation(c.xhosts, 10, reset, 1)
fpgautils.threaded_fpga_operation(c.xhosts, 10, reset, 0)
fpgautils.threaded_fpga_operation(c.xhosts, 10, enable_counter)

print fpgautils.threaded_fpga_operation(c.xhosts, 10,
                                        lambda fpga_:
                                        decode_vacc_ctrl(fpga_.registers.tvg_control.read()['data']['vacc']))

# fpgautils.threaded_fpga_operation(c.xhosts, 10, enable_pulses, 1)
Exemplo n.º 10
0
                                          '' if numgbes == 1 else 's')

if args.resetctrs:

    def reset_gbe_debug(fpga_):
        control_fields = fpga_.registers.control.field_names()
        if 'gbe_debug_rst' in control_fields:
            fpga_.registers.control.write(gbe_debug_rst='pulse')
        elif 'gbe_cnt_rst' in control_fields:
            fpga_.registers.control.write(gbe_cnt_rst='pulse')
        else:
            utils.threaded_fpga_function(fpgas, 10, 'disconnect')
            print control_fields
            raise RuntimeError('Could not find GBE debug reset field.')

    utils.threaded_fpga_operation(fpgas, 10, reset_gbe_debug)


def get_gbe_data(fpga):
    """
    Get 10gbe data counters from the fpga.
    """
    returndata = {}
    for gbecore in fpga.tengbes:
        returndata[gbecore.name] = gbecore.read_counters()
    return returndata


def get_tap_data(fpga):
    """
    What it says on the tin.
Exemplo n.º 11
0
    print "The following hosts are missing one or more of the post-pfb snapshots. Bailing."
    print snapshot_missing
    fpgautils.threaded_fpga_function(fpgas, 10, "disconnect")
    raise RuntimeError


def exit_gracefully(_, __):
    fpgautils.threaded_fpga_function(fpgas, 10, "disconnect")
    sys.exit(0)


signal.signal(signal.SIGINT, exit_gracefully)

# set the FFT shift
if args.fftshift != -1:
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.fft_shift.write_int(args.fftshift))
current_fft_shift = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.fft_shift.read())
print "Current FFT shift is: ", current_fft_shift

# select the polarisation
fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(snappfb_dsel=args.pol))

loopctr = 0
integrate_ctr = 0

integrated_data = {fpga.host: EXPECTED_FREQS * [0] for fpga in fpgas}
integrated_power = {fpga.host: EXPECTED_FREQS * [0] for fpga in fpgas}

if args.number == -1 and args.integrate == -1:
    looplimit = -1
else:
Exemplo n.º 12
0
if 'CORR2INI' in os.environ.keys() and args.config == '':
    args.config = os.environ['CORR2INI']
if args.config != '':
    host_list = utils.parse_hosts(args.config, section='xengine')
else:
    host_list = []

fpgas = []
for host_ctr, host in enumerate(host_list):
    f = xhost_fpga.FpgaXHostVaccDebug(host, host_ctr)
    f.get_system_information()
    fpgas.append(f)

casper_utils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga: fpga.tvg_data_value(1))

print(casper_utils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga: fpga.tvg_control(data_sel=1, inj_vector=0))

# _pref = 'sys0_vacc_tvg0'
#
# regname = '%s_n_pulses' % _pref
# fpga.registers[regname].write_int(10240)
#
# regname = '%s_n_per_group' % _pref
# fpga.registers[regname].write_int(40)
#
# regname = '%s_group_period' % _pref
Exemplo n.º 13
0
        fpgas, timeout=120,
        target_function=('upload_to_ram_and_program', [a_fpg], {}))
else:
    casperutils.threaded_fpga_function(
        fpgas, timeout=120,
        target_function=('get_system_information', [a_fpg], {}))
print(50*'%')

# another func that exists on the fpga object
print(casperutils.threaded_fpga_function(
    fpgas, timeout=120, target_function=('listdev', [], {})))
print(50*'%')


def some_func(fpga, an_arg, a_kwarg):
    return fpga.host + '_' + str(an_arg) + '_' + str(a_kwarg)

# a custom func
print(casperutils.threaded_fpga_operation(
    fpgas, timeout=10,
    target_function=(some_func, [34], {'a_kwarg': 'astring'})))
print(50*'%')

# a lambda func
print(casperutils.threaded_fpga_operation(
    fpgas, timeout=10,
    target_function=(
        lambda fpga: fpga.registers.ram_control.read()['data'], [], {})))

# end
Exemplo n.º 14
0
        if stime != synctime:
            return False, synctimes
    return True, synctimes


# check the current sync times
synced, times = check_sync(fpgas)
print "Current f-engine sync times:"
for host, synctime in times.items():
    print "\t%s: %i" % (host, synctime)

if ((not synced) or args.force) and (not args.checkonly):
    # sync the f-engines
    tries = 0
    while tries < args.retry:
        print "Syncing...",
        fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(sys_rst="pulse"))
        print "checking...",
        time.sleep(1)
        synced, times = check_sync(fpgas)
        if synced:
            print "done. Synced at %d." % times[times.keys()[0]]
            break
        print "failed. Trying again.", times
    if tries == args.retry:
        if args.log_level != "":
            logging.error("FAILED to sync!")
        print "FAILED to sync!"

fpgautils.threaded_fpga_function(fpgas, 10, "disconnect")
Exemplo n.º 15
0
snapshot_missing = []
for fpga_ in fpgas:
    if not 'snapcoarse_0_ss' in fpga_.snapshots.names():
        snapshot_missing.append(fpga_.host)
if len(snapshot_missing) > 0:
    print('The following hosts are missing the post-unpack snapshot. Bailing.'
    print(snapshot_missing
    exit_gracefully(None, None)

def get_data():
    """
    Read the snap data from the f-engines
    :return:
    """
    # arm the snaps
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_0_ss.arm())
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_1_ss.arm())

    # allow them to trigger
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(snapcoarse_arm='pulse'))

    # read the data
    snapdata_p0 = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_0_ss.read(arm=False))
    snapdata_p1 = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.snapshots.snapcoarse_1_ss.read(arm=False))

    try:
        for key, value in snapdata_p0.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p0 snap data from host %s' % key)
    except:
        print(snapdata_p0
Exemplo n.º 16
0
        logging.basicConfig(level=eval('logging.%s' % log_level))
    except AttributeError:
        raise RuntimeError('No such log level: %s' % log_level)

if 'CORR2INI' in os.environ.keys() and args.hosts == '':
    args.hosts = os.environ['CORR2INI']
hosts = utils.parse_hosts(args.hosts, section='xengine')
if len(hosts) == 0:
    raise RuntimeError('No good carrying on without hosts.')

# create the devices and connect to them
fpgas = fpgautils.threaded_create_fpgas_from_hosts(katcp_fpga.KatcpFpga, hosts)
fpgautils.threaded_fpga_function(fpgas, 15, 'get_system_information')

print fpgautils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga_:
        fpga_.registers.vacctvg_control.read()['data'], )

# write nothing to the tvg control reg
fpgautils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga_:
        fpga_.registers.vacctvg_control.write_int(0), )

# reset all the TVGs
fpgautils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga_:
        fpga_.registers.vacctvg_control.write(ctr_en=False, sync_sel=False,
                                              valid_sel=False, data_sel=False,
                                              reset='pulse'), )
Exemplo n.º 17
0
if 'CORR2INI' in os.environ.keys() and args.hosts == '':
    args.hosts = os.environ['CORR2INI']
hosts = utils.parse_hosts(args.hosts, section='xengine')
if len(hosts) == 0:
    raise RuntimeError('No good carrying on without hosts.')

# create the devices and connect to them
fpgas = fpgautils.threaded_create_fpgas_from_hosts(hosts)
fpgautils.threaded_fpga_function(fpgas, 15, 'get_system_information')

vals = [10, 20, 30, 40]

# and enable it and route the valid line
fpgautils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga_:
        fpga_.registers.vacctvg_control.write(valid_sel=True, pulse_en=False), )

# and enable it and route the valid line
fpgautils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga_:
        fpga_.registers.vacctvg_control.write(sync_sel=True),)

# and enable it and route the valid line
fpgautils.threaded_fpga_operation(
    fpgas, 10,
    lambda fpga_:
        fpga_.registers.vacctvg_control.write(reset='pulse'), )

# set up the valid pulse generator
            snapshot_missing.append(fpga_.host)
if len(snapshot_missing) > 0:
    print 'The following hosts are missing one or more of the post-quantsnapshots. Bailing.'
    print snapshot_missing
    fpgautils.threaded_fpga_function(fpgas, 10, 'disconnect')
    raise RuntimeError


def exit_gracefully(_, __):
    fpgautils.threaded_fpga_function(fpgas, 10, 'disconnect')
    sys.exit(0)
signal.signal(signal.SIGINT, exit_gracefully)

# set the FFT shift
if args.fftshift != -1:
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.fft_shift.write_int(args.fftshift))
current_fft_shift = fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.fft_shift.read())
print 'Current FFT shift is: ', current_fft_shift

# check the size of the snapshot blocks
snapshot_bytes = (2**int(fpgas[0].snapshots.snap_quant0_ss.block_info['snap_nsamples'])) * \
                 (int(fpgas[0].snapshots.snap_quant0_ss.block_info['snap_data_width'])/8)
print 'Snapshot is %i bytes long' % snapshot_bytes
snapshot_samples = (2**int(fpgas[0].snapshots.snap_quant0_ss.block_info['snap_nsamples'])) * 4
print 'Snapshot is %i samples long' % snapshot_samples
loops_necessary = EXPECTED_FREQS / snapshot_samples
print 'Will need to read the snapshot %i times' % loops_necessary


def get_data():
    # read the data
Exemplo n.º 19
0
    if not fpga.is_connected():
        return 'unavailable'
    try:
        fpga.test_connection()
        return 'programmed'
    except:
        return 'connected'

# make the FPGA objects
fpgas = fpgautils.threaded_create_fpgas_from_hosts(katcp_fpga.KatcpFpga, hosts)

# ping them
connected = []
programmed = []
unavailable = []
responses = fpgautils.threaded_fpga_operation(fpgas, 10, pingfpga)
for host, response in responses.items():
    if response == 'unavailable':
        unavailable.append(host)
    elif response == 'programmed':
        programmed.append(host)
    elif response == 'connected':
        connected.append(host)

fpgautils.threaded_fpga_function(fpgas, 10, 'disconnect')

sconn = set(connected)
sprog = set(programmed)
connected = list(sconn.difference(sprog))
print '%d hosts:' % len(hosts)
print '\tProgrammed:', programmed
Exemplo n.º 20
0
        returnval = (fpga_.registers.local_time_msw.read()['data']['reg'] << 32) + \
                    fpga_.registers.local_time_lsw.read()['data']['reg']
    except:
        returnval = -1
    return returnval


def get_fpga_data(fpga_):
    return {'gbe': {core_.name: core_.read_counters() for core_ in fpga_.tengbes},
            'rxtime': fengine_rxtime(fpga_),
            'mcnt_nolock': 555}

# work out tables for each fpga
fpga_headers = []
master_list = []
fpga_data = fpgautils.threaded_fpga_operation(fpgas, 10, get_fpga_data)
for cnt, fpga_ in enumerate(fpgas):
    gbedata = fpga_data[fpga_.host]['gbe']
    for core in gbedata.keys():
        if core.startswith('test'):
            del(gbedata[core])

    gbe0 = gbedata.keys()[0]
    core0_regs = [key.replace(gbe0, 'gbe') for key in gbedata[gbe0].keys()]
    if cnt == 0:
        master_list = core0_regs[:]
    for core in gbedata:
        core_regs = [key.replace(core, 'gbe') for key in gbedata[core].keys()]
        if sorted(core0_regs) != sorted(core_regs):
            raise RuntimeError('Not all GBE cores for FPGA %s have the same support registers. Problem.', fpga_.host)
    fpga_headers.append(core0_regs)
    if numgbes < 1:
        raise RuntimeWarning('Host %s has no 10gbe cores', fpga.host)
    print '%s: found %i 10gbe core%s.' % (fpga.host, numgbes, '' if numgbes == 1 else 's')

if args.resetctrs:
    def reset_gbe_debug(fpga_):
        control_fields = fpga_.registers.control.field_names()
        if 'gbe_debug_rst' in control_fields:
            fpga_.registers.control.write(gbe_debug_rst='pulse')
        elif 'gbe_cnt_rst' in control_fields:
            fpga_.registers.control.write(gbe_cnt_rst='pulse')
        else:
            utils.threaded_fpga_function(fpgas, 10, 'disconnect')
            print control_fields
            raise RuntimeError('Could not find GBE debug reset field.')
    utils.threaded_fpga_operation(fpgas, 10, reset_gbe_debug)


def get_gbe_data(fpga):
    """
    Get 10gbe data counters from the fpga.
    """
    returndata = {}
    for gbecore in fpga.tengbes:
        returndata[gbecore.name] = gbecore.read_counters()
    return returndata


def get_tap_data(fpga):
    """
    What it says on the tin.
Exemplo n.º 22
0
parser.add_argument(
    '--hosts', dest='hosts', type=str, action='store', default='',
    help='comma-delimited list of hosts, or a corr2 config file')
parser.add_argument(
    '--prect', dest='prect', action='store_true', default=False,
    help='turn on or off the pre corner turn TVG')
parser.add_argument(
    '--loglevel', dest='log_level', action='store', default='',
    help='log level to use, default None, options INFO, DEBUG, ERROR')
args = parser.parse_args()

polltime = args.polltime

if args.log_level != '':
    import logging
    log_level = args.log_level.strip()
    try:
        logging.basicConfig(level=eval('logging.%s' % log_level))
    except AttributeError:
        raise RuntimeError('No such log level: %s' % log_level)

# make the fpgas
fpgas = utils.feng_script_get_fpgas(args)

# pre corner turn
fpgautils.threaded_fpga_operation(
    fpgas, 10, lambda fpga_: fpga_.registers.control.write(tvg_ct=args.prect))

fpgautils.threaded_fpga_function(fpgas, 10, 'disconnect')
# end
Exemplo n.º 23
0
    import logging
    log_level = args.log_level.strip()
    try:
        logging.basicConfig(level=eval('logging.%s' % log_level))
    except AttributeError:
        raise RuntimeError('No such log level: %s' % log_level)

if args.comms == 'katcp':
    HOSTCLASS = katcp_fpga.KatcpFpga
else:
    HOSTCLASS = dcp_fpga.DcpFpga

if 'CORR2INI' in os.environ.keys() and args.hosts == '':
    args.hosts = os.environ['CORR2INI']
hosts = utils.parse_hosts(args.hosts, section='fengine')
if len(hosts) == 0:
    raise RuntimeError('No good carrying on without hosts.')

# make the FPGA objects
fpgas = fpgautils.threaded_create_fpgas_from_hosts(HOSTCLASS, hosts)
fpgautils.threaded_fpga_function(fpgas, 10, 'get_system_information')

# pre corner turn
if args.prect:
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(tvg_ct=True))
else:
    fpgautils.threaded_fpga_operation(fpgas, 10, lambda fpga_: fpga_.registers.control.write(tvg_ct=False))

fpgautils.threaded_fpga_function(fpgas, 10, 'disconnect')
# end
Exemplo n.º 24
0
fpgas = fpgautils.threaded_create_fpgas_from_hosts(HOSTCLASS, hosts)
fpgautils.threaded_fpga_function(fpgas, 15, 'get_system_information')
snapshot_missing = []
for fpga_ in fpgas:
    if 'snap_adc0_ss' not in fpga_.snapshots.names():
        snapshot_missing.append(fpga_.host)
if len(snapshot_missing) > 0:
    print('The following hosts are missing the post-unpack snapshot. Bailing.'
    print(snapshot_missing
    exit_gracefully(None, None)

def get_data():
    # read the data
    snapdata_p0 = fpgautils.threaded_fpga_operation(fpgas, 10,
                                                    lambda fpga_: fpga_.snapshots.snap_adc0_ss.read(man_trig=True))
    snapdata_p1 = fpgautils.threaded_fpga_operation(fpgas, 10,
                                                    lambda fpga_: fpga_.snapshots.snap_adc1_ss.read(man_trig=True))
    try:
        for key, value in snapdata_p0.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p0 snap data from host %s' % key)
    except:
        print(snapdata_p0
        raise RuntimeError('Error getting p0 snap data')
    try:
        for key, value in snapdata_p1.items():
            if 'data' not in value.keys():
                raise RuntimeError('Did not get p1 snap data from host %s' % key)
    except:
        print(snapdata_p1
        raise RuntimeError('Error getting p1 snap data')
Exemplo n.º 25
0
if 'CORR2INI' in os.environ.keys() and args.hosts == '':
    args.hosts = os.environ['CORR2INI']
hosts = utils.parse_hosts(args.hosts, section='fengine')
if len(hosts) == 0:
    raise RuntimeError('No good carrying on without hosts.')

# create the devices and connect to them
fpgas = fpgautils.threaded_create_fpgas_from_hosts(HOSTCLASS, hosts)
fpgautils.threaded_fpga_function(fpgas, 15, 'get_system_information')

regs = ['spead_ctrs', 'reorder_ctrs']

if args.rstcnt:
    fpgautils.threaded_fpga_operation(fpgas, 10,
                                      target_function=(lambda fpga_:
                                                       fpga_.registers.control.write(cnt_rst='pulse',)))

if args.sysrst:
    fpgautils.threaded_fpga_operation(
        fpgas, 10, target_function=(lambda fpga_:
                                    fpga_.registers.control.write(sys_rst='pulse'),))

def checkregs(fpga_, necregs):
    freg_error = 0
    regnames = fpga_.registers.names()
    for necreg in necregs:
        if necreg not in regnames:
            freg_error += 1
    return freg_error > 0
regcheck = fpgautils.threaded_fpga_operation(fpgas, 10, target_function=(checkregs, (regs,)))
Exemplo n.º 26
0
if args.log_level != '':
    import logging
    log_level = args.log_level.strip()
    try:
        logging.basicConfig(level=eval('logging.%s' % log_level))
    except AttributeError:
        raise RuntimeError('No such log level: %s' % log_level)

# create the fpgas
fpgas = utils.xeng_script_get_fpgas(args)

if args.rstcnt:
    if 'unpack_cnt_rst' in fpgas[0].registers.control.field_names():
        fpgautils.threaded_fpga_operation(
            fpgas, 10, lambda fpga_:
            fpga_.registers.control.write(cnt_rst='pulse',
                                          unpack_cnt_rst='pulse'))
    else:
        fpgautils.threaded_fpga_operation(
            fpgas, 10, lambda fpga_:
            fpga_.registers.control.write(cnt_rst='pulse', up_cnt_rst='pulse'))


def get_fpga_data(fpga):
    return fpga.get_rx_reorder_status()


def exit_gracefully(sig, frame):
    print(sig)
    print(frame)
    scroll.screen_teardown()
Exemplo n.º 27
0
def get_data():
    # read the data
    snapdata_p0 = fpgautils.threaded_fpga_operation(fpgas, 10,
                                                    lambda fpga_: fpga_.snapshots.snap_adc0_ss.read(man_trig=True))