Esempio n. 1
0
class Test():
    def __init__(self):
        self.verbose = True
        self.u = katcp_wrapper.FpgaClient('roach2')
        print 'Connected...'
        time.sleep(1)
        self.u.progdev('tclk_2012_Oct_15_1635.bof')
        print 'Programmed...'
        self.s = SPI(self.u)

        self.tap = 0

        ## Make sure that SPI interface is flushed
        ## and initialize
        self.start()
        
    def reset(self):
        self.s.write(0x00,0x0001) # reset

    def select(self, chip):
        self.s.select(chip)

    def power_cycle(self):
        self.s.write(0x0f,0x0200) # Powerdown
        self.s.write(0x0f,0x0000) # Powerup

    def start(self):
        print 'Beginning ADC power cycling'

        print 'Resetting ADC'
        self.reset() # reset
        print 'Reset done'

        print 'Power down ADC'
        self.power_cycle()
        print 'Power cycling done'

    def commit(self):
        self.power_cycle()

    def clear_pattern(self):
        self.s.write(0x45,0x0000) # Clear skew,deskew
        self.s.write(0x25,0x0000) # Clear ramp
        #self.commit()

    def ramp_pattern(self):
        self.clear_pattern()
        self.s.write(0x25,0x0040) # Enable ramp
        #self.commit()

    def deskew_pattern(self):
        self.clear_pattern()
        self.s.write(0x45,0x0001)
        #self.commit()

    def sync_pattern(self):
        self.clear_pattern()
        self.s.write(0x45,0x0002)
        #self.commit()

    def reset_all(self):
        ## Clear
        reg = self.u.read_int('adcleda_controller')
        reg = reg & 0xfffffffb        
        self.u.write_int('adcleda_controller',reg, offset=1, blindwrite=True)
        reg = reg | 0x00000004        
        self.u.write_int('adcleda_controller',reg, offset=1, blindwrite=True)
        time.sleep(1)
        reg = reg & 0xfffffffb       
        self.u.write_int('adcleda_controller',reg, offset=1, blindwrite=True)

    def get_channel(self):
        data = self.u.snapshot_get('fifo_data_a',man_trig=True)['data']
        x = np.fromstring(data,dtype='>i4')
        y = x.astype('uint8')
        return y

    def get_data(self):
        data = []

        temp = np.fromstring(self.u.snapshot_get('fifo_data',man_trig=True)['data'],dtype=np.uint8)

        data.append(self.process_data(temp[range(0,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(1,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(2,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(3,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(4,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(5,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(6,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(7,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(8,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(9,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(10,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(11,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(12,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(13,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(14,temp.size,16)].astype('uint8')))
        data.append(self.process_data(temp[range(15,temp.size,16)].astype('uint8')))

        return data

    def bit_slip(self, channel):
        ## Write to bitslip
        reg = self.u.read_int('adcleda_controller')
        reg = reg ^ 0x00000780        
        self.u.write_int('adcleda_controller',reg, offset=1)
        time.sleep(1)
        reg = reg ^ 0x00000780        
        self.u.write_int('adcleda_controller',reg, offset=1)

    def flip_channel(self, channel):
        ## Write to channel flip
        reg = self.u.read_int('adcleda_controller')
        reg = reg ^ 0x00000071        
        self.u.write_int('adcleda_controller',reg, offset=1)

    def process_data(self, data):
        #print 'Before:'
        #print ['%02x' % y for y in data[:8]]
        out_p = []
        for num in range(0,len(data)-1):
            y = data[num]&0xff
            y = ((y&0x08)>>3)|((y&0x04)>>1)|((y&0x02)<<1)|((y&0x01)<<3)|((y&0x80)>>3)|((y&0x40)>>1)|((y&0x20)<<1)|((y&0x10)<<3)
            out_p.append(y)
        #print '\nAfter:'
        #print ['%02x' % y for y in out_p[:8]]
        return out_p

    def show_data(self, data):
        plot(data)

    def inc_tap(self):
        self.tap = self.tap + 1
        y = (self.tap)&0x1f
        #y = (((self.tap)&0x10)>>4)|(((self.tap)&0x08)>>2)|((self.tap)&0x04)|(((self.tap)&0x02)<<2)|(((self.tap)&0x01)<<4)
        s = (y<<11)|(0x00000000)
        self.u.write_int('adcleda_controller',s,offset=1)
        time.sleep(1)
        s = (y<<11)|(0xffff0000)
        self.u.write_int('adcleda_controller',s,offset=1)
        time.sleep(1)
        s = (y<<11)|(0x00000000)
        self.u.write_int('adcleda_controller',s,offset=1)

    #def calibrate(self):
    #    self.