Example #1
0
def getVFATID(OH_NUM, vfat_slot):
    #    try:
    vfat_id1 = 0x000000ff & parseInt(
        readReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.GEB.VFATS.VFAT' +
                    str(vfat_slot) + '.ChipID1')))
    vfat_id2 = 0x000000ff & parseInt(
        readReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.GEB.VFATS.VFAT' +
                    str(vfat_slot) + '.ChipID0')))
    vfat_id = (vfat_id1 << 8) + vfat_id2
    if vfat_id == 0: return 0
    return vfat_id
Example #2
0
def configureT1(OH_NUM, MODE, TYPE, INTERVAL, NUMBER, Silent=False):
    if not Silent:
        print writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.MODE'),
            MODE)
        print writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.TYPE'),
            TYPE)
        print writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.INTERVAL'),
            INTERVAL)
        print writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.NUMBER'),
            NUMBER)
    else:
        writeReg(getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.MODE'),
                 MODE)
        writeReg(getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.TYPE'),
                 TYPE)
        writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.INTERVAL'),
            INTERVAL)
        writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.NUMBER'),
            NUMBER)
 def readBlock(register, nwords, debug=False):
     """
     read block 'register'
     returns 'nwords' values in the register
     """
     global gRetries
     nRetries = 0
     m_node = getNode(register)
     if m_node is None:
         print colors.MAGENTA,"NODE %s NOT FOUND" %(register),colors.ENDC
         return 0x0
  
     p = (c_uint32*nwords)()
     words = []
     if (debug):
         print "reading %d words from register %s"%(nwords,register)
     res = rBlock(m_node.real_address,p,len(p))
     if (res == 0):
         words = list(p)
         if (debug):
             print "ReadBlock result:\n"
             print words
         return words
     else:
         print colors.RED, "error encountered, retried read operation (%d)"%(nRetries),colors.ENDC
         nRetries += 1
     return words
 def writeRegister(self, register, value, debug=False):
     """
     write value 'value' into register 'register' using remote procedure call
     """
     global gRetries
     nRetries = 0
     #m_node = self.getNode(register)
     m_node = getNode(register)
     if m_node is None:
         print colors.MAGENTA,"NODE %s NOT FOUND"%(register),colors.ENDC
         return 0x0
 
     if debug:
         print "Trying to write\n"
         print m_node.output()
  
     while (nRetries < gMAX_RETRIES):
         rsp = writeReg(m_node, value)
         if "permission" in rsp:
             print colors.MAGENTA,"NO WRITE PERMISSION",colors.ENDC
             return
         elif "Error" in rsp:
             print colors.MAGENTA,"write error encountered (%s), retrying operation (%d,%d)"%(register,nRetries,gRetries),colors.ENDC
             return
         elif "0xdeaddead" in rsp:
             print colors.MAGENTA,"0xdeaddead found (%s), retrying operation (%d,%d)"%(register,nRetries,gRetries),colors.ENDC
             return
         else:
             return
    def writeRegister(self, register, value, debug=False):
        """
        write value 'value' into register 'register' using remote procedure call
        """
        global gRetries
        nRetries = 0
        #m_node = self.getNode(register)
        m_node = getNode(register)
        if m_node is None:
            print colors.MAGENTA, "NODE %s NOT FOUND" % (register), colors.ENDC
            return 0x0

        if debug:
            print "Trying to write\n"
            print m_node.output()

        while (nRetries < gMAX_RETRIES):
            rsp = writeReg(m_node, value)
            if "permission" in rsp:
                print colors.MAGENTA, "NO WRITE PERMISSION", colors.ENDC
                return
            elif "Error" in rsp:
                print colors.MAGENTA, "write error encountered (%s), retrying operation (%d,%d)" % (
                    register, nRetries, gRetries), colors.ENDC
                return
            elif "0xdeaddead" in rsp:
                print colors.MAGENTA, "0xdeaddead found (%s), retrying operation (%d,%d)" % (
                    register, nRetries, gRetries), colors.ENDC
                return
            else:
                return
    def readBlock(register, nwords, debug=False):
        """
        read block 'register'
        returns 'nwords' values in the register
        """
        global gRetries
        nRetries = 0
        m_node = getNode(register)
        if m_node is None:
            print colors.MAGENTA, "NODE %s NOT FOUND" % (register), colors.ENDC
            return 0x0

        p = (c_uint32 * nwords)()
        words = []
        if (debug):
            print "reading %d words from register %s" % (nwords, register)
        res = rBlock(m_node.real_address, p, len(p))
        if (res == 0):
            words = list(p)
            if (debug):
                print "ReadBlock result:\n"
                print words
            return words
        else:
            print colors.RED, "error encountered, retried read operation (%d)" % (
                nRetries), colors.ENDC
            nRetries += 1
        return words
 def readRegister(self, register, debug=False):
     """
     read register 'register' using remote procedure call
     returns value of the register
     """
     global gRetries
     nRetries = 0
     m_node = getNode(register)
     if m_node is None:
         print colors.MAGENTA,"NODE %s NOT FOUND" %(register),colors.ENDC
         return 0x0
     elif 'r' not in m_node.permission:
         print colors.MAGENTA,"No read permission for register %s" %(register),colors.ENDC
         return 0x0
     if debug:
         print "Trying to read\n"
         print m_node.output()
     while (nRetries<gRetries):
         res = rReg(parseInt(m_node.real_address))
         if res == 0xdeaddead:
             print colors.MAGENTA,"Bus error encountered while reading (%s), retrying operation (%d,%d)"%(register,nRetries,gRetries),colors.ENDC
             continue
         else:
             if m_node.mask is not None:
                 shift_amount=0
                 for bit in reversed('{0:b}'.format(m_node.mask)):
                     if bit=='0': shift_amount+=1
                     else: break
                 fin_res = (res&m_node.mask)>>shift_amount
             else:
                 fin_res = res
             if debug: print "Read register result: %s" %(fin_res)
             return fin_res
     return 0xdeaddead
