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
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
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
# 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()
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
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)
'' 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.
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:
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
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
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")
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
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'), )
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
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
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.
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
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
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')
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,)))
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()
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))