This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AFE7950EVM: Unable to program AFE

Part Number: AFE7950EVM
Other Parts Discussed in Thread: AFE7900, LMK04828

  1. I have pasted LMKProgram.py program. My issue will be written in next point.(Note:  LMK is getting programmed and I am getting qpll acknowledgement) 
  2. I am trying to program Afe but i am getting follwoing errors (AFE is not getting programmed)

    #======

    #Executing .. AFE7900/NDET_7900/program_AFE.py

    #Start Time 2026-05-06 10:43:04.027000

    The External Sysref Frequency should be an integer factor of: 3.84MHz

    2T2R1F Number: 0

    Valid Configuration: True

    laneRateRx: 9830.4

    laneRateFb: 9830.4

    laneRateTx: 9830.4

    2T2R1F Number: 1

    Valid Configuration: True

    laneRateRx: 9830.4

    laneRateFb: 9830.4

    laneRateTx: 9830.4

    LMK and FPGA Configured.

    DONOT_OPEN_Atharv_FULL - Device registers reset.

    chipType: 0xa

    chipId: 0x78

    chipVersion: 0x11

    AFE Reset Done

    Fuse farm load autoload done successful

    No autload error

    Fuse farm load autoload done successful

    No autload error

    AFE MCU Wake up done and patch loaded.

    PLL Locked

    AFE PLL Configured.

    AFE SerDes Configured.

    AFE Digital Chains configured.

    AFE TX Analog configured.

    AFE RX Analog configured.

    AFE FB Analog configured.

    AFE JESD configured.

    AFE AGC configured.

    AFE GPIO configured.

    Sysref Read as expected

    ###########Device DAC JESD-RX 0 Link Status###########

    Comma Align Lock Lane0: False; Please check if the transmitter is sending data and eye is good.

    Comma Align Lock Lane1: False; Please check if the transmitter is sending data and eye is good.

    Comma Align Lock Lane2: False; Please check if the transmitter is sending data and eye is good.

    Comma Align Lock Lane3: False; Please check if the transmitter is sending data and eye is good.

    CS State TX0: 0b00000000 . It is expected to be 0b10101010

    FS State TX0: 0b00000000 . It is expected to be 0b01010101

    Couldn't get the link up for device RX: 0; Alarms: 0x0

    ###################################

    ###########Device DAC JESD-RX 1 Link Status###########

    Comma Align Lock Lane0: False; Please check if the transmitter is sending data and eye is good.

    Comma Align Lock Lane1: False; Please check if the transmitter is sending data and eye is good.

    Comma Align Lock Lane2: False; Please check if the transmitter is sending data and eye is good.

    Comma Align Lock Lane3: False; Please check if the transmitter is sending data and eye is good.

    CS State TX0: 0b00000000 . It is expected to be 0b10101010

    FS State TX0: 0b00000000 . It is expected to be 0b01010101

    Couldn't get the link up for device RX: 1; Alarms: 0x0

    ###################################

    AFE Configuration Complete

    #Done executing .. AFE7900/NDET_7900/program_AFE.py

    #End Time 2026-05-06 10:44:53.156000

    #Execution Time = 109.128999949 s

    #================ ERRORS:10, WARNINGS:0 ================#

    #================ LMK Program  ================#

    '''
    Validation :  AFE79xx Library Version 
                    v1.67, v1.74
    Case            RX                    TX                           FB                        CLK                    Notes
    ----    -----------------      -----------------            -----------------            -----------            ------------
    1        245.76Msps, 24410     491.52Msps, 44210            491.52Msps, 22210            FADC=2949.12M       DAC in interleaved mode
            SerDes=9830.4Mbps     SerDes=9830.4Mbps            SerDes=9830.4Mbps            FDAC=8847.36M
            PLL0, NCO=3500M          PLL0, NCO=3500M            NCO=3500M                   REF=491.52M
            
    2        245.76Msps, 24410     491.52Msps, 44210            491.52Msps, 22210            FADC=2949.12M       DAC in straight mode
            SerDes=9830.4Mbps     SerDes=9830.4Mbps            SerDes=9830.4Mbps            FDAC=8847.36M
            PLL0, NCO=3500M          PLL0, NCO=3500M            NCO=3500M                   REF=491.52M
    '''
    setupParams.skipFpga                 = 1
    sysParams                            =    AFE.systemParams
    setupParams.fpgaRefClk                 = 245.76#184.32#
    AFE.systemStatus.loadTrims            = 1

    sysParams.fbEnable                     = [False]*2
    sysParams.externalClockTx            = False
    sysParams.externalClockRx            = False
    sysParams.FRef                        = 491.52
    sysParams.FadcRx                      = 2949.12
    sysParams.FadcFb                      = 2949.12
    sysParams.Fdac                        = 2949.12*4

    sysParams.enableDacInterleavedMode    = False                     #DAC interleave mode to save power consumption. Fs/2 - Fin spur occurs

    sysParams.modeTdd                     = 0        
                                            # 0- Single TDD Pin for all Channels
                                            # 1- Separate Control for 2T/2R/1F
                                            # 2- Separate Control for 1T/1R/1F            

    sysParams.RRFMode                     = 0   #4T4R2F FDD mode
    sysParams.jesdSystemMode            = [3,3]
                                            #SystemMode 0:    2R1F-FDD                        ; rx1-rx2-fb-fb
                                            #SystemMode 1:    1R1F-FDD                        ; rx1-rx1-fb-fb
                                            #SystemMode 2:    2R-FDD                            ; rx1-rx1-rx2-rx2
                                            #SystemMode 3:    1R                                ; rx1-rx1-rx1-rx1
                                            #SystemMode 4:    1F                                ; fb-fb-fb-fb
                                            #SystemMode 5:    1R1F-TDD                        ; rx1/fb-rx1/fb-rx1/fb-rx1/fb
                                            #SystemMode 8:    1R1F-TDD 1R-FDD    (FB-2Lanes)(RX1 RX2 interchanged)        ; rx2/fb-rx2/fb-rx1-rx1


    sysParams.jesdLoopbackEn            = 0 #Make it 1 to Enable the JESDTX to JESDRX internal loopback
    sysParams.LMFSHdRx                    = ["44210","44210","44210","44210"]    
                                            # The 2nd and 4th are valid only for jesdSystemMode values in (2,6,7,8). For other modes, select 4 converter modes for 1st and 3rd.
    sysParams.LMFSHdFb                    = ["22210","22210"]
    sysParams.LMFSHdTx                    = ["44210","44210","44210","44210"]
    sysParams.jesdTxProtocol            = [0,0]
    sysParams.jesdRxProtocol            = [0,0]
    sysParams.serdesFirmware            = True         # If you want to lead any firmware, please speify the path here. Otherwise it will not write any firmware
    sysParams.jesdTxLaneMux                = [0,1,2,3,4,5,6,7]    
                                                    # Enter which lanes you want in each location. 
                                                    # Note that across 2T Mux is not possible in 0.5.
                                                    # For example, if you want to exchange the first two lines of each 2T, this should be [[1,0,2,3],[5,4,6,7]]
    sysParams.serdesTxLanePolarity        = [True, True, False, False, True, True, False, False]
    sysParams.jesdRxLaneMux                =  [0,1,2,3,4,5,7,6]    #[0,1,2,3,4,5,7,6]
                                                    # Enter which lanes you want in each location.
                                                    # Note that across 2R Mux is not possible in 0.5.
                                                    # For example, if you want to exchange the first two lines of each 2R, this should be [[1,0,2,3],[5,4,6,7]]
    sysParams.serdesRxLanePolarity    = [True, True, True, True, False, False, False, False]
    sysParams.jesdRxRbd                    = [4, 4]

    sysParams.rxJesdTxScr                = [False]*4
    sysParams.fbJesdTxScr                = [False]*2
    sysParams.jesdRxScr                    = [False]*4

    sysParams.rxJesdTxK                    = [32]*4
    sysParams.fbJesdTxK                    = [32]*2
    sysParams.jesdRxK                    = [16]*4

    sysParams.ncoFreqMode                 = "FCW"

    sysParams.txNco0                    =     [[3800,1800],        #Band0, Band1 for TxA for NCO0
                                            [1000,1800],        #Band0, Band1 for TxB for NCO0
                                            [3800,1800],        #Band0, Band1 for TxC for NCO0
                                            [1800,1800]]        #Band0, Band1 for TxD for NCO0

    sysParams.rxNco0                    =     [[3800,1800],        #Band0, Band1 for RxA for NCO0
                                            [1000,1800],        #Band0, Band1 for RxB for NCO0
                                            [3800,1800],        #Band0, Band1 for RxC foQr NCO0
                                            [1800,1800]]        #Band0, Band1 for RxD for NCO0

    sysParams.fbNco0                    =     [1800,1800]            #FBA, FBC for NCO0
    sysParams.fbNco1                    =     [1800,1800]            #FBA, FBC for NCO1
    sysParams.fbNco2                    =     [1800,1800]            #FBA, FBC for NCO2
    sysParams.fbNco3                    =     [1800,1800]            #FBA, FBC for NCO3

    sysParams.numBandsRx                = [0]*4                    # 0 for single, 1 for dual
    sysParams.numBandsFb                = [0,0]                
    sysParams.numBandsTx                = [0,0,0,0]

    sysParams.ddcFactorRx                 = [6]*4            # DDC decimation factor for RX A, B, C and D
    sysParams.ddcFactorFb                 = [6]*4
    sysParams.ducFactorTx                 = [24]*4


    ## The following parameters sets up the LMK04828 clocking schemes
    lmkParams.pllEn                        =   True#False#False
    lmkParams.inputClk                    =    1474.56#737.28
    lmkParams.sysrefFreq                =    2949.12/1024
    lmkParams.lmkFrefClk                =    True

    ## The following parameters sets up the register and macro dumps
    logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
    #lmklogDumpInst = mLogDump.logDump(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxpg1.txt")
    logDumpInst.logFormat                = 0x21
    #logDumpInst.logFormat                = 0x0f
    logDumpInst.rewriteFile                = 1
    lmk.logClassInst                    =logDumpInst
    logDumpInst.rewriteFileFormat4        = 1
    device.optimizeWrites                = 0
    device.rawWriteLogEn                = 1 
    lmk.rawWriteLogEn                    = 1

    ## The following parameters sets up the SYNCIN and SYNCOUT to interface with the TSW14J57
    sysParams.jesdABLvdsSync            = 0
    sysParams.jesdCDLvdsSync            = 0
    sysParams.rxJesdTxSyncMux            = [0,0,0,0]
    sysParams.fbJesdTxSyncMux            = [0,0]
    sysParams.jesdRxSyncMux                = [0,0,0,0]        #[0,0,1,1]
    sysParams.syncLoopBack                = True


    sysParams.defaultRxDsa =[0,0,0,0]
    sysParams.defaultFbDsa = [0,0]
    sysParams.defaultTxDsa =[0,0,0,0]


    # ## The following parameters sets up the AGC
    # sysParams.agcParams[0].agcMode = 1 ##internal AGC
    # sysParams.agcParams[0].gpioRstEnable = 0 ##disable GPIO based reset to AGC detector 
    # sysParams.agcParams[0].atken = [0, 1, 0] ##enable big and small step attack
    # sysParams.agcParams[0].decayen = [0,1,0] ##enable big and small step decay
    # sysParams.agcParams[0].atksize = [2,1,0] ## bigs step = 2dB, small step = 1dB
    # sysParams.agcParams[0].decaysize = [2,1,0] ##big step = 2dB, small step = 1dB
    # sysParams.agcParams[0].atkthreshold = [-1, -2, -14] ##attack threshold
    # sysParams.agcParams[0].decaythreshold = [-14, -6, -20] ##decay threshold
    # sysParams.agcParams[0].atkwinlength = [170, 170] ## detector time constant expressed inn absolute time in ns. 
    # sysParams.agcParams[0].decaywinlength = 87380 ##detector time constant expressed in absolute time in ns. All detectors use the same value for decay time constant
    # sysParams.agcParams[0].atkNumHitsAbs = [8,8] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock
    # sysParams.agcParams[0].decayNumHitsAbs = [100,100] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock
    # sysParams.agcParams[0].minDsaAttn = 0 ##minimum DSA attenuation used by AGC
    # sysParams.agcParams[0].maxDsaAttn = 22 ##maximum DSA attenuation used by AGC
    # sysParams.agcParams[0].totalGainRange = 22 ##total gain range used by ALC for gain compensation
    # sysParams.agcParams[0].minAttnAlc = 0 ##minimum attenuation used by ALC for compensation when useMinAttnAgc = 0
    # sysParams.agcParams[0].useMinAttnAgc = 1 ##enable ALC to use minimum attenuation from AGC for which compensation is required.
    # sysParams.agcParams[0].alcEn = 1
    # sysParams.agcParams[0].alcMode = 0 ##floating point DGC
    # sysParams.agcParams[0].fltPtMode = 0 ##if exponent > 0, dont send MSB
    # sysParams.agcParams[0].fltPtFmt = 1 ##3 bit exponent


    ## The following parameters sets up the GPIOs
    sysParams.gpioMapping={
            'H8': 'ADC_SYNC0',
            'H7': 'DAC_SYNC0',
            'N8': 'ADC_SYNC2',
            'N7': 'ADC_SYNC3',
            'H9': 'ADC_SYNC1',
            'G9': 'DAC_SYNC1',
            'N9': 'DAC_SYNC2',
            'P9': 'DAC_SYNC3',
            'P14': 'GLOBAL_PDN',
            'K14': 'FBABTDD',
            'R6': 'FBCDTDD',
            'H15': ['TXATDD','TXBTDD'],
            'V5': ['TXCTDD','TXDTDD'],
            'E7': ['RXATDD','RXBTDD'],
            'R15': ['RXCTDD','RXDTDD']}
            
    #AFE.systemParams.papParams[0]['enable'] = True
    #AFE.systemParams.papParams[1]['enable'] = True
    #AFE.systemParams.papParams[2]['enable'] = True
    #AFE.systemParams.papParams[3]['enable'] = True
    setupParams.skipLmk    =    False

    AFE.initializeConfig()
    lmkParams.sysrefFreq = AFE.systemStatus.sysrefFreq
    lmkParams.lmkPulseSysrefMode = False
    AFE.LMK.lmkConfig()