import clr import System import time clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\ADRV9009 Transceiver Evaluation Software\\AdiCmdServerClient.dll") from AdiCmdServerClient import AdiCommandServerClient from AdiCmdServerClient import Talise from AdiCmdServerClient import FpgaTalise from AdiCmdServerClient import FpgaTddGpioConfig from AdiCmdServerClient import TaliseArmGpioConfig from AdiCmdServerClient import DacSampleXbar from AdiCmdServerClient import TaliseRxDataFormat from AdiCmdServerClient import GpioSel from System import Array #Create an Instance of the Class Link = AdiCommandServerClient.Instance #Connect to the Zynq Platform if(Link.hw.Connected == 1): Connect = 0 else: Connect = 1 Link.hw.Connect("192.168.10.185", 55555) #Read the Version print Link.Version() ################################################## # # GUI Version: 3.6.2.1 DLL Version: 3.6.2.1 FPGA Version: 4E00021A ArmVersion: 6.2.1 Build type = TAL_ARM_BUILD_RELEASE StreamVersion: 2.17 ################################################## Link.FpgaTalise.StopTxData() Link.Ad9528.InitDeviceDataStructure(122880000, 30720000, 122880000) Link.Ad9528.ResetDevice() Link.Ad9528.Initialize() time.sleep(0.5) arePllsLocked = Link.Ad9528.WaitForPllLock() print 'Ad9528 arePllsLocked =', hex(arePllsLocked) Link.Ad9528.EnableClockOutputs(0x300A) Link.FpgaRead(0x24) Link.SetSpiChannel(1) Link.FpgaTalise.ResetFpgaRegisters() Link.FpgaTalise.ResetFpgaIp(FpgaTalise.FpgaResets.ClearAllRst) ################################################## # Init Structures ################################################## Link.Talise.InitClearProfiles() Link.Talise.InitClocks(1, 122880, 9830400, 2, Talise.HsDiv.HsDiv2p5) Link.Talise.InitRfPllUseExternalLo(1, 0) Link.Talise.InitTxProfiles(1, 1, 1, 2, 2, 1, 1, 491520, 200000000, 450000000, 450000, 225000, Array[System.Int16]([150, 178, 181, 90, 1280, 1338, 1699, 493, 1386, 162, 934, 4, 48, 46, 35, 201, 0, 0, 0, 0, 50, 0, 0, 6, 24, 0, 0, 6, 24, 0, 25, 27, 0, 0, 25, 27, 0, 0, 165, 44, 15, 905])) Link.Talise.InitFirFilters(1, Talise.FilterName.Tx, "C:\\Program Files (x86)\\Analog Devices\\ADRV9009 Transceiver Evaluation Software\\Resources\\DigitalFilters\\TxPFIRApp116_IR491p52_BW450_PriSigBW200.ftr") Link.Talise.InitTxSettings(1, Talise.TxAttenStepSize.TxAtten0P05DB, Talise.TxChannel.Tx1, 20000, 0, Talise.DeframerSelect.DeframerA, Talise.TxDataIfPllUnlock.TxRampedDownToZero) Link.Talise.InitObsProfiles(1, 1, 4, 1, 491520, 450000000, 225000, Array[System.Int16]([155, 163, 181, 90, 1280, 1254, 1572, 340, 1431, 142, 973, 8, 48, 47, 36, 205, 0, 0, 0, 0, 51, 0, 0, 6, 24, 0, 0, 6, 24, 0, 25, 27, 0, 0, 25, 27, 0, 0, 165, 44, 15, 905]),Array[System.Int16]([124, 131, 154, 90, 1280, 2779, 1986, 0, 1037, 839, 988, 109, 11, 15, 28, 179, 0, 0, 0, 0, 45, 0, 0, 0, 24, 0, 0, 0, 24, 0, 25, 27, 0, 0, 25, 27, 0, 0, 165, 44, 15, 905]),Talise.OrxDdcMode.OrxDdcDisabled, Array[System.Int16]([-167, 419, -208, -498, 968, -320, -1273, 2154, -402, -4155, 9170, 21413])) Link.Talise.InitFirFilters(1, Talise.FilterName.ORx, "C:\\Program Files (x86)\\Analog Devices\\ADRV9009 Transceiver Evaluation Software\\Resources\\DigitalFilters\\ORxPFIRApp314_BW450_ADC1966p08_OR491p52.ftr") Link.Talise.InitObsRxSettings(1, Talise.ObsRxChannel.ObsRx1, Talise.ObsRxLoSource.RfPll, Talise.FramerSelect.FramerA) Link.Talise.InitRfPllEnablePhaseSync(1, Talise.RfPllMcs.NoSync) Link.Talise.InitRxNcoShiftCfg(1, 0, 0, 0, 0, 0, 0, 0, 0) ################################################## # Init Jesd ################################################## Link.Talise.InitJesd204bFramer(1, Talise.FramerSelect.FramerA, 0, 0, 0, 2, 32, 2, 16, 1, 1, 3, 228, 31, 0, 0, 0, 1, 0, 0) Link.FpgaTalise.SetupTxConvXbar(FpgaTalise.FpgaFramerSelect.FramerA, 0xE4) Link.FpgaTalise.SetupTxConvXbar(FpgaTalise.FpgaFramerSelect.FramerB, 0xE4) Link.GetPcbDescript() Link.Talise.InitJesd204bDeframer(1, Talise.DeframerSelect.DeframerA, 0, 0, 0, 2, 32, 1, 1, 3, 228, 17, 0, 0, 16, 1, 0, 0, 0, 0) Link.FpgaTalise.ResetFpgaIp(FpgaTalise.FpgaResets.TxJesdRst) time.sleep(0.5) Link.FpgaTalise.ResetFpgaIp(FpgaTalise.FpgaResets.ClearAllRst) Link.FpgaTalise.SetupJesd204(122880, 0, 0, 0, 32, 1, 0, 0, 491520, 2, 3, 32, 1, 16, 491520, 2, 3, 32, 1, 1, 16, FpgaTalise.FpgaFramerSelect.FramerA, FpgaTalise.FpgaDeframerSelect.DeframerA, FpgaTalise.FpgaDeframerSelect.DeframerA, False) Link.FpgaRead(0x400) Link.FpgaWrite(0x400, 0xF80020F) Link.FpgaRead(0x408) Link.FpgaWrite(0x408, 0xF) Link.FpgaRead(0x400) Link.FpgaWrite(0x400, 0xF80020F) Link.FpgaRead(0x408) Link.FpgaWrite(0x408, 0xF) Link.FpgaTalise.SetupJesd204bDeserializer(1, 0) ################################################## # Program Talise ################################################## Link.Talise.ResetDevice() Link.Talise.Initialize() Link.Talise.SetDacFullScale(Talise.DacFullScale.DacFs0dB) pllStatus = Link.Talise.GetPllsLockStatus() print 'Talise pllStatus =', hex(pllStatus) Link.Talise.EnableMultichipSync(0x1, 0x0) Link.Ad9528.RequestSysref(1) Link.Ad9528.RequestSysref(1) Link.Ad9528.RequestSysref(1) time.sleep(0.1) mcsStatus = Link.Talise.EnableMultichipSync(0x0, 0x0) print 'MCS Status = ', hex(mcsStatus) Link.FpgaTalise.SetupJesd204bOversampler(FpgaTalise.FpgaDeframerSelect.DeframerB, FpgaTalise.FpgaSampleDecimation.DecimateBy1) Link.SetLogLevel(0) if pllStatus & 0x01: Link.Talise.InitArm() Link.Talise.LoadStreamProcessor("C:\\Users\\Maurizio\\AppData\\Local\\Temp\\TaliseStream.bin") Link.Talise.LoadArm("C:\\Program Files (x86)\\Analog Devices\\ADRV9009 Transceiver Evaluation Software\\Resources\\arm_firmware\\TaliseTxArmFirmware.bin") isArmGood = Link.Talise.VerifyArmChecksum() print 'isArmGood =', hex(isArmGood) if isArmGood & 1: print "ARM Loaded Successfully" else: print "ARM File not loaded correctly" else: print "pll Lock Status is Incorrect" Link.Talise.GetArmVersion() Link.SetLogLevel(63) Link.Talise.SetPllLoopFilter(Talise.PllName.RfPll, 50, 3) Link.Talise.SetRfPllFrequency(Talise.PllName.RfPll, 270000000) pllStatus = Link.Talise.GetPllsLockStatus() print 'Talise pllStatus =', hex(pllStatus) ################################################## # InitCals ################################################## Link.Talise.AbortInitCals(0) #initCalMask = 0 #initCalMask |= int(Link.Talise.CalMask.TxBaseBandFilter) #initCalMask |= int(Link.Talise.CalMask.AdcTuner) #initCalMask |= int(Link.Talise.CalMask.Tia3dBCorner) #initCalMask |= int(Link.Talise.CalMask.DcOffset) #initCalMask |= int(Link.Talise.CalMask.FlashCal) #initCalMask |= int(Link.Talise.CalMask.PathDelay) #initCalMask |= int(Link.Talise.CalMask.TxLoLeakageInternal) #initCalMask |= int(Link.Talise.CalMask.TxQecInit) #initCalMask |= int(Link.Talise.CalMask.LoopbackRxLoDelay) #initCalMask |= int(Link.Talise.CalMask.LoopbackRxRxQecInit) #initCalMask |= int(Link.Talise.CalMask.RxQecInit) #initCalMask |= int(Link.Talise.CalMask.ORxQecInit) #initCalMask |= int(Link.Talise.CalMask.TxDac) #initCalMask |= int(Link.Talise.CalMask.AdcStitching) Link.Talise.RunInitCals(0xE5DCF) Link.Talise.WaitInitCals(60000, 0) Link.Talise.GetInitCalStatus() ################################################## # Disconnect from the Zynq ################################################## if(Connect == 1): Link.hw.Disconnect()