chip 14 gm testing
authorDan White <dan@whiteaudio.com>
Sun, 7 Apr 2013 04:50:03 +0000 (23:50 -0500)
committerDan White <dan@whiteaudio.com>
Sun, 7 Apr 2013 04:50:03 +0000 (23:50 -0500)
20 files changed:
python-lib/calibrate.py
python-lib/slope-arb.py
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.npz [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.pdf [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.yaml [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.npz [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.pdf [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.yaml [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.npz [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.pdf [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.yaml [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.npz [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.pdf [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.yaml [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.npz [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.pdf [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.yaml [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.npz [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.pdf [new file with mode: 0644]
python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.yaml [new file with mode: 0644]

index 84fb3065f51ca97e6c5a41eaff5dd20c932bff6e..cca37848a8625ee8d8048745d26e11a41dffd619 100644 (file)
@@ -140,7 +140,7 @@ def secant_opt(func, x0, limits, elements=None, x1scale=0.1, maxiter=25, verbose
 
         max_step = r * 2**(-niter + 1)
         ia = find(abs(dp) > max_step)
-        if verbose and (len(ia) > 0): print 'limiting max steps:', ia
+        #if verbose and (len(ia) > 0): print 'limiting max steps:', ia
         dp.flat[ia] = sign(dp.flat[ia]) * max_step
 
         #force a +-1 step
@@ -439,6 +439,63 @@ def arb_offsets(values, converged, mux_offset, verbose=True):
     return outs
 
 
+def a01_zero():
+    arb.h[0].otaA.zero = 1
+    arb.h[0].otaB.zero = 1
+    arb.write()
+    sleep(0.01)
+    arb.h[0].otaA.zero = 0
+    arb.h[0].otaB.zero = 0
+    arb.write()
+
+def a01_offsets(x, c, verbose=True):
+    #xi = int(x)
+    arb.h[0].otaA.offset = int(x[0])
+    arb.h[0].otaB.offset = int(x[1])
+    arb.write()
+    sleep(MUX_CAL_DELAY)
+
+    ARB_DELAY = 1.0
+
+    a01_zero()
+    sleep(ARB_DELAY)
+
+    mv = [0.0, 0.0]
+    for j in (0,):
+        adc.mux(6+j)
+        adc.read()
+        values = []
+        for i in range(N_SAMPLES):
+            values.append(offset2signed(adc.read(), 16))
+            sleep(SAMPLE_DELAY)
+        mv[j] = mean(values)
+    if verbose: print tpx(x[0]), tplot(mv[0])
+        
+    return array(mv)
+
+def a0_offset(x, c, verbose=True):
+    #xi = int(x)
+    arb.h[0].otaA.offset = int(x[0])
+    arb.write()
+    sleep(MUX_CAL_DELAY)
+
+    ARB_DELAY = 1.0
+
+    a01_zero()
+    sleep(ARB_DELAY)
+
+    mv = [0.0]
+    for j in (0,):
+        adc.mux(6+j)
+        adc.read()
+        values = []
+        for i in range(N_SAMPLES):
+            values.append(offset2signed(adc.read(), 16))
+            sleep(SAMPLE_DELAY)
+        mv[j] = mean(values)
+    if verbose: print tpx(x[0]), tplot(mv[0])
+        
+    return array(mv)
 
 
 # TODO: commented out, ensure ADC is init'ed in the right places
@@ -621,7 +678,60 @@ def calibrate(name, elements=None, verbose=True):
         for i,mode in enumerate(old_mode):
             amux.ota[i].mode = mode
         amux.write()
+    #
+    # Secondary direct arb.h[0].otaA ==> a0
+    #
+    elif name == 'a0':
+        #adc setup
+        adc.reset()
+        adc.triggerMode(adc.MODE_IDLE)
+        adc.average(16)
+        adc.convst_spi(1)
+        adc.channelMode(6, adc.SE) #even channel only
+        adc.channelGain(6, 1)
+        adc.channelGain(7, 1)
+        adc.mux(6)
+        adc.triggerMode(adc.MODE_MANUAL_MANUAL)
+
+        #amux affects operation, set to a consistent state
+        amux.otaA.mode = amux.otaB.mode = amux.otaA.CAL_CMP
+        amux.otaA.fast = amux.otaB.fast = 0
+        amux.otaA.gain = amux.otaB.gain = 0
+        amux.selA = amux.selB = 16
+        amux.write()
+
+        #old config
+        old_cint = [arb.h[0].ota[i].cint for i in range(2)]
+
+        for i in range(2):
+            arb.h[0].ota[i].cint = 1
+        arb.write()
 
+        def func(values, converging):
+            out = a0_offset(values, converging, verbose)
+            #outA = amux_a_offset(values[0], converging[0], verbose)
+            #outB = amux_b_offset(values[1], converging[1], verbose)
+            #out = zeros((2,))
+            #out[0] = outA
+            #out[1] = outB
+            return out
+
+        #setup initial guess, just use the current values
+        x0 = zeros((1,), dtype=int)
+        for i in range(1):
+            x0[i] = int(arb.h[0].ota[i].offset)
+
+        offsets, stats = secant_opt(func, x0, limits,
+                                    elements=elements,
+                                    verbose=verbose,
+                                    maxiter=10)
+        #put cint back
+        for i in range(1):
+            arb.h[0].ota[i].cint = old_cint[i]
+        arb.write()
+    #
+    # OOPS
+    #
     else:
         print 'ERROR: unknown name %s' % name
 
index 80188918aab503521392ed4470f31fc39d1d6c92..0b4e685671d0df272786bc96c3c4e6dadd1b2fa1 100644 (file)
@@ -1,8 +1,58 @@
+#!/usr/bin/env python
 
+from time import sleep
+
+import IPython
+from pylab import *
+
+import devboard as dev
+dev.init_devboard(1)
+
+# requires devboard be already initialized
+#import calibrate as cal
+import calibrate
+cal = calibrate.calibrate
+
+
+# ?are we already under an IPython shell?
+in_ipython = IPython.core.interactiveshell.InteractiveShell.initialized()
+
+# ?be interactive afterwards?
+do_shell = True
+
+
+chain = dev.chain
+mux = dev.mux
+
+arb = dev.arb
+amux = dev.amux
+
+a0 = arb.h[0]
+
+vina = dev.dac.vina
+vinb = dev.dac.vinb
+vcmi = dev.dac.vcmi
+
+dac = dev.dac
+adc = dev.adc
+
+
+amux.otaA.mode = amux.otaB.mode = amux.otaA.CAL_CMP
+amux.otaA.fast = amux.otaB.fast = 0
+amux.otaA.gain = amux.otaB.gain = 0
+amux.selA = amux.selB = 16
 
-amux.otaA.mode = amux.otaA.CAL_CMP
-amux.otaB.mode = amux.otaB.CAL_CMP
 amux.write()
+#########################
+
+
+
+
+
+
+
+
+
 
 a0.otaA.fast = 0
 a0.otaA.gain = 15
@@ -17,6 +67,50 @@ a0.otaB.offset = 118
 arb.write()
 
 
+def z():
+    a0.otaA.zero = 1
+    a0.otaB.zero = 1
+    arb.write()
+    sleep(0.01)
+    a0.otaA.zero = 0
+    a0.otaB.zero = 0
+    arb.write()
+
+
+def offset(v):
+    a0.otaA.offset = v
+    a0.otaB.offset = v
+    arb.write()
+    z()
+
+
+
+vios = 0.0
+vcmi(1.25)
+def cal_vios(v):
+    global vios
+    vios = v
+    vina(vcmi() + v)
+    vinb(vcmi() - v)
+    z()
+
+print '***************************************************************'
+print '***************************************************************'
+print '**** please calibrate a0.otaA, then exit the inner interp *****'
+print '**** please calibrate a0.otaA, then exit the inner interp *****'
+print '**** please calibrate a0.otaA, then exit the inner interp *****'
+print '**** please calibrate a0.otaA, then exit the inner interp *****'
+print '***************************************************************'
+print '***************************************************************'
+IPython.embed()
+
+
+#print '*** calibrating a0 and a1 ***'
+#cal('a0')
+
+
+
+
 
 
 #vina = dev.dac.vina
@@ -26,61 +120,58 @@ arb.write()
 #arb = dev.arb
 #a0 = arb.h[0]
 
+interactive(True)
 
 
-while True:
-    vcm = 1.25
+for g in (15,):
+    print
+    print '***********************************************************'
+    print '**** gain =', g
+    print '***********************************************************'
+    a0.otaA.fast = 0
+    a0.otaA.gain = g
+    a0.otaA.cint = 1
+    a0.otaA.offset = 118
 
-    dev.adc.triggerMode(dev.adc.MODE_IDLE)
-    dev.adc.channelMode(6, dev.adc.SE) #even channel only
-    dev.adc.channelGain(6, 1)
-    dev.adc.channelGain(7, 1)
-    dev.adc.mux(6)
-    dev.adc.triggerMode(dev.adc.MODE_MANUAL_MANUAL)
-    dev.adc.read()
+    a0.otaB.fast = 0
+    a0.otaB.gain = g
+    a0.otaB.cint = 1
+    a0.otaB.offset = 118
 
-    vout = []
-    vd = []
-    tint = []
+    arb.write()
 
-    #for i in range(80,130,10):
-    if 1:
-        #print '****'
-        #print '* offset=', i
+    cal('a0')
 
-        #a0.otaA.offset = i
-        #a0.otaB.offset = i
+    while True:
+        dev.adc.triggerMode(dev.adc.MODE_IDLE)
+        dev.adc.channelMode(6, dev.adc.SE) #even channel only
+        dev.adc.channelGain(6, 1)
+        dev.adc.channelGain(7, 1)
+        dev.adc.mux(6)
+        dev.adc.triggerMode(dev.adc.MODE_MANUAL_MANUAL)
+        dev.adc.read()
 
-        #a0.otaA.cint = 1
-        #a0.otaB.cint = 1
+        vout = []
+        vd = []
+        tint = []
 
-        #a0.otaA.fast = 1
-        #a0.otaB.fast = 1
-
-        #a0.otaA.gain = 15
-        #a0.otaB.gain = 15
-
-        #arb.write()
-
-        #d = -2.5
+        #for i in range(80,130,10):
         ti = 1.0
-        timax = 4.1
-        #while d >= -2.5 and d <= 2.5:
-        for d in arange(-2500e-3, 2500e-3+1e-3, 10e-3):
+        timax = 2.1
+        for d in arange(-2500e-3, 2500e-3+1e-3, 20e-3):
             print d*1e3
             vd.append(d)
 
-            #for ti in (0.4, 0.2, 0.1, 0.05, 0.025):
             while True:
                 a0.otaA.zero=1; arb.write(); a0.otaA.zero=0; arb.write()
                 dev.adc.read()
                 v0 = dev.adc.read() * (2.5 / 2**16)
 
-                vina(vcm + d/2)
-                vinb(vcm - d/2)
+                vina(vcmi() + vios + d/2)
+                vinb(vcmi() - vios - d/2)
                 sleep(ti)
-                vina(vcm)
-                vinb(vcm)
+                vina(vcmi() + vios)
+                vinb(vcmi() - vios)
 
                 dev.adc.read()
                 v1 = dev.adc.read() * (2.5 / 2**16)
@@ -91,9 +182,9 @@ while True:
                 print ti, vo
 
                 tiold = ti
-                if abs(vo) < 0.5:
+                if abs(vo) < 0.45:
                     ti *= 2.0
-                elif abs(vo) > 1.1:
+                elif abs(vo) > 1.0:
                     ti *= 0.5
                 else:
                     break
@@ -109,38 +200,56 @@ while True:
             
             #sleep(0.1)
 
-    break
-    
-vout = array(vout)
-vd = array(vd)
-tint = array(tint)
+        break
+        
+    vout = array(vout)
+    vd = array(vd)
+    tint = array(tint)
+
+    def mkgm(vd, vout, tint, Cint=50e-12):
+        dvout = diff(vout / tint)
+        dvd = diff(vd)
+        gm = Cint * dvout / dvd
+        return (vd[:-1], gm)
+
 
+    figure()
+    suptitle('Chip #14, arb0\nVios = %.3f, offset = %i, gain = %i' % (vios, a0.otaA.offset, g))
+    subplot(221)
+    plot(vd, vout, '.')
+    ylim((-1.25, 1.25))
 
-figure()
-suptitle('Vout*tint vs. vd\nChip #14, arb0')
-subplot(221)
-plot(vd, vout, 'o')
+    subplot(222)
+    plot(vd, vout/tint, '.')
+    ylim((-6.0, 6.0))
 
-subplot(222)
-plot(vd, vout/tint, 'o')
+    subplot(223)
+    plot(vd, tint, '.')
+    ylim((0, 4.5))
 
-subplot(223)
-plot(vd, tint, 'o')
-ylim([0, 1.2*tint.max()])
+    subplot(224)
+    gm_easy = 50e-12 * vout / (vd * tint)
+    #plot(vd, gm_easy, '+')
+    #i = find(gm_easy == gm_easy.max())[0]
+    #ylim((0, 1.1*max(gm_easy[i-1], gm_easy[i+1])))
+    vdgm, dgm = mkgm(vd, vout, tint)
+    plot(vdgm, dgm, '.')
+    #ylim((0.0, dgm.max()))
+    ylim((0.0, 300e-12))
 
-subplot(224)
-gm = 50e-12 * vout / (vd * tint)
-plot(vd, gm, 'o')
-i = find(gm == gm.max())[0]
-ylim((0, 1.1*max(gm[i-1], gm[i+1])))
 
+    import datetime as dt
+    datestr = dt.datetime.now().strftime('%Y-%m-%d_%H%M%S')
 
-import datetime as dt
-datestr = dt.datetime.now().strftime('%Y-%m-%d_%H%M%S')
+    savefig('arb0-%s.pdf' % datestr)
+    savez('arb0-%s.npz' % datestr, vout=vout, vd=vd, tint=tint)
+    dev.save_config('arb0-%s.yaml' % datestr)
 
-savefig('arb0-%s.pdf' % datestr)
-savez('arb0-%s.npz' % datestr, vout=vout, vd=vd, tint=tint)
-dev.save_config('arb0-%s.yaml' % datestr)
 
 
+##############################################################################
+# drop into an IPython shell
+#
+if do_shell and not in_ipython:
+    IPython.embed()
 
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.npz b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.npz
new file mode 100644 (file)
index 0000000..99b7dc6
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.npz differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.pdf b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.pdf
new file mode 100644 (file)
index 0000000..a50c90b
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.pdf differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.yaml b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_225902.yaml
new file mode 100644 (file)
index 0000000..83103a3
--- /dev/null
@@ -0,0 +1,335 @@
+amux:
+  csname: chain1_mux
+  otaA: {fast: 0, gain: 0, mode: 4, offset: 0}
+  otaB: {fast: 0, gain: 0, mode: 4, offset: 0}
+  selA: 16
+  selB: 16
+arb:
+  csname: chain1_conf
+  harmonics:
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 1, fast: 0, gain: 15, offset: 105, se: 0, zero: 0}
+    otaB: {cint: 1, fast: 0, gain: 15, offset: 118, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  length: 16
+chain:
+  csname: chain0_conf
+  harmonics:
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 46, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 110, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 108, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 56, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 85, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 59, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 89, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 80, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 118, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 100, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 68, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 94, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 60, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 97, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 126, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 72, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 90, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 58, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 87, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 117, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 96, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 123, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 83, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  length: 48
+dac: {cs: dac, vbias_buf: 0.0, vbias_core: 0.0, vcmi: 1.24998935546875, vina: 1.2919711669921874,
+  vinb: 1.2080075439453124}
+date: 2013-04-06_225903
+i2c: {delay: 0.0001, interface: 3, pid: 24593, scl: 0, sda: 1, timeout: 100, vid: 1027}
+ibias: {addr: 0, gpo1: 0, gpo2: 0, posA: 128, posB: 128}
+isupply: {AVdd_atoi: 0.0018875022460937499, DVdd_ns430: 0.00037701193359374996, Vdd_digi: 0.0201329501953125,
+  Vdd_ns430: 0.02017264208984375}
+mux:
+  csname: chain0_mux
+  otaA: {fast: 1, gain: 15, mode: 2, offset: 44}
+  otaB: {fast: 1, gain: 15, mode: 2, offset: 81}
+  selA: 48
+  selB: 48
+spi0:
+  cs:
+    _idle: [-1, 200]
+    _mask: [-1, 56]
+    adc: [1, 232]
+    convst: [1, 248]
+    dac: [1, 216]
+    flash: [3, 192]
+  freq: 1000000.0
+  interface: 1
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 249
+  vid: 1027
+spi1:
+  cs:
+    _idle: [-1, 248]
+    _mask: [-1, 248]
+    chain0_conf: [0, 240]
+    chain0_mux: [0, 232]
+    chain1_conf: [0, 216]
+    chain1_mux: [0, 184]
+  freq: 1000000.0
+  interface: 2
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 184
+  vid: 1027
+v430:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
+vatoi:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.npz b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.npz
new file mode 100644 (file)
index 0000000..40afe0e
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.npz differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.pdf b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.pdf
new file mode 100644 (file)
index 0000000..3cdce2d
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.pdf differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.yaml b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_230721.yaml
new file mode 100644 (file)
index 0000000..f9b2a41
--- /dev/null
@@ -0,0 +1,335 @@
+amux:
+  csname: chain1_mux
+  otaA: {fast: 0, gain: 0, mode: 4, offset: 0}
+  otaB: {fast: 0, gain: 0, mode: 4, offset: 0}
+  selA: 16
+  selB: 16
+arb:
+  csname: chain1_conf
+  harmonics:
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 1, fast: 0, gain: 15, offset: 110, se: 0, zero: 0}
+    otaB: {cint: 1, fast: 0, gain: 15, offset: 118, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  length: 16
+chain:
+  csname: chain0_conf
+  harmonics:
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 46, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 110, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 108, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 56, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 85, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 59, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 89, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 80, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 118, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 100, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 68, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 94, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 60, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 97, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 126, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 72, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 90, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 58, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 87, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 117, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 96, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 123, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 83, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  length: 48
+dac: {cs: dac, vbias_buf: 0.0, vbias_core: 0.0, vcmi: 1.24998935546875, vina: 1.278994970703125,
+  vinb: 1.2209837402343748}
+date: 2013-04-06_230723
+i2c: {delay: 0.0001, interface: 3, pid: 24593, scl: 0, sda: 1, timeout: 100, vid: 1027}
+ibias: {addr: 0, gpo1: 0, gpo2: 0, posA: 128, posB: 128}
+isupply: {AVdd_atoi: 0.001862771142578125, DVdd_ns430: 0.00037243209960937496, Vdd_digi: 0.0198032021484375,
+  Vdd_ns430: 0.019806255371093748}
+mux:
+  csname: chain0_mux
+  otaA: {fast: 1, gain: 15, mode: 2, offset: 44}
+  otaB: {fast: 1, gain: 15, mode: 2, offset: 81}
+  selA: 48
+  selB: 48
+spi0:
+  cs:
+    _idle: [-1, 200]
+    _mask: [-1, 56]
+    adc: [1, 232]
+    convst: [1, 248]
+    dac: [1, 216]
+    flash: [3, 192]
+  freq: 1000000.0
+  interface: 1
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 249
+  vid: 1027
+spi1:
+  cs:
+    _idle: [-1, 248]
+    _mask: [-1, 248]
+    chain0_conf: [0, 240]
+    chain0_mux: [0, 232]
+    chain1_conf: [0, 216]
+    chain1_mux: [0, 184]
+  freq: 1000000.0
+  interface: 2
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 184
+  vid: 1027
+v430:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
+vatoi:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.npz b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.npz
new file mode 100644 (file)
index 0000000..e5db1c5
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.npz differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.pdf b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.pdf
new file mode 100644 (file)
index 0000000..2c199d5
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.pdf differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.yaml b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_231525.yaml
new file mode 100644 (file)
index 0000000..4b90032
--- /dev/null
@@ -0,0 +1,335 @@
+amux:
+  csname: chain1_mux
+  otaA: {fast: 0, gain: 0, mode: 4, offset: 0}
+  otaB: {fast: 0, gain: 0, mode: 4, offset: 0}
+  selA: 16
+  selB: 16
+arb:
+  csname: chain1_conf
+  harmonics:
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 1, fast: 0, gain: 15, offset: 116, se: 0, zero: 0}
+    otaB: {cint: 1, fast: 0, gain: 15, offset: 118, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  length: 16
+chain:
+  csname: chain0_conf
+  harmonics:
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 46, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 110, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 108, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 56, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 85, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 59, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 89, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 80, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 118, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 100, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 68, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 94, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 60, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 97, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 126, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 72, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 90, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 58, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 87, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 117, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 96, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 123, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 83, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  length: 48
+dac: {cs: dac, vbias_buf: 0.0, vbias_core: 0.0, vcmi: 1.24998935546875, vina: 1.253996710205078,
+  vinb: 1.2459820007324218}
+date: 2013-04-06_231527
+i2c: {delay: 0.0001, interface: 3, pid: 24593, scl: 0, sda: 1, timeout: 100, vid: 1027}
+ibias: {addr: 0, gpo1: 0, gpo2: 0, posA: 128, posB: 128}
+isupply: {AVdd_atoi: 0.00195711572265625, DVdd_ns430: 0.00039154527343749994, Vdd_digi: 0.02011157763671875,
+  Vdd_ns430: 0.020154322753906252}
+mux:
+  csname: chain0_mux
+  otaA: {fast: 1, gain: 15, mode: 2, offset: 44}
+  otaB: {fast: 1, gain: 15, mode: 2, offset: 81}
+  selA: 48
+  selB: 48
+spi0:
+  cs:
+    _idle: [-1, 200]
+    _mask: [-1, 56]
+    adc: [1, 232]
+    convst: [1, 248]
+    dac: [1, 216]
+    flash: [3, 192]
+  freq: 1000000.0
+  interface: 1
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 249
+  vid: 1027
+spi1:
+  cs:
+    _idle: [-1, 248]
+    _mask: [-1, 248]
+    chain0_conf: [0, 240]
+    chain0_mux: [0, 232]
+    chain1_conf: [0, 216]
+    chain1_mux: [0, 184]
+  freq: 1000000.0
+  interface: 2
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 184
+  vid: 1027
+v430:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
+vatoi:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.npz b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.npz
new file mode 100644 (file)
index 0000000..be54f56
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.npz differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.pdf b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.pdf
new file mode 100644 (file)
index 0000000..e2db283
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.pdf differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.yaml b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233301.yaml
new file mode 100644 (file)
index 0000000..f7ae2c2
--- /dev/null
@@ -0,0 +1,335 @@
+amux:
+  csname: chain1_mux
+  otaA: {fast: 0, gain: 0, mode: 4, offset: 0}
+  otaB: {fast: 0, gain: 0, mode: 4, offset: 0}
+  selA: 16
+  selB: 16
+arb:
+  csname: chain1_conf
+  harmonics:
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 1, fast: 0, gain: 15, offset: 100, se: 0, zero: 0}
+    otaB: {cint: 1, fast: 0, gain: 15, offset: 118, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  length: 16
+chain:
+  csname: chain0_conf
+  harmonics:
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 46, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 110, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 108, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 56, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 85, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 59, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 89, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 80, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 118, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 100, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 68, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 94, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 60, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 97, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 126, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 72, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 90, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 58, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 87, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 117, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 96, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 123, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 83, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  length: 48
+dac: {cs: dac, vbias_buf: 0.0, vbias_core: 0.0, vcmi: 1.24998935546875, vina: 1.3149848327636717,
+  vinb: 1.184993878173828}
+date: 2013-04-06_233303
+i2c: {delay: 0.0001, interface: 3, pid: 24593, scl: 0, sda: 1, timeout: 100, vid: 1027}
+ibias: {addr: 0, gpo1: 0, gpo2: 0, posA: 128, posB: 128}
+isupply: {AVdd_atoi: 0.00178735654296875, DVdd_ns430: 0.000357532373046875, Vdd_digi: 0.020664210937499997,
+  Vdd_ns430: 0.020648944824218748}
+mux:
+  csname: chain0_mux
+  otaA: {fast: 1, gain: 15, mode: 2, offset: 44}
+  otaB: {fast: 1, gain: 15, mode: 2, offset: 81}
+  selA: 48
+  selB: 48
+spi0:
+  cs:
+    _idle: [-1, 200]
+    _mask: [-1, 56]
+    adc: [1, 232]
+    convst: [1, 248]
+    dac: [1, 216]
+    flash: [3, 192]
+  freq: 1000000.0
+  interface: 1
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 249
+  vid: 1027
+spi1:
+  cs:
+    _idle: [-1, 248]
+    _mask: [-1, 248]
+    chain0_conf: [0, 240]
+    chain0_mux: [0, 232]
+    chain1_conf: [0, 216]
+    chain1_mux: [0, 184]
+  freq: 1000000.0
+  interface: 2
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 184
+  vid: 1027
+v430:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
+vatoi:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.npz b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.npz
new file mode 100644 (file)
index 0000000..8c3f03e
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.npz differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.pdf b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.pdf
new file mode 100644 (file)
index 0000000..635da0d
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.pdf differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.yaml b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_233926.yaml
new file mode 100644 (file)
index 0000000..8832935
--- /dev/null
@@ -0,0 +1,335 @@
+amux:
+  csname: chain1_mux
+  otaA: {fast: 0, gain: 0, mode: 4, offset: 0}
+  otaB: {fast: 0, gain: 0, mode: 4, offset: 0}
+  selA: 16
+  selB: 16
+arb:
+  csname: chain1_conf
+  harmonics:
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 1, fast: 0, gain: 15, offset: 120, se: 0, zero: 0}
+    otaB: {cint: 1, fast: 0, gain: 15, offset: 118, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  length: 16
+chain:
+  csname: chain0_conf
+  harmonics:
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 46, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 110, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 108, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 56, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 85, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 59, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 89, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 80, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 118, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 100, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 68, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 94, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 60, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 97, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 126, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 72, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 90, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 58, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 87, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 117, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 96, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 123, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 83, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  length: 48
+dac: {cs: dac, vbias_buf: 0.0, vbias_core: 0.0, vcmi: 1.24998935546875, vina: 1.2369749938964842,
+  vinb: 1.2630037170410156}
+date: 2013-04-06_233930
+i2c: {delay: 0.0001, interface: 3, pid: 24593, scl: 0, sda: 1, timeout: 100, vid: 1027}
+ibias: {addr: 0, gpo1: 0, gpo2: 0, posA: 128, posB: 128}
+isupply: {AVdd_atoi: 0.0018348341552734374, DVdd_ns430: 0.00036724162109375, Vdd_digi: 0.019806255371093748,
+  Vdd_ns430: 0.019809308593749998}
+mux:
+  csname: chain0_mux
+  otaA: {fast: 1, gain: 15, mode: 2, offset: 44}
+  otaB: {fast: 1, gain: 15, mode: 2, offset: 81}
+  selA: 48
+  selB: 48
+spi0:
+  cs:
+    _idle: [-1, 200]
+    _mask: [-1, 56]
+    adc: [1, 232]
+    convst: [1, 248]
+    dac: [1, 216]
+    flash: [3, 192]
+  freq: 1000000.0
+  interface: 1
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 249
+  vid: 1027
+spi1:
+  cs:
+    _idle: [-1, 248]
+    _mask: [-1, 248]
+    chain0_conf: [0, 240]
+    chain0_mux: [0, 232]
+    chain1_conf: [0, 216]
+    chain1_mux: [0, 184]
+  freq: 1000000.0
+  interface: 2
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 184
+  vid: 1027
+v430:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
+vatoi:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.npz b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.npz
new file mode 100644 (file)
index 0000000..a04d442
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.npz differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.pdf b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.pdf
new file mode 100644 (file)
index 0000000..4f81dfe
Binary files /dev/null and b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.pdf differ
diff --git a/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.yaml b/python-lib/test-data/chip14/arb0/vios-offset-gm/arb0-2013-04-06_234532.yaml
new file mode 100644 (file)
index 0000000..f3c2a41
--- /dev/null
@@ -0,0 +1,335 @@
+amux:
+  csname: chain1_mux
+  otaA: {fast: 0, gain: 0, mode: 4, offset: 0}
+  otaB: {fast: 0, gain: 0, mode: 4, offset: 0}
+  selA: 16
+  selB: 16
+arb:
+  csname: chain1_conf
+  harmonics:
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 1, fast: 0, gain: 15, offset: 125, se: 0, zero: 0}
+    otaB: {cint: 1, fast: 0, gain: 15, offset: 118, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  - cal: 0
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+    otaB: {cint: 0, fast: 0, gain: 0, offset: 0, se: 0, zero: 0}
+  length: 16
+chain:
+  csname: chain0_conf
+  harmonics:
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 46, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 110, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 108, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 56, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 85, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 59, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 89, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 80, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 118, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 100, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 111, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 68, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 94, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 120, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 60, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 97, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 109, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 81, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 126, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 95, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 72, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 90, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 103, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 116, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 78, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 58, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 91, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 87, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 117, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 57, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 96, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 101, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 123, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 79, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 83, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 102, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 112, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 127, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 124, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 64, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 70, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 86, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 93, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 88, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 92, se: 1, zero: 0}
+  - cal: 1
+    nco: {fcw: 0, rst: 0}
+    otaA: {cint: 0, fast: 1, gain: 0, offset: 106, se: 1, zero: 0}
+    otaB: {cint: 0, fast: 1, gain: 0, offset: 63, se: 1, zero: 0}
+  length: 48
+dac: {cs: dac, vbias_buf: 0.0, vbias_core: 0.0, vcmi: 1.24998935546875, vina: 1.2169763854980469,
+  vinb: 1.2830023254394531}
+date: 2013-04-06_234534
+i2c: {delay: 0.0001, interface: 3, pid: 24593, scl: 0, sda: 1, timeout: 100, vid: 1027}
+ibias: {addr: 0, gpo1: 0, gpo2: 0, posA: 128, posB: 128}
+isupply: {AVdd_atoi: 0.0019819994873046874, DVdd_ns430: 0.00039694947753906245, Vdd_digi: 0.0201329501953125,
+  Vdd_ns430: 0.02013600341796875}
+mux:
+  csname: chain0_mux
+  otaA: {fast: 1, gain: 15, mode: 2, offset: 44}
+  otaB: {fast: 1, gain: 15, mode: 2, offset: 81}
+  selA: 48
+  selB: 48
+spi0:
+  cs:
+    _idle: [-1, 200]
+    _mask: [-1, 56]
+    adc: [1, 232]
+    convst: [1, 248]
+    dac: [1, 216]
+    flash: [3, 192]
+  freq: 1000000.0
+  interface: 1
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 249
+  vid: 1027
+spi1:
+  cs:
+    _idle: [-1, 248]
+    _mask: [-1, 248]
+    chain0_conf: [0, 240]
+    chain0_mux: [0, 232]
+    chain1_conf: [0, 216]
+    chain1_mux: [0, 184]
+  freq: 1000000.0
+  interface: 2
+  latency: 1
+  pid: 24593
+  pindir: 251
+  pinstate: 184
+  vid: 1027
+v430:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]
+vatoi:
+  addr: 2
+  aliases: {va: vdigi, vb: avdd}
+  gpo1: 0
+  gpo2: 0
+  posA: 201
+  posB: 159
+  va: 1.2008223529411763
+  va_range: [0.5015, 1.3887]
+  vb: 2.5009129411764706
+  vb_range: [1.9552, 2.8304]