Esempio n. 1
0
def test2():
    timeStart = clock()                                                              
    nn = getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI')                                
    for i in range(0,10000):
        print(str(i))
        sleep(0.001)
        writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.FPGA_HARD_RESET'), 0x1)
Esempio n. 2
0
def initJtagRegAddrs():
    global ADDR_JTAG_LENGTH
    global ADDR_JTAG_TMS
    global ADDR_JTAG_TDO
    global ADDR_JTAG_TDI
    ADDR_JTAG_LENGTH = getNode(
        'GEM_AMC.SLOW_CONTROL.SCA.JTAG.NUM_BITS').real_address
    ADDR_JTAG_TMS = getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TMS').real_address
    ADDR_JTAG_TDO = getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDO').real_address
Esempio n. 3
0
def checkStatus(ohList):
    rxReady       = parseInt(readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.STATUS.READY')))
    criticalError = parseInt(readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.STATUS.CRITICAL_ERROR')))
    statusGood = True
    for i in ohList:
        if not check_bit(rxReady, i):
            printRed("OH #%d is not ready: RX ready = %d, critical error = %d" % (i, (rxReady >> i) & 0x1, (criticalError >> i) & 0x1))
            statusGood = False
    return statusGood
Esempio n. 4
0
def fpga_remove_hard_reset(ohList):
    subheading('Disabling monitoring')
    monMask = readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'))
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'), 0xffffffff)
    sleep(0.01)
    subheading('Asserting FPGA Hard Reset (and keeping it in reset)')
    sendScaCommand(ohList, 0x2, 0x10, 0x4, 0xffffffff, False)
    subheading('Restoring monitoring')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'), monMask)
Esempio n. 5
0
def set_direction(ohMask, directionMask):
    subheading('Disabling monitoring')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'), 0xffffffff)
    sleep(0.01)
    ohList = getOHlist(ohMask)
    subheading('Setting the GPIO direction mask to ' + hex(directionMask))
    sendScaCommand(ohList, 0x2, 0x20, 0x4, directionMask, False)
Esempio n. 6
0
def set_output(ohMask, outputData):
    subheading('Disabling monitoring')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'), 0xffffffff)
    sleep(0.01)
    ohList = getOHlist(ohMask)
    subheading('Setting the GPIO output to ' + hex(outputData))
    sendScaCommand(ohList, 0x2, 0x10, 0x4, outputData, False)
Esempio n. 7
0
def sca_reset(ohMask):
    subheading('Reseting the SCA')

    # Set the sca reset mask if it exists
    scaResetMaskNode = getNode('GEM_AMC.SLOW_CONTROL.SCA.CTRL.SCA_RESET_ENABLE_MASK')
    if scaResetMaskNode is not None:
        origMask = readReg(scaResetMaskNode)
        writeReg(scaResetMaskNode, ohMask)
    else:
        print("No SCA_RESET_ENABLE_MASK register detected, reset will be applied to all links")

    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.CTRL.MODULE_RESET'), 0x1)

    # Reset the sca reset mask if it exists
    if scaResetMaskNode is not None:
        writeReg(scaResetMaskNode, int(origMask,16))

    checkStatus(getOHlist(ohMask))
Esempio n. 8
0
def read_input(ohMask):
    subheading('Disabling monitoring')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'), 0xffffffff)
    sleep(0.01)
    ohList = getOHlist(ohMask)
    subheading('Reading the GPIO input')
    readData = sendScaCommand(ohList, 0x2, 0x1, 0x1, 0x0, True)
    idx = 0
    for oh in ohList:
        print('OH %d  GPIO Input = ' %(oh) + hex(readData[idx]))
        idx += 1
Esempio n. 9
0
def enableJtag(ohMask, freqDiv=None):
    subheading('Disabling SCA ADC monitoring')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.ADC_MONITORING.MONITORING_OFF'),
             0xffffffff)
    sleep(0.01)
    subheading('Enable JTAG module with mask ' + hex(ohMask))
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.CTRL.ENABLE_MASK'), ohMask)
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.CTRL.SHIFT_MSB'), 0x0)
    writeReg(
        getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.CTRL.EXPERT.EXEC_ON_EVERY_TDO'),
        0x0)
    writeReg(
        getNode(
            'GEM_AMC.SLOW_CONTROL.SCA.JTAG.CTRL.EXPERT.NO_SCA_LENGTH_UPDATE'),
        0x0)
    writeReg(
        getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.CTRL.EXPERT.SHIFT_TDO_ASYNC'),
        0x0)

    if freqDiv is not None:
        subheading('Setting JTAG CLK frequency to ' + str(20 / (freqDiv)) +
                   'MHz (divider value = ' + hex((freqDiv - 1) << 24) + ')')
        ohList = []
        for i in range(0, 12):
            if check_bit(ohMask, i):
                ohList.append(i)
        sendScaCommand(ohList, 0x13, 0x90, 0x4, (freqDiv - 1) << 24, False)
Esempio n. 10
0
def test1():
    timeStart = clock()
    nn = getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI')
    for i in range(0,1000000):
        #print(str(i))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD_CHANNEL'), 0x02)
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD_COMMAND'), 0x10)
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD_LENGTH'), 0x4)
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD_DATA'), 0x0)
        #readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI'))
        wReg(ADDR_JTAG_TMS, 0x00000000)
        #sleep(0.01)
        #print('execute')
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD_EXECUTE'), 0x1)          
    totalTime = clock() - timeStart
    printCyan('time took = ' + str(totalTime))
Esempio n. 11
0
def sendScaCommand(ohList, sca_channel, sca_command, data_length, data, doRead):
    #print('fake send: channel ' + hex(sca_channel) + ', command ' + hex(sca_command) + ', length ' + hex(data_length) + ', data ' + hex(data) + ', doRead ' + str(doRead))
    #return    

    d = data

    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD.SCA_CMD_CHANNEL'), sca_channel)
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD.SCA_CMD_COMMAND'), sca_command)
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD.SCA_CMD_LENGTH'), data_length)
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD.SCA_CMD_DATA'), d)
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_CMD.SCA_CMD_EXECUTE'), 0x1)
    reply = []
    if doRead:
        for i in ohList:
            reply.append(parseInt(readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.MANUAL_CONTROL.SCA_REPLY_OH%d.SCA_RPY_DATA' % i))))
    return reply
Esempio n. 12
0
def fpga_single_hard_reset():
    subheading('Issuing FPGA Hard Reset')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.CTRL.OH_FPGA_HARD_RESET'), 0x1)
Esempio n. 13
0
def sca_reset(ohList):
    subheading('Reseting the SCA')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.CTRL.MODULE_RESET'), 0x1)
    checkStatus(ohList)
Esempio n. 14
0
def jtagCommand(restoreIdle, ir, irLen, dr, drLen, drReadOhList):
    totalLen = 0
    if ir is not None:
        totalLen += irLen + 6  # instruction register length plus 6 TMS bits required to get to the IR shift state and back to IDLE
    if dr is not None:
        totalLen += drLen + 5  # data register length plus 5 TMS bits required to get to the DR shift state and back to IDLE
    if restoreIdle:
        totalLen += 6
    if totalLen > 128:
        raise ValueError(
            'JTAG command request needs more than 128 bits -- not possible. Please break up your command into smaller pieces.'
        )

    tms = 0
    tdo = 0
    len = 0
    readIdx = 0

    if restoreIdle:
        tms = 0b011111
        len = 6

    if ir is not None:
        tms |= 0b0011 << len  # go to IR SHIFT state
        len += 4
        tdo |= ir << len
        tms |= 0b1 << (irLen - 1 + len)  # exit IR shift
        len += irLen
        tms |= 0b01 << len  # update IR and go to IDLE
        len += 2

    if dr is not None:
        tms |= 0b001 << len  # go to DR SHIFT state
        len += 3
        readIdx = len
        tdo |= dr << len
        tms |= 0b1 << (drLen - 1 + len)  # exit DR shift
        len += drLen
        tms |= 0b01 << len  # update DR and go to IDLE
        len += 2

    debug('Length = ' + str(len))
    debug('TMS = ' + binary(tms, len))
    debug('TDO = ' + binary(tdo, len))
    debug('Read start index = ' + str(readIdx))

    debugCyan('Setting command length = ' + str(len))
    fw_len = len if len < 128 else 0  # in firmware 0 means 128 bits
    #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.NUM_BITS'), fw_len)
    wReg(ADDR_JTAG_LENGTH, fw_len)

    # ================= SENDING LENGTH COMMAND JUST FOR TEST!! ===================
    #debugCyan('Setting config registers: bit number = ' + hex(fw_len))
    #sendScaCommand(0x13, 0x80, 0x4, 0xc00 | (fw_len << 24), False) # TX falling edge, shift LSB first, and set length
    # ============================================================================

    #raw_input("press any key to send tms and tdo")

    debugCyan('Setting TMS 0 = ' + binary(tms & 0xffffffff, 32))
    #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TMS'), tms0)
    wReg(ADDR_JTAG_TMS, tms & 0xffffffff)

    debugCyan('Setting TDO 0 = ' + binary(tdo & 0xffffffff, 32))
    #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDO'), tdo0)
    wReg(ADDR_JTAG_TDO, tdo & 0xffffffff)

    if len > 32:
        tms = tms >> 32
        debugCyan('Setting TMS 1 = ' + binary(tms & 0xffffffff, 32))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TMS'), tms1)
        wReg(ADDR_JTAG_TMS, tms & 0xffffffff)

        #raw_input("press any key to send the last TDO")

        tdo = tdo >> 32
        debugCyan('Setting TDO 1 = ' + binary(tdo & 0xffffffff, 32))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDO'), tdo1)
        wReg(ADDR_JTAG_TDO, tdo & 0xffffffff)

    if len > 64:
        tms = tms >> 32
        debugCyan('Setting TMS 2 = ' + binary(tms & 0xffffffff, 32))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TMS'), tms2)
        wReg(ADDR_JTAG_TMS, tms & 0xffffffff)

        tdo = tdo >> 32
        debugCyan('Setting TDO 2 = ' + binary(tdo & 0xffffffff, 32))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDO'), tdo2)
        wReg(ADDR_JTAG_TDO, tdo & 0xffffffff)

    if len > 96:
        tms = tms >> 32
        debugCyan('Setting TMS 3 = ' + binary(tms & 0xffffffff, 32))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TMS'), tms3)
        wReg(ADDR_JTAG_TMS, tms & 0xffffffff)

        tdo = tdo >> 32
        debugCyan('Setting TDO 3 = ' + binary(tdo & 0xffffffff, 32))
        #writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDO'), tdo3)
        wReg(ADDR_JTAG_TDO, tdo & 0xffffffff)

    # ================= SENDING JTAG GO COMMAND JUST FOR TEST!! ===================
    #debugCyan('JTAG GO!')
    #sendScaCommand(0x13, 0xa2, 0x1, 0x0, False)
    # ============================================================================

    #raw_input("Press any key to read TDI...")

    readValues = {}

    if drReadOhList == False:
        return readValues

    for i in drReadOhList:
        debugCyan('Read TDI 0')
        tdi = parseInt(
            readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI_OH%d' % i)))
        #tdi0_fast = parseInt(rReg(parseInt(ADDR_JTAG_TDI)))
        #print('normal tdi read = ' + hex(tdi0) + ', fast C tdi read = ' + hex(tdi0_fast) + ', parsed = ' + '{0:#010x}'.format(tdi0_fast))
        debug('tdi = ' + hex(tdi))

        if len > 32:
            debugCyan('Read TDI 1')
            tdi1 = parseInt(
                readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI_OH%d' % i)))
            tdi |= tdi1 << 32
            debug('tdi1 = ' + hex(tdi1))
            debug('tdi = ' + hex(tdi))

        if len > 64:
            debugCyan('Read TDI 2')
            tdi2 = parseInt(
                readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI_OH%d' % i)))
            tdi |= tdi2 << 64
            debug('tdi2 = ' + hex(tdi2))
            debug('tdi = ' + hex(tdi))

        if len > 96:
            debugCyan('Read TDI 3')
            tdi3 = parseInt(
                readReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.TDI_OH%d' % i)))
            tdi |= tdi3 << 96
            debug('tdi3 = ' + hex(tdi3))
            debug('tdi = ' + hex(tdi))

        readValue = (tdi >> readIdx) & (0xffffffffffffffffffffffffffffffff >>
                                        (128 - drLen))
        readValues[i] = readValue
        debug('Read pos = ' + str(readIdx))
        debug('Read = ' + hex(readValue))
    return readValues
Esempio n. 15
0
def disableJtag():
    subheading('Disabling JTAG module')
    writeReg(getNode('GEM_AMC.SLOW_CONTROL.SCA.JTAG.CTRL.ENABLE_MASK'), 0x0)