def check_core_alignment(r,cores=4):
    adc.set_spi_register(r,0,0x05+0x80,0) #use counter
    adc.set_test_mode(r, 0)
    adc.sync_adc(r,zdok_0=True,zdok_1=True)
    test_vec = np.array(adc.get_test_vector(r, ['snapshot_adc0']))
    #for i in range(1):
    #    for core in range(cores):
    #        print "%3d"%test_vec[core,i],
    #    print ''
    s = test_vec[:,0]
    if np.any(s==255): # Lazy way to make sure we aren't looking at a wrapping section of the counter
        s = test_vec[100]
    offset = np.min(s) - s #these are the relative arrival times. i.e. -1 means arrival is one clock too soon
    return offset
    score = np.zeros([n_bits,n_delays-max_zeros+1])
    for bit in range(n_bits):
        score[bit] = np.convolve(np.ones(max_zeros), d[bit,:], mode='valid')

    for delay in range(n_delays-max_zeros+1):
        print "DELAY %2d:" %delay,
        for bit in range(n_bits):
            print "%4d"%score[bit,delay],
        print ''

ROACH = '192.168.0.111'

r = corr.katcp_wrapper.FpgaClient(ROACH)
time.sleep(0.1)

adc.set_spi_register(r,0,0x05+0x80,1) #use strobing test mode
adc.set_test_mode(r, 0)
adc.set_test_mode(r, 1)
adc.sync_adc(r,zdok_0=True,zdok_1=False)

BITS = 8
DELAY_RANGE = 32
CORES = 4
glitches = np.zeros([CORES,BITS,DELAY_RANGE])
for delay in range(DELAY_RANGE):
    print "setting delay %d"%(delay)
    set_io_delay(r,0,0,delay)
    set_io_delay(r,0,1,delay)
    set_io_delay(r,0,2,delay)
    set_io_delay(r,0,3,delay)
    test_vec = np.array(adc.get_test_vector(r, ['snapshot_adc0']))
    for bit in range(n_bits):
        score[bit] = np.convolve(np.ones(max_zeros), d[bit, :], mode='valid')

    for delay in range(n_delays - max_zeros + 1):
        print "DELAY %2d:" % delay,
        for bit in range(n_bits):
            print "%4d" % score[bit, delay],
        print ''


ROACH = '192.168.0.111'

r = corr.katcp_wrapper.FpgaClient(ROACH)
time.sleep(0.1)

adc.set_spi_register(r, 0, 0x05 + 0x80, 1)  #use strobing test mode
adc.set_test_mode(r, 0)
adc.set_test_mode(r, 1)
adc.sync_adc(r, zdok_0=True, zdok_1=False)

BITS = 8
DELAY_RANGE = 32
CORES = 4
glitches = np.zeros([CORES, BITS, DELAY_RANGE])
for delay in range(DELAY_RANGE):
    print "setting delay %d" % (delay)
    set_io_delay(r, 0, 0, delay)
    set_io_delay(r, 0, 1, delay)
    set_io_delay(r, 0, 2, delay)
    set_io_delay(r, 0, 3, delay)
    test_vec = np.array(adc.get_test_vector(r, ['snapshot_adc0']))
import numpy as np
import corr
import adc5g as adc
import time
import struct
import sys

ROACH = '192.168.0.111'

r = corr.katcp_wrapper.FpgaClient(ROACH)
time.sleep(0.1)

adc.set_spi_register(r, 0, 0x05 + 0x80, 0)  #use counter mode
adc.set_test_mode(r, 0)
adc.set_test_mode(r, 1)
adc.sync_adc(r, zdok_0=True, zdok_1=False)

time.sleep(0.5)

Fpercore = 5. / 4.  #GHz
i = 0

r.write_int('rst', 1)
r.write_int('rst', 0)

CORES = 4
glitches = np.zeros(CORES)
start_time = time.time()
while (True):
    for core in range(CORES):
        glitches[core] = r.read_uint('glitch_cnt%d' % core)
import numpy as np
import corr
import adc5g as adc
import time
import struct
import sys

ROACH = "192.168.0.111"

r = corr.katcp_wrapper.FpgaClient(ROACH)
time.sleep(0.1)

adc.set_spi_register(r, 0, 0x05 + 0x80, 0)  # use counter mode
adc.set_test_mode(r, 0)
adc.set_test_mode(r, 1)
adc.sync_adc(r, zdok_0=True, zdok_1=False)

time.sleep(0.5)

Fpercore = 5.0 / 4.0  # GHz
i = 0

r.write_int("rst", 1)
r.write_int("rst", 0)

CORES = 4
glitches = np.zeros(CORES)
start_time = time.time()
while True:
    for core in range(CORES):
        glitches[core] = r.read_uint("glitch_cnt%d" % core)