Example #8
0
def T1On(OH_NUM):
    prevent_infiteloop = 0
    while parseInt(
            readReg(
                getNode('GEM_AMC.OH.OH' + str(OH_NUM) +
                        '.T1Controller.MONITOR'))) != 1:
        print 'MONITOR:', readReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.MONITOR'))
        prevent_infiteloop += 1
        print writeReg(
            getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.T1Controller.TOGGLE'),
            0xffffffff)
        if prevent_infiteloop > 10:
            printRed(
                'T1Controller Error - Will not toggle T1Controller Monitor')
            return False
    return True
Example #9
0
def verifyTCReset(OH_NUM):
    nSbits = readReg(
        getNode('GEM_AMC.TRIGGER.OH' + str(OH_NUM) + '.TRIGGER_CNT'))
    try:
        parseInt(nSbits)
    except:
        return False, nSbits

    if parseInt(nSbits) != 0:  #Hot channels?
        return False, nSbits

    else:
        return True, 0
Example #10
0
def scaInit(args, isReset=False):
    ohList = getOHlist(args.ohMask)

    parseXML()
    hostname = socket.gethostname()
    if 'eagle' in hostname:
        pass
    else:
        hostname = args.cardName
        rpc_connect(args.cardName)
    initJtagRegAddrs()

    heading("Hola, I'm SCA controller tester :)")

    if not checkStatus(ohList):
        if not isReset:
            exit()

    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.LINK_ENABLE_MASK'), args.ohMask)

    return ohList
 def readRegister(self, register, debug=False):
     """
     read register 'register' using remote procedure call
     returns value of the register
     """
     global gRetries
     nRetries = 0
     m_node = getNode(register)
     if m_node is None:
         print colors.MAGENTA, "NODE %s NOT FOUND" % (register), colors.ENDC
         return 0x0
     elif 'r' not in m_node.permission:
         print colors.MAGENTA, "No read permission for register %s" % (
             register), colors.ENDC
         return 0x0
     if debug:
         print "Trying to read\n"
         print m_node.output()
     while (nRetries < gRetries):
         res = rReg(parseInt(m_node.real_address))
         if res == 0xdeaddead:
             print colors.MAGENTA, "Bus error encountered while reading (%s), retrying operation (%d,%d)" % (
                 register, nRetries, gRetries), colors.ENDC
             continue
         else:
             if m_node.mask is not None:
                 shift_amount = 0
                 for bit in reversed('{0:b}'.format(m_node.mask)):
                     if bit == '0': shift_amount += 1
                     else: break
                 fin_res = (res & m_node.mask) >> shift_amount
             else:
                 fin_res = res
             if debug: print "Read register result: %s" % (fin_res)
             return fin_res
     return 0xdeaddead
