sysParams =AFE.systemParams setupParams.skipFpga = 1 #setupParams.fpgaRefClk = 245.76 setupParams.fpgaRefClk = 368.64 #setupParams.fpgaRefClk = 184.32 AFE.systemStatus.loadTrims = 1 sysParams.FRef = 491.52 sysParams.FadcRx = 2949.12 sysParams.FadcFb = 2949.12 sysParams.Fdac = 8847.36 sysParams.rxEnable =[True,False,True,False] sysParams.fbEnable =[False,False] sysParams.txEnable =[False,False,False,False] 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.topLevelSystemMode = 'StaticTDDMode' 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 =['24410', '24410', '24410', '24410'] sysParams.LMFSHdRx =['12610', '12610', '12610', '12610'] #sysParams.LMFSHdRx =['12810', '12810', '12810', '12810'] # 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 = ["12810","12810"] sysParams.LMFSHdFb = ["12610","12610"] #sysParams.LMFSHdFb = ["12410","12410"] sysParams.LMFSHdTx = ["24410","24410","24410","24410"] 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.jesdRxLaneMux = [0,1,2,3,4,5,6,7] # 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.txDataMux = [2,3,0,1,4,5,6,7] sysParams.jesdRxRbd = [4, 4] sysParams.rxJesdTxScr = [False,False,False,False] sysParams.fbJesdTxScr = [False,False] #sysParams.jesdRxScr = [True,True,True,True] sysParams.jesdRxScr = [False,False,False,False] #sysParams.serdesTxLanePolarity = [False,False,False,False,False,False,False,False] sysParams.serdesTxLanePolarity = [True,True,True,True,True,True,True,True] sysParams.rxJesdTxK = [32,32,32,32] sysParams.fbJesdTxK = [32,32] sysParams.jesdRxK = [32,32,32,32] sysParams.ncoFreqMode = "1KHz" # NCO 0 SETTINGS sysParams.txNco0 = [[3200,3200], #Band0, Band1 for TxA for NCO0 [3200,3200], #Band0, Band1 for TxB for NCO0 [3200,3200], #Band0, Band1 for TxC for NCO0 [3200,3200]] #Band0, Band1 for TxD for NCO0 sysParams.rxNco0 = [[3200,3200], #Band0, Band1 for RxA for NCO0 [3200,3200], #Band0, Band1 for RxB for NCO0 [3200,3200], #Band0, Band1 for RxC for NCO0 [3200,3200]] #Band0, Band1 for RxD for NCO0 sysParams.fbNco0 = [3200,3200] #FBA, FBC for NCO0 # ADDED ON 02-11-23 NCO 1 SETTINGS # sysParams.txNco1 = [[3100,3100], #Band0, Band1 for TxA for NCO0 # [3100,3100], #Band0, Band1 for TxB for NCO0 # [3100,3100], #Band0, Band1 for TxC for NCO0 # [3100,3100]] #Band0, Band1 for TxD for NCO0 # # sysParams.rxNco1 = [[3100,3100], #Band0, Band1 for RxA for NCO0 # [3100,3100], #Band0, Band1 for RxB for NCO0 # [3100,3100], #Band0, Band1 for RxC for NCO0 # [3100,3100]] #Band0, Band1 for RxD for NCO0 # # sysParams.fbNco1 = [3100,3100] #FBA, FBC for NCO0 # # our working nco # sysParams.txNco0 = [[2698.24,2698.24], #Band0, Band1 for TxA for NCO0 # [2698.24,2698.24], #Band0, Band1 for TxB for NCO0 # [2698.24,2698.24], #Band0, Band1 for TxC for NCO0 # [2698.24,2698.24]] #Band0, Band1 for TxD for NCO0 # # sysParams.rxNco0 = [[2698.24,2698.24], #Band0, Band1 for RxA for NCO0 # [2698.24,2698.24], #Band0, Band1 for RxB for NCO0 # [2698.24,2698.24], #Band0, Band1 for RxC for NCO0 # [2698.24,2698.24]] #Band0, Band1 for RxD for NCO0 # # sysParams.fbNco0 = [2698.24,2698.24] #FBA, FBC for NCO0 # c band #sysParams.txNco0 = [[5850,5850], #Band0, Band1 for TxA for NCO0 # [5850,5850], #Band0, Band1 for TxB for NCO0 # [5850,5850], #Band0, Band1 for TxC for NCO0 # [5850,5850]] #Band0, Band1 for TxD for NCO0 #sysParams.rxNco0 = [[5850,5850], #Band0, Band1 for RxA for NCO0 # [5850,5850], #Band0, Band1 for RxB for NCO0 # [5850,5850], #Band0, Band1 for RxC for NCO0 # [5850,5850]] #Band0, Band1 for RxD for NCO0 #sysParams.fbNco0 = [5850,5850] #FBA, FBC for NCO0 sysParams.numBandsRx = [0]*4 # 0 for single, 1 for dual sysParams.numBandsFb = [0,0] sysParams.numBandsTx = [0,0,0,0] #sysParams.ddcFactorRx = [48,48,48,48] # DDC decimation factor for RX A, B, C and D sysParams.ddcFactorRx = [24,24,24,24] # DDC decimation factor for RX A, B, C and D sysParams.ddcFactorFb = [24,24] sysParams.ducFactorTx = [36,36,36,36] ## The following parameters sets up the LMK04828 clocking schemes lmkParams.pllEn = True#False lmkParams.inputClk = 1474.56#737.28 lmkParams.sysrefFreq = 3.84 #lmkParams.sysrefFreq = 1.92 lmkParams.lmkFrefClk = True ## The following parameters sets up the register and macro dumps logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt") logDumpInst.logFormat = 0x00 logDumpInst.rewriteFile = 1 logDumpInst.rewriteFileFormat4 = 1 device.optimizeWrites = 0 device.rawWriteLogEn = 1 ## The following parameters sets up the SYNCIN and SYNCOUT to interface with the TSW14J57 sysParams.jesdABLvdsSync = 1 sysParams.jesdCDLvdsSync = 1 sysParams.rxJesdTxSyncMux = [0,0,0,0] sysParams.fbJesdTxSyncMux = [0,0] sysParams.jesdRxSyncMux = [0,0,0,0] #[0,0,1,1] sysParams.syncLoopBack = True sysParams.serdesFirmware = True # ## The following parameters sets up the AGC ## CHANNEL A #sysParams.agcParams[0].agcMode = 2 ##internal AGC-1,external agc-4 pin configuration-3 #sysParams.agcParams[0].en_agcfreeze_pin = 0 #Enable or Disable pin based AGC freeze. #sysParams.agcParams[0].tdd_freeze_agc = 1 #1: Freeze Whether to reset or freeze the attack detectors during the OFF period of TDD #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 = [1,2] ## bigs step = 2dB, small step = 1dB #sysParams.agcParams[0].decaysize = [1,2] ##big step = 2dB, small step = 1dB #sysParams.agcParams[0].atkthreshold = [-1,-2,-14] ##attack threshold #sysParams.agcParams[0].decaythreshold = [-14,-8,-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 = [8,8] ##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 = 4 ##maximum DSA attenuation used by AGC #sysParams.agcParams[0].totalGainRange = 4 ##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 = 0 ##enable ALC to use minimum attenuation from AGC for which compensation is required. #sysParams.agcParams[0].alcEn = 0 #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 #sysParams.agcParams[0].pkDetPinLsbSel =0 #sysParams.agcParams[0].pkDetOnPenultimateLsb =0 ## CHANNEL C #sysParams.agcParams[2].agcMode = 2 ##internal AGC-1,external spi configuration-2,external agc-4 pin configuration-3 #sysParams.agcParams[2].en_agcfreeze_pin = 0 #Enable or Disable pin based AGC freeze. #sysParams.agcParams[2].tdd_freeze_agc = 1 #1: Freeze Whether to reset or freeze the attack detectors during the OFF period of TDD #sysParams.agcParams[2].gpioRstEnable = 0 ##disable GPIO based reset to AGC detector #sysParams.agcParams[2].atken = [0,1,0] ##enable big and small step attack #sysParams.agcParams[2].decayen = [0,1,0] ##enable big and small step decay #sysParams.agcParams[2].atksize = [1,2] ## bigs step = 2dB, small step = 1dB #sysParams.agcParams[2].decaysize = [1,2] ##big step = 2dB, small step = 1dB #sysParams.agcParams[2].atkthreshold = [-1,-2,-14] ##attack threshold #sysParams.agcParams[2].decaythreshold = [-14,-8,-20] ##decay threshold #sysParams.agcParams[2].atkwinlength = [170,170] ## detector time constant expressed inn absolute time in ns. #sysParams.agcParams[2].decaywinlength = 87380 ##detector time constant expressed in absolute time in ns. All detectors use the same value for decay time constant #sysParams.agcParams[2].atkNumHitsAbs = [8,8] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock #sysParams.agcParams[2].decayNumHitsAbs = [8,8] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock #sysParams.agcParams[2].minDsaAttn = 0 ##minimum DSA attenuation used by AGC #sysParams.agcParams[2].maxDsaAttn = 4 ##maximum DSA attenuation used by AGC #sysParams.agcParams[2].totalGainRange = 4 ##total gain range used by ALC for gain compensation #sysParams.agcParams[2].minAttnAlc = 0 ##minimum attenuation used by ALC for compensation when useMinAttnAgc = 0 #sysParams.agcParams[2].useMinAttnAgc = 0 ##enable ALC to use minimum attenuation from AGC for which compensation is required. #sysParams.agcParams[2].alcEn = 0 #sysParams.agcParams[2].alcMode = 0 ##floating point DGC #sysParams.agcParams[2].fltPtMode = 0 ##if exponent > 0, dont send MSB #sysParams.agcParams[2].fltPtFmt = 1 ##3 bit exponent #sysParams.agcParams[2].pkDetPinLsbSel =0 #sysParams.agcParams[2].pkDetOnPenultimateLsb =0 ## The following parameters sets up the GPIOs sysParams.gpioMapping={ 'H8': 'ADC_SYNC0', 'H7': 'ADC_SYNC1', 'N8': 'ADC_SYNC2', 'N7': 'ADC_SYNC3', 'H9': 'DAC_SYNC0', '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'], #'G16': ['RX_NCOSEL_0','RX_NCOSEL_1'],# ADDED ON 02-11-23 #'L14': ['TX_NCOSEL_0','TX_NCOSEL_2'],# ADDED ON 02-11-23 # 'H11': ['TX_NCOSEL_0','TX_NCOSEL_2'], # 'H16': ['FB_NCOSEL_0','FB_NCOSEL_2'] } #AFE.systemParams.papParams[0]['enable'] = True #AFE.systemParams.papParams[1]['enable'] = True #AFE.systemParams.papParams[2]['enable'] = True #AFE.systemParams.papParams[3]['enable'] = True ## Initiates LMK04828 and AFE79xx Bring-up setupParams.skipLmk = False AFE.initializeConfig() lmkParams.sysrefFreq = AFE.systemStatus.sysrefFreq lmkParams.lmkPulseSysrefMode = False AFE.LMK.lmkConfig() ## Initiates AFE79xx Bring-up setupParams.skipLmk = True AFE.deviceBringup() AFE.TOP.overrideTdd(15,0,15) ### ADC Ramp Out for i in range(3): AFE.JESD.ADCJESD[0].adcRampTestPattern(i,1,1) AFE.JESD.ADCJESD[1].adcRampTestPattern(i,1,1) #AFE.JESD.ADCJESD[0].adcRampTestPattern(i,0,1) #AFE.JESD.ADCJESD[1].adcRampTestPattern(i,0,1) # val=20 device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_TEST_PATTERN_CTRL.rx1_jesd_test_sig_gen_mode=1 device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_TEST_PATTERN_CTRL.rx2_jesd_test_sig_gen_mode=1 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_TEST_PATTERN_CTRL.rx1_jesd_test_sig_gen_mode=1 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_TEST_PATTERN_CTRL.rx2_jesd_test_sig_gen_mode=1 # # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input0=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input1=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input2=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input3=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input4=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input5=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input6=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input7=val # # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input0=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input1=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input2=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input3=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input4=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input5=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input6=val # device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input7=val # device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input0=0x1122 device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input1=0x3344 device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input2=0x5566 device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input3=0x7788 device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input4=0x99AA device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input5=0xBBCC device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input6=0xCCDD device.JESD.ADC_JESD[0].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input7=0xEEFF device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input0=0x0102 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input1=0x0304 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input2=0x0506 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input3=0x0708 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input4=0x090A device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input5=0x0B0C device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input6=0x3344 device.JESD.ADC_JESD[1].ADC_JESD.ADC_JESD_SHORT_TEST_PATTERN.jesd_short_test_pattern_input7=0x3344 ### DSA Settings # working code for i in range(4): AFE.DSA.setRxDsa(i,10) #Relinks ADC and DAC links. #If pinSysref is 0, internal copy of sysref is used for relinking. #If pinSysref is 1, pin based sysref is used for linking. AFE.adcDacSync(0) # error with library of DSA #AFE.DSA.setRxDsa(0,24) #AFE.DSA.setRxDsa(1,24) #AFE.DSA.setRxDsa(2,24) #AFE.DSA.setRxDsa(3,24) #CAFE.setRxDsa(0,1,10) # #CAFE.setRxDsaMode(0,0,3) #CAFE.setRxDsaMode(0,1,3) #CAFE.setRxDsa(0,1,10) #CAFE.setRxDsa(0,1,10)