Example #12
0
def setVFATRunMode(OH_NUM, VFAT_SLOT, Silent=False):
    if int(OH_NUM) < 0 or int(OH_NUM) > 3 or int(VFAT_SLOT) < 0 or int(
            VFAT_SLOT) > 23:
        return False
    REG_PATH = 'GEM_AMC.OH.OH' + str(OH_NUM) + '.GEB.VFATS.VFAT' + str(
        VFAT_SLOT) + '.'
    try:
        if not Silent:
            print writeReg(getNode(REG_PATH + 'ContReg0'), CONTREG0)
            print writeReg(getNode(REG_PATH + 'ContReg1'), CONTREG1)
            print writeReg(getNode(REG_PATH + 'ContReg2'), CONTREG2)
            print writeReg(getNode(REG_PATH + 'ContReg3'), CONTREG3)
            print writeReg(getNode(REG_PATH + 'IPreampIn'), IPREAMPIN)
            print writeReg(getNode(REG_PATH + 'IPreampFeed'), IPREAMPFEED)
            print writeReg(getNode(REG_PATH + 'IPreampOut'), IPREAMPOUT)
            print writeReg(getNode(REG_PATH + 'IShaper'), ISHAPER)
            print writeReg(getNode(REG_PATH + 'IShaperFeed'), ISHAPERFEED)
            print writeReg(getNode(REG_PATH + 'IComp'), ICOMP)
            print writeReg(getNode(REG_PATH + 'VThreshold1'), VTHRESHOLD1)
            print writeReg(getNode(REG_PATH + 'VCal'), VCAL)
            print writeReg(
                getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.CONTROL.TRIGGER'), 1)
        else:
            writeReg(getNode(REG_PATH + 'ContReg0'), CONTREG0)
            writeReg(getNode(REG_PATH + 'ContReg1'), CONTREG1)
            writeReg(getNode(REG_PATH + 'ContReg2'), CONTREG2)
            writeReg(getNode(REG_PATH + 'ContReg3'), CONTREG3)
            writeReg(getNode(REG_PATH + 'IPreampIn'), IPREAMPIN)
            writeReg(getNode(REG_PATH + 'IPreampFeed'), IPREAMPFEED)
            writeReg(getNode(REG_PATH + 'IPreampOut'), IPREAMPOUT)
            writeReg(getNode(REG_PATH + 'IShaper'), ISHAPER)
            writeReg(getNode(REG_PATH + 'IShaperFeed'), ISHAPERFEED)
            writeReg(getNode(REG_PATH + 'IComp'), ICOMP)
            writeReg(getNode(REG_PATH + 'VThreshold1'), VTHRESHOLD1)
            writeReg(getNode(REG_PATH + 'VCal'), VCAL)
            writeReg(
                getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.CONTROL.TRIGGER'), 1)
        return True
    except:
        return False
Example #13
0
def activateChannel(OH_NUM, vfat_slot, channel):
    print writeReg(
        getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.GEB.VFATS.VFAT' +
                str(vfat_slot) + '.VFATChannels.ChanReg' + str(channel)), 64)
Example #14
0
def clearChannel(OH_NUM, vfat_slot, channel):
    writeReg(
        getNode('GEM_AMC.OH.OH' + str(OH_NUM) + '.GEB.VFATS.VFAT' +
                str(vfat_slot) + '.VFATChannels.ChanReg' + str(channel)), 0)
Example #15
0
def main():

    instructions = ""
    ohMask = 0
    ohList = []

    if len(sys.argv) < 4:
        print(
            'Usage: sca.py <card_name> <oh_mask> <instructions>. If running on the card, put `local` instead of hostname'
        )
        print('instructions:')
        print('  r:        SCA reset will be done')
        print('  h:        FPGA hard reset will be done')
        print('  hh:       FPGA hard reset will be asserted and held')
        print('  fpga-id:  FPGA ID will be read through JTAG')
        print('  sysmon:   Read FPGA sysmon data repeatedly')
        print(
            '  program-fpga:   Program OH FPGA with a bitfile or an MCS file. Requires a parameter "bit" or "mcs" and a filename'
        )
        return
    else:
        ohMask = parseInt(sys.argv[2])
        ohList = getOHlist(ohMask)
        instructions = sys.argv[3]

    parseXML()
    hostname = socket.gethostname()
    if 'eagle' in hostname:
        pass
    else:
        rpc_connect(sys.argv[1])
    initJtagRegAddrs()

    heading("Hola, I'm SCA controller tester :)")

    if not checkStatus(ohList):
        if not 'r' in instructions:
            exit()

    writeReg(
        getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.LINK_ENABLE_MASK'),
        ohMask)

    if instructions == 'r':
        sca_reset(ohList)
    elif instructions == 'hh':
        fpga_keep_hard_reset(ohList)
    elif instructions == 'h':
        fpga_single_hard_reset()
    elif instructions == 'fpga-id':
        read_fpga_id(ohMask)

    elif instructions == 'sysmon':
        run_sysmon(ohMask)

    elif instructions == 'program-fpga':
        hostname = socket.gethostname()
        if 'eagle' in hostname:
            from reg_interface.arm.program_fpga import program_fpga
        else:
            printRed("This method should only be called from the card!!")
            return
        if len(sys.argv) < 5:
            printRed('Usage: sca.py local program-fpga <file-type> <filename>')
            printRed('file-type can be "mcs" or "bit"')
            return

        ftype = sys.argv[4]
        filename = sys.argv[5]
        program_fpga(ohMask, ftype, filename)

    elif instructions == 'test1':
        test1()

    elif instructions == 'test2':
        test2()

    elif instructions == 'compare-mcs-bit':
        if len(sys.argv) < 5:
            print(
                "Usage: sca.py local compare-mcs-bit <mcs_filename> <bit_filename>"
            )
            return
        mcsFilename = sys.argv[3]
        bitFilename = sys.argv[4]
        compare_mcs_bit(mcsFilename, bitFilename)

    elif instructions == 'gpio-set-direction':
        if len(sys.argv) < 4:
            print('Usage: sca.py local gpio-set-direction <direction-mask>')
            print(
                'direction-mask is a 32 bit number where each bit represents a GPIO channel -- if a given bit is high it means that this GPIO channel will be set to OUTPUT mode, and otherwise it will be set to INPUT mode'
            )
            return
        directionMask = parseInt(sys.argv[3])
        gpio.set_direction(ohMask, directionMask)

    elif instructions == 'gpio-set-output':
        if len(sys.argv) < 4:
            print('Usage: sca.py local gpio-set-output <output-data>')
            print(
                'output-data is a 32 bit number representing the 32 GPIO channels state'
            )
            return
        outputData = parseInt(sys.argv[3])
        gpio.set_output(ohMask, outputData)

    elif instructions == 'gpio-read-input':
        gpio.read_input(ohMask)
Example #16
0
def unmaskVFAT(OH_NUM, vfat_slot):
    SBitMask = getNode('GEM_AMC.OH.OH' + str(OH_NUM) +
                       '.CONTROL.VFAT.SBIT_MASK')
    vmask = (0xffffffff) ^ (0x1 << int(vfat_slot))
    writeReg(SBitMask, vmask)
    return
Example #17
0
def resetTriggerCounters():
    writeReg(getNode('GEM_AMC.TRIGGER.CTRL.CNT_RESET'), 1)
    writeReg(getNode('GEM_AMC.TRIGGER.CTRL.CNT_RESET'), 0)
Example #18
0
    f = open(args.filename, "w")

    parseXML()

    hostname = socket.gethostname()

    if hostname[0:4] == "eagle":
        print("This script is running on" + str(hostname) + ".")
        pass
    else:
        print(
            "This script is not running on an eagle machine. rpc_connect(\"" +
            str(args.cardName) + "\") will be called.")
        rpc_connect(args.cardName)

    writeReg(getNode("GEM_AMC.GEM_SYSTEM.CTRL.LINK_RESET"), 0x1)

    sleeptime = args.sleeptime
    if sleeptime < 250.:
        print("Warning, sleeptime will be increased to 250 microseconds")
        sleeptime = 250.

    time.sleep(sleeptime / 1000000.)

    crc_error_cnt_before = readAddress(
        getNode("GEM_AMC.SLOW_CONTROL.VFAT3.CRC_ERROR_CNT").real_address)
    packet_error_cnt_before = readAddress(
        getNode("GEM_AMC.SLOW_CONTROL.VFAT3.PACKET_ERROR_CNT").real_address)
    bitstuffing_error_cnt_before = readAddress(
        getNode(
            "GEM_AMC.SLOW_CONTROL.VFAT3.BITSTUFFING_ERROR_CNT").real_address)