Post Go back to editing

ORX switching from ORX to InternalCals disrupt signal quality

Category: Datasheet/Specs
Product Number: AD9375

Dear all,

I am working with transceiver AD9375, and I want to ask for help with proper GPIO switching in observer path. We are using transceiver for LTE Base station, so I will show some problems with signal quality during OBS switching.
My scenario: I want to split LTE frame (10ms) to 5ms for TRX InternalCals and 5ms for ORX to do some DSP/SDR signal measurements for my company’s own purpose. I do it via 100MHz few  own sequencers which set GPIO values.

Below images: state analyzer from device which controls AD transceiver, and Keysight MXA Spectrum Analyzer.

Example: switching from INTERNAL_CALS (0x3) to ORX1 (0x1),

ORX_TRIGGER_RISE_TO_RISE – 5ms

ORX_TRIGGER_HOLD –  10us

tMODE_SETUP – 100us

tMODE_HOLD – 5ms



Problem: very short signal quality disruption during triggering Observer switch (I/Q mistake in one symbol). But not for every switch. Please see Table below.

Please look at constellation, and Error Vector Time.


I tried turn on/off trackingCalibrations and I see nothing better or worst in signal quality.

Switch from/switch to ->

ORX_OFF

ORX1

ORX2

CALS

Sniffer channel

ORX1 with sniffer

ORX2 with sniffer

ORX_OFF

good

bad

bad

Pretty good

bad

bad

bad

ORX1

bad

good

good

bad

good

good

good

ORX2

bad

good

good

bad

good

good

good

CALS

Pretty good

bad

bad

good

bad

bad

bad


Problem exists in every DC frequency, but for 3.5GHz has high EVM disruption (50% EVM) and for 500MHz, disruption is very small (<10%EVM). 500MHz below.

I wish you can help me.

Best Regards,

Jedrzej






Thread Notes

  • Hello,

    I would like to mention about our second verification. We used evalboard with transceiver and your application RadioVerse, tab TDD/FDD Switching.
    We got the same result for switching moments as from own sequencer device via GPIO.

    Disable switching




    Enable switching




    Regards,
    Jedrzej Klocek

  • Could someone from ADI answer? This disqualifies using AD9375 observation channel in FDD mode! 

  • We will test this and get back shortly,

    To summarize , In FDD (Tx and Rx having different LO) , with all tracking cals disabled , just switching ORx between OBS_RX1_TXLO and OBS_INTERNALCALS cause EVM degradation, Please confirm. 

  • Yes,  I can confirm:

    Settings: 

    Results:

    TDD timings disabled:

    TDD timings enabled:

    Turin on and off all tracking calibration makes no difference in this behaviour.

  • I tried to replicate the same issue in my test bench but couldn't see any issue with the EVM after changing the ORX Mode to OBS_INTERNALCALS (With TDD timings enabled).

    Can you try reading back the TX LOL status and check whether the Cal is running or not using the attached script.

    ########################
    #ADI Demo Python Script
    ########################
    #Gui Version:2.0.68	DLL Version:1.5.2.3566	Fpga Version:46000200 ArmVersion: 5.2.2
    
    #Import Reference to the DLL
    import System
    from System import Array
    from System import Int16
    from System import UInt32
    from System import Byte
    from System import SByte
    import time
    import clr
    clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\AdiCmdServerClient.dll")
    from AdiCmdServerClient import AdiCommandServerClient
    from AdiCmdServerClient import Enums
    from AdiCmdServerClient import MykDpdConfig
    from AdiCmdServerClient import MykClgcConfig
    from AdiCmdServerClient import MykVswrConfig
    from AdiCmdServerClient import TddFsmParameters_us
    from AdiCmdServerClient import MykonosProfileData
    from AdiCmdServerClient.AD9528 import AD9528Settings
    from AdiCmdServerClient import TxLolStatus
    
    #Create an Instance of the Class
    Link = AdiCommandServerClient.Instance
    Mykonos = AdiCommandServerClient.Instance.Mykonos
    FpgaMykonos = AdiCommandServerClient.Instance.FpgaMykonos
    
    #Connect to the Zynq Platform
    #Connect to the Zynq Platform
    if(Link.hw.Connected == 1):
        Connect = 1
    else:
    	Connect = 0
    	Link.hw.Connect("192.168.1.10", 55555)
       
    
    ################################
    #          Get TXLOL Status
    ##################################
    txLolStatus = clr.Reference[TxLolStatus]()
    Link.Mykonos.getTxLolStatus(Mykonos.TXCHANNEL.TX1, txLolStatus);
    print "#########TX1 LOL Status##########"
    print"Tx1 ErrorCode : " , txLolStatus.ErrorCode
    print"Tx1 PercentComplete: " , txLolStatus.PercentComplete
    print"Tx1 PerformanceMetric: " , txLolStatus.PerformanceMetric
    print"Tx1 IterCount: " , txLolStatus.IterCount
    print"Tx1 TrackCount: " , txLolStatus.UpdateCount
    #Link.Mykonos.setObsRxPathSource(Mykonos.OBSRXCHANNEL.OBS_INTERNALCALS)
    print Link.Mykonos.getObsRxPathSource(0)
    #Read the Version
    print Link.version()
    
    #Disconnect from the Zynq Platform
    if(Connect == 0):
        Link.hw.Disconnect()

    Attaching the TDD script for reference.

    '''Example TDD Script in IronPython
    The following is an example script used to configure the device for TDD operation in LTE UL/DL configuration 3. This script does not demonstrate the steps necessary to capture Rx/ObsRx samples or to transmit a Tx data file. This functionality can be performed in the Mykonos Transceiver Evaluation Software GUI or in the scripting tab itself. 
    Commands related to TDD that have not been explained to this point in the document are described in the “API/DLL Commands For TDD Configuration” section of this document.
    Note that details such as file paths and TCPIP addresses may have to be modified in order to properly connect to the device. This script is set up for LTE Uplink/Downlink Configuration 0 (D, S, U, U, U, D, S, U, U, U). To achieve best performance, the timings of the enable pointers may have to be adjusted. Note that for the TddFsmParamters_us pointers that time 0 corresponds to the beginning of the frame in the FPGA counter. 
    '''
    ########################
    #ADI Demo Python Script
    ########################
    
    #Import Reference to the DLL
    import clr
    #clr.AddReferenceToFileAndPath("E:\\Mykonos\\Mykonos Transceiver Evaluation "
                                  #"Software\\AdiCmdServerClient.dll")
    clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\AdiCmdServerClient.dll")
    from AdiCmdServerClient import AdiCommandServerClient
    from AdiCmdServerClient import TddFsmParameters_us
    
    #Create an Instance of the Command server client, FpgaMykonos, Mykonos, and TddFsmParameters_us classes
    Link = AdiCommandServerClient.Instance
    FPGA = Link.FpgaMykonos.Instance 
    MYK  = Link.Mykonos.Instance 
    
    #Connect to the Zynq Platform
    if(Link.hw.Connected == 1):
        Connect = 0
    else:
        Connect = 1
        Link.hw.Connect("192.168.1.58", 55555)
    
    #Read the Version
    print Link.version()
    
    DISABLE = 0
    ENABLE = 1
    OUTPUT = 0
    INPUT = 1
    
    
    ################################
    ###        ENABLE TDD        ###
    ################################
    
    MYK.radioOff()
    Link.hw.ReceiveTimeout = 0
    
    ##############
    # FPGA SETUP #
    ##############
    FPGA.disableTdd() #Disable TDD FSM in FPGA
    FPGA.gateDataTdd(ENABLE) #Enable data gating for Tx
    
    #Set FPGAs to output ORX_MODE/ORX_TRIG on GPIO pins
    FPGA.setupFpgaGpio(FPGA.GPIO_FEATURES.TDDORXMODE, OUTPUT)
    
    #Assign GPIO pins for ORX_MODE/ORX_TRIG signals
    FPGA.setupFpgaOrxGpio(FPGA.ORXGPIO_SELECT.GPIO_15, #ORX_TRIGGER
                          FPGA.ORXGPIO_SELECT.GPIO_16, #ORX_MODE[0]
                          FPGA.ORXGPIO_SELECT.GPIO_17, #ORX_MODE[1]
                          FPGA.ORXGPIO_SELECT.GPIO_18) #ORX_MODE[2]
    
    
    
    #Setup ARM ACK Output Signals on FPGA side
    FPGA.setupTx1ArmAckGpio(0x80)   #GPIO 7
    FPGA.setupTx2ArmAckGpio(0x100)  #GPIO 8
    FPGA.setupRx1ArmAckGpio(0x200)  #GPIO 9
    FPGA.setupRx2ArmAckGpio(0x400)  #GPIO 10
    FPGA.setupOrxArmAckGpio(0x800)  #GPIO 11   
    
    #Enable ARM ACK Output Signals on FPGA
    FPGA.enableArmAckOutputs(ENABLE)        
    
    #Setup FPGA TX/RX Data Path Trigger to TDD_SM_PULSE signals
    FPGA.setTxTrigger(FPGA.TXTRIGGER.TDD_SM_PULSE)
    FPGA.setRxTrigger(FPGA.RXTRIGGER.TDD_SM_PULSE)
    
    #Create instance of TDD FSM Class
    tddFsm = TddFsmParameters_us()
    
    #Set Miscellaneous TDD Settings
    tddFsm.TddLoopCount = 0
    tddFsm.TddFrameCount_us = 10000
    tddFsm.TddSecondPtrEnable = 1
    tddFsm.TddExtTrigOnPtr_us = 9900
    tddFsm.TddExtTrigOffPtr_us = 0
    
    #Set Tx Timings
    tddFsm.TddTx1OnPtr_us = 0
    tddFsm.TddTx1OffPtr_us = 3720
    tddFsm.Tdd2ndTx1OnPtr_us = 5000
    tddFsm.Tdd2ndTx1OffPtr_us = 8720
    tddFsm.TddTx2OnPtr_us = 0
    tddFsm.TddTx2OffPtr_us = 0
    tddFsm.Tdd2ndTx2OnPtr_us = 0
    tddFsm.Tdd2ndTx2OffPtr_us = 0
    #tddFsm.TddTx1DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.TddTx2DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndTx1DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndTx2DataPathDel_us = 40 ## Data path delays are ignored
    
    #Set Rx Timings
    tddFsm.TddRx1OnPtr_us = 0
    tddFsm.TddRx1OffPtr_us = 0
    tddFsm.Tdd2ndRx1OnPtr_us = 0
    tddFsm.Tdd2ndRx1OffPtr_us = 0
    tddFsm.TddRx2OnPtr_us = 0
    tddFsm.TddRx2OffPtr_us = 0
    tddFsm.Tdd2ndRx2OnPtr_us = 0
    tddFsm.Tdd2ndRx2OffPtr_us = 0
    #tddFsm.TddRx1DataPathDel_us = 40 ## Data path delays are ignored 
    #tddFsm.TddRx2DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndRx1DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndRx2DataPathDel_us = 40 ## Data path delays are ignored
    
    #Set Orx timings
    tddFsm.TddOrx1TxLoOnPtr_us = 0
    tddFsm.TddOrx1TxLoOffPtr_us= 2500
    tddFsm.TddOrx2TxLoOnPtr_us = 0
    tddFsm.TddOrx2TxLoOffPtr_us = 0
    tddFsm.Tdd2ndOrx1TxLoOnPtr_us= 5000
    tddFsm.Tdd2ndOrx1TxLoOffPtr_us= 8720
    tddFsm.Tdd2ndOrx2TxLoOnPtr_us= 0
    tddFsm.Tdd2ndOrx2TxLoOffPtr_us = 0
    #tddFsm.TddIntCalsOnPtr_us= 2500
    #tddFsm.TddIntCalsOffPtr_us=3720
    
    #Load Tdd Fsm parameters into FPGA
    FPGA.initTdd_us(tddFsm)
    
    #Setup the Tx External Trigger Output (J67 SMA on Zynq)
    FPGA.setupTxExtTrigPin(FPGA.FPGA_TRIGGER_DIRECTION.FPGA_OUTPUT,
                           FPGA.FPGA_EXT_TRIGGER_SOURCE.TDD_FSM_TRIG)
    
    #############
    # ARM SETUP #
    #############
    useRx2EnablePin = ENABLE
    useTx2EnablePin = ENABLE
    txRxPinMode = ENABLE
    orxPinMode = ENABLE
    orxTriggerPin = 15
    orxMode2Pin = 18
    orxMode1Pin = 17
    orxMode0Pin = 16
    rx1EnableAck = (9 | 0x10) #OR the pin assignment with 0x10 to make the pin an output pin. 
    rx2EnableAck = (10 | 0x10)
    tx1EnableAck = (7 | 0x10)
    tx2EnableAck = (8 | 0x10)
    orx1EnableAck = (11 | 0x10)
    orx2EnableAck = (11 | 0x10)
    srxEnableAck = (11 | 0x10)
    txObsSelect = 0
    
    MYK.init_armGpioStructure(useRx2EnablePin, useTx2EnablePin,
        txRxPinMode, orxPinMode, orxTriggerPin, orxMode2Pin, orxMode1Pin, 
        orxMode0Pin, rx1EnableAck, rx2EnableAck, tx1EnableAck, tx2EnableAck,
        orx1EnableAck, orx2EnableAck, srxEnableAck,txObsSelect)
    
    FPGA.enableArmAckOutputs(ENABLE)
    MYK.setArmGpioPins()
    
    
    ##########################################
    ##         Write Tx Data To RAM         ##
    ##########################################
    
    FPGA.stopTxData()
    FPGA.setTxTransmitMode(1) #Set Tx into continuous data transmit mode in data path
    FPGA.enableTxDataPaths(FPGA.TX_DATAPATH.TX1_TX2)
    FPGA.startTxData()
    MYK.radioOn()
    FPGA.enableTdd()
    
    
    
    #Disconnect from the Zynq Platform
    if(Connect == 1):
        Link.hw.Disconnect()
    
    

  • Hi,

    We tried to investigate why couldn't you see any issue.

    1. First of all and the most important - you forgot to enable GPIO control. Your obs status was always OBS_RX_OFF
    ```MYK.setRadioControlPinMode()```

    2. Switching to Internal Cals was commented. As I said in first message issue is replicate only when ORX is switching between ORX1/2 -> INTERNAL_CALS and INTERNAL_CALS->ORX1/2. Please check table in main topic.

    3. I recommend to use high frequency 2-4GHz for explicit replication, and please open Trace EVM Time. Issue appears only two times in 10ms frame.

    To answer for your question. When you replicate this issue you could see that TrackingCals status blinks OK/NotOK.


    I attach your script with corrections mentioned above.

    '''Example TDD Script in IronPython
    The following is an example script used to configure the device for TDD operation in LTE UL/DL configuration 3. This script does not demonstrate the steps necessary to capture Rx/ObsRx samples or to transmit a Tx data file. This functionality can be performed in the Mykonos Transceiver Evaluation Software GUI or in the scripting tab itself. 
    Commands related to TDD that have not been explained to this point in the document are described in the “API/DLL Commands For TDD Configuration” section of this document.
    Note that details such as file paths and TCPIP addresses may have to be modified in order to properly connect to the device. This script is set up for LTE Uplink/Downlink Configuration 0 (D, S, U, U, U, D, S, U, U, U). To achieve best performance, the timings of the enable pointers may have to be adjusted. Note that for the TddFsmParamters_us pointers that time 0 corresponds to the beginning of the frame in the FPGA counter. 
    '''
    ########################
    #ADI Demo Python Script
    ########################
    
    #Import Reference to the DLL
    import clr
    #clr.AddReferenceToFileAndPath("E:\\Mykonos\\Mykonos Transceiver Evaluation "
                                  #"Software\\AdiCmdServerClient.dll")
    clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\AdiCmdServerClient.dll")
    from AdiCmdServerClient import AdiCommandServerClient
    from AdiCmdServerClient import TddFsmParameters_us
    
    #Create an Instance of the Command server client, FpgaMykonos, Mykonos, and TddFsmParameters_us classes
    Link = AdiCommandServerClient.Instance
    FPGA = Link.FpgaMykonos.Instance 
    MYK  = Link.Mykonos.Instance 
    
    #Connect to the Zynq Platform
    if(Link.hw.Connected == 1):
        Connect = 0
    else:
        Connect = 1
        Link.hw.Connect("192.168.99.248", 55555)
    
    #Read the Version
    print Link.version()
    
    DISABLE = 0
    ENABLE = 1
    OUTPUT = 0
    INPUT = 1
    
    
    ################################
    ###        ENABLE TDD        ###
    ################################
    
    MYK.radioOff()
    Link.hw.ReceiveTimeout = 0
    
    ##############
    # FPGA SETUP #
    ##############
    FPGA.disableTdd() #Disable TDD FSM in FPGA
    FPGA.gateDataTdd(ENABLE) #Enable data gating for Tx
    
    # setupFpgaGpio,4,0
    #Set FPGAs to output ORX_MODE/ORX_TRIG on GPIO pins
    FPGA.setupFpgaGpio(FPGA.GPIO_FEATURES.TDDORXMODE, OUTPUT)
    
    print FPGA.GPIO_FEATURES.TDDORXMODE
    
    # setupFpgaOrxGpio,00008000,10000,20000,40000
    #Assign GPIO pins for ORX_MODE/ORX_TRIG signals
    FPGA.setupFpgaOrxGpio(FPGA.ORXGPIO_SELECT.GPIO_15, #ORX_TRIGGER
                          FPGA.ORXGPIO_SELECT.GPIO_16, #ORX_MODE[0]
                          FPGA.ORXGPIO_SELECT.GPIO_17, #ORX_MODE[1]
                          FPGA.ORXGPIO_SELECT.GPIO_18) #ORX_MODE[2]
    
    
    print FPGA.ORXGPIO_SELECT.GPIO_15
    print FPGA.ORXGPIO_SELECT.GPIO_16
    print FPGA.ORXGPIO_SELECT.GPIO_17
    print FPGA.ORXGPIO_SELECT.GPIO_18
    
    # setupTx1ArmAckGpio,80
    # setupTx1ArmAckGpio,100
    # setupTx1ArmAckGpio,200
    # setupTx1ArmAckGpio,400
    # setupTx1ArmAckGpio,800
    #Setup ARM ACK Output Signals on FPGA side
    FPGA.setupTx1ArmAckGpio(0x80)   #GPIO 7
    FPGA.setupTx2ArmAckGpio(0x100)  #GPIO 8
    FPGA.setupRx1ArmAckGpio(0x200)  #GPIO 9
    FPGA.setupRx2ArmAckGpio(0x400)  #GPIO 10
    FPGA.setupOrxArmAckGpio(0x800)  #GPIO 11   
    
    # enableArmAckOutputs,1
    #Enable ARM ACK Output Signals on FPGA
    FPGA.enableArmAckOutputs(ENABLE)        
    
    #Setup FPGA TX/RX Data Path Trigger to TDD_SM_PULSE signals
    FPGA.setTxTrigger(FPGA.TXTRIGGER.TDD_SM_PULSE)
    # FPGA.setRxTrigger(FPGA.RXTRIGGER.TDD_SM_PULSE)
    
    # setupFpgaMmcm,0
    # 0,8,8,8,8,8,8,8,153600000
    # nie ma
    
    #Create instance of TDD FSM Class
    tddFsm = TddFsmParameters_us()
    
    #Set Miscellaneous TDD Settings
    tddFsm.TddLoopCount = 0
    tddFsm.TddFrameCount_us = 10000
    tddFsm.TddSecondPtrEnable = 1
    tddFsm.TddExtTrigOnPtr_us = 9900
    tddFsm.TddExtTrigOffPtr_us = 0
    
    #Set Tx Timings
    tddFsm.TddTx1OnPtr_us = 0
    tddFsm.TddTx1OffPtr_us = 10000
    tddFsm.Tdd2ndTx1OnPtr_us = 0
    tddFsm.Tdd2ndTx1OffPtr_us = 0
    tddFsm.TddTx2OnPtr_us = 0
    tddFsm.TddTx2OffPtr_us = 10000
    tddFsm.Tdd2ndTx2OnPtr_us = 0
    tddFsm.Tdd2ndTx2OffPtr_us = 0
    #tddFsm.TddTx1DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.TddTx2DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndTx1DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndTx2DataPathDel_us = 40 ## Data path delays are ignored
    
    #Set Rx Timings
    tddFsm.TddRx1OnPtr_us = 0
    tddFsm.TddRx1OffPtr_us = 0
    tddFsm.Tdd2ndRx1OnPtr_us = 0
    tddFsm.Tdd2ndRx1OffPtr_us = 0
    tddFsm.TddRx2OnPtr_us = 0
    tddFsm.TddRx2OffPtr_us = 0
    tddFsm.Tdd2ndRx2OnPtr_us = 0
    tddFsm.Tdd2ndRx2OffPtr_us = 0
    #tddFsm.TddRx1DataPathDel_us = 40 ## Data path delays are ignored 
    #tddFsm.TddRx2DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndRx1DataPathDel_us = 40 ## Data path delays are ignored
    #tddFsm.Tdd2ndRx2DataPathDel_us = 40 ## Data path delays are ignored
    
    #Set Orx timings
    tddFsm.TddOrx1TxLoOnPtr_us = 0
    tddFsm.TddOrx1TxLoOffPtr_us= 2500
    tddFsm.TddOrx2TxLoOnPtr_us = 2500
    tddFsm.TddOrx2TxLoOffPtr_us = 5000
    tddFsm.Tdd2ndOrx1TxLoOnPtr_us = 0
    tddFsm.Tdd2ndOrx1TxLoOffPtr_us= 0
    tddFsm.Tdd2ndOrx2TxLoOnPtr_us= 0
    tddFsm.Tdd2ndOrx2TxLoOffPtr_us = 0
    tddFsm.TddIntCalsOnPtr_us= 5000
    tddFsm.TddIntCalsOffPtr_us=10000
    
    # initTDD,1,1,0,1,1,0,0,0,0,176FFF,0,176FFF,0,176FFF,0,0,0,0,0,5DBFF,5DBFF,BB7FF,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,0,0,BB7FF,176FFF,0,0
    #Load Tdd Fsm parameters into FPGA
    FPGA.initTdd_us(tddFsm)
    
    # setupTxExtTrigPin,1,1
    #Setup the Tx External Trigger Output (J67 SMA on Zynq)
    FPGA.setupTxExtTrigPin(FPGA.FPGA_TRIGGER_DIRECTION.FPGA_OUTPUT,
                           FPGA.FPGA_EXT_TRIGGER_SOURCE.TDD_FSM_TRIG)
    
    print int(FPGA.FPGA_TRIGGER_DIRECTION.FPGA_OUTPUT)
    print int(FPGA.FPGA_EXT_TRIGGER_SOURCE.TDD_FSM_TRIG)
    
    # setupRxExtTrigPin,1,1
    # nie ma
    
    #############
    # ARM SETUP #
    #############
    useRx2EnablePin = ENABLE
    useTx2EnablePin = ENABLE
    txRxPinMode = ENABLE
    orxPinMode = ENABLE
    orxTriggerPin = 15
    orxMode2Pin = 18
    orxMode1Pin = 17
    orxMode0Pin = 16
    rx1EnableAck = (9 | 0x10) #OR the pin assignment with 0x10 to make the pin an output pin. 
    rx2EnableAck = (10 | 0x10)
    tx1EnableAck = (7 | 0x10)
    tx2EnableAck = (8 | 0x10)
    orx1EnableAck = (11 | 0x10)
    orx2EnableAck = (11 | 0x10)
    srxEnableAck = (11 | 0x10)
    txObsSelect = 0
    
    # MYKONOS_init_armGpioStruct,1,1,1,1,1,15,18,17,16,25,26,23,24,27,27,27,27
    
    MYK.init_armGpioStructure(useRx2EnablePin, useTx2EnablePin,
        txRxPinMode, orxPinMode, orxTriggerPin, orxMode2Pin, orxMode1Pin, 
        orxMode0Pin, rx1EnableAck, rx2EnableAck, tx1EnableAck, tx2EnableAck,
        orx1EnableAck, orx2EnableAck, srxEnableAck,txObsSelect)
    
    # enableArmAckOutputs,1
    FPGA.enableArmAckOutputs(ENABLE)
    
    # MYKONOS_setArmGpioPins
    MYK.setArmGpioPins()
    
    # MYKONOS_setRadioControlPinMode 
    MYK.setRadioControlPinMode()
    
    ##########################################
    ##         Write Tx Data To RAM         ##
    ##########################################
    
    #FPGA.stopTxData()
    #FPGA.setTxTransmitMode(1) #Set Tx into continuous data transmit mode in data path
    #FPGA.enableTxDataPaths(FPGA.TX_DATAPATH.TX1_TX2)
    #FPGA.startTxData()
    MYK.radioOn()
    FPGA.enableTdd()
    #FPGA.disableTdd()
    
    print "done"
    
    
    #Disconnect from the Zynq Platform
    if(Connect == 1):
        Link.hw.Disconnect()


    script result for LTE ETM 3.1 20MHz



    Regards,
    Jedrzej

  • We have tested this in our EVB, and we don't see this issue with changing the ORX mode to OBS_INTERNALCALS.  Please see below for the plot. When i switch between Internal cals to TX LO and TXLO to Internal cals, i see that with internal cals, the EVM is not degraded.

    In the EVM plot, we think it looks like FDD waveform and see higher peak EVMs in the middle of the symbols.

    Are you using FDD waveform or TDD waveform? Could you please share the TDD waveform that you are testing with and the TDD timing that you have been using?

  • We are using TDD and FDD waveforms. But for reproduction FDD waveform is better, because in TDD is some chance, that EVM disruption stays during RX mode and VSA doesn't recognize it.
    What are we do:

    We switching in every 10ms ORX state. 5ms for Internal Cals + 2.5ms for ORX1_TXLO + 2.5ms for ORX2_TXLO.
    I attach screenshot for 3.5GHz on ZYNQ EVB + AD9375 with attached waveform.


    And the same waveform with runing IRON script from last conversation. We could also replicate this issue using TDD/FDD switching tab (second message in history).

    As I see this python script is not synchronized with frame begin. Every python run makes EVM peaks in random symbol position. In our FPGA sequencer , which is synchronized with signal frame start, EVM peaks are always in the same positions and they are synchronized with ORX trigger during switch from TXLO -> INTERNAL_CALS and from INTERNAL_CALS to TXLO


    Waveform (LTE FDD 20MHz fs=307.2MHz, PCellId = 1):
    etm_3.1_20MHz_307.2MHz_FDD_pci_1r.txt

    Also I attach EVB configuration, maybe it could give you some informations. And I have question for you. If you are confident, that your config doesn't replicate this issue could you send us proper EVB config file for test on our site?

    Config XML:

    <?xml version="1.0" encoding="utf-8"?>
    <PageSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <NumFiles>4</NumFiles>
      <Version>Gui Version:2.0.68	DLL Version:1.5.2.3566	Fpga Version:46000200 ArmVersion: 5.2.2</Version>
      <ConfigSetting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxLane2</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxM</Name>
          <Value>4</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxBID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxCrossBar</Name>
          <Value>228</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TrkTx2LOL</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>Rx2Enable</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>TCPIPPortNum</Name>
          <Value>55555</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>ObsRxK</Name>
          <Value>32</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>ObsRxM</Name>
          <Value>2</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>ObsRxL</Name>
          <Value>2</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>SelectedOrx</Name>
          <Value>3</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>DeviceIndex</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>RxChannelSelect</Name>
          <Value>3</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxK</Name>
          <Value>32</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxRelink</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxAmp</Name>
          <Value>560</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxF</Name>
          <Value>2</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxInvert1</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>RefClk</Name>
          <Value>30.72</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>Tx1Enable</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>ObsRxF</Name>
          <Value>2</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>FInvert3</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>ObsRxOffsetK</Name>
          <Value>31</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FLID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>ProfileIndex</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Double</Type>
          <Name>Amplitude</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>DInvert4</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxLane2</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Double</Type>
          <Name>RxRFLOfreq</Name>
          <Value>3500</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ObsRxLane1</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxLane1</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>DDID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>TxChannelSelect</Name>
          <Value>3</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FBID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxLaneRate</Name>
          <Value>6144</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxInvert4</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TCPIPAddress</Name>
          <Value>192.168.99.248</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>DBID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxDID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>DeviceClock_ad9370</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxCrossBar</Name>
          <Value>228</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxInvert1</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxLaneRate</Name>
          <Value>6144</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxL</Name>
          <Value>4</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>FInvert4</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FPostEmphasis</Name>
          <Value>8</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxEq</Name>
          <Value>1</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FDID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxBID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>DLID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxRFLOExtLo</Name>
          <Value>NO</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>Vcxo</Name>
          <Value>122.88</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>SelectedSniffer</Name>
          <Value>1</Value>
        </Setting>
        <Setting>
          <Type>System.Double</Type>
          <Name>Ad9528ClockIn</Name>
          <Value>30.72</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TrkTx2QEC</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TDDFDD</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>CalTxLOL</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>ObsRxLaneRate</Name>
          <Value>6144</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxLane3</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxInvert2</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TrkRx2QEC</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Byte</Type>
          <Name>Rx1GainIndex</Name>
          <Value>255</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>ObsChannelSelect</Name>
          <Value>1</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>CalRxQEC</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FPreEmphasis</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxF</Name>
          <Value>4</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxLane0</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TDDindex</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>Tx2Enable</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxPreEmphasis</Name>
          <Value>4</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>DCrossBar</Name>
          <Value>2</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>DInvert3</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>SelectedTx</Name>
          <Value>6</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ExternalCalTxLOL</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>DeviceClock</Name>
          <Value>1</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>ObsRxChannelSelect</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ObsRxScrambling</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FCrossBar</Name>
          <Value>27</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TrkTx1QEC</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>FInvert1</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxInvert2</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxInvert4</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxInvert3</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TrkTx1LOL</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Double</Type>
          <Name>SnifferRFLOfreq</Name>
          <Value>3500</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxInvert</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>InternalCalTxLOL</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ObsRxLane3</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxInvert3</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxLane1</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxLane3</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>SnifferRFLOExtLo</Name>
          <Value>NO</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>DInvert1</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ObsRxLane0</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>DInvert2</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxOffsetK</Name>
          <Value>32</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxLID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>CalTxQEC</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxKOffset</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxK</Name>
          <Value>32</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxKOffset</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxScrambling</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Double</Type>
          <Name>TxRFLOfreq</Name>
          <Value>3500</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>SysRef</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxDID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TrkRx1QEC</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxL</Name>
          <Value>2</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxRelink</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>Rx1Enable</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxLID</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Byte</Type>
          <Name>Rx2GainIndex</Name>
          <Value>255</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxOffsetK</Name>
          <Value>31</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ObsRxRelink</Name>
          <Value>False</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>FInvert2</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>TxM</Name>
          <Value>4</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxRFLOExtLo</Name>
          <Value>NO</Value>
        </Setting>
        <Setting>
          <Type>System.String</Type>
          <Name>FAmp</Name>
          <Value>10</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>TxLane0</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>RxScrambling</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Double</Type>
          <Name>Ad9528ClockOut</Name>
          <Value>245.76</Value>
        </Setting>
        <Setting>
          <Type>System.Boolean</Type>
          <Name>ObsRxLane2</Name>
          <Value>True</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>SelectedRx</Name>
          <Value>5</Value>
        </Setting>
      </ConfigSetting>
      <RxSetting>
        <Setting>
          <Type>System.String</Type>
          <Name>RxTrigger</Name>
          <Value>TDD_SM_PULSE</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>Freq_Max</Name>
          <Value>76.8</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>Rx1GainIdx</Name>
          <Value>255</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>dbFs_Min</Name>
          <Value>-160.00</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>Time_Min</Name>
          <Value>0</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>ADC_Code_Min</Name>
          <Value>-32768.00</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>ADC_Code_Max</Name>
          <Value>32768.00</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>dbFs_Max</Name>
          <Value>0.00</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>Time_Max</Name>
          <Value>106.666666666667</Value>
        </Setting>
        <Setting>
          <Type>System.Decimal</Type>
          <Name>Freq_Min</Name>
          <Value>-76.8</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>Rx2GainIdx</Name>
          <Value>255</Value>
        </Setting>
        <Setting>
          <Type>System.Int32</Type>
          <Name>NumSmpls</Name>
          <Value>1536000</Value>
        </Setting>
      </RxSetting>
      <TxSetting />
      <ObsSetting />
    </PageSettings>

    Config .py
    ########################
    #ADI Demo Python Script
    ########################
    #Gui Version:2.0.68	DLL Version:1.5.2.3566	Fpga Version:46000200 ArmVersion: 5.2.2
    
    #Import Reference to the DLL
    import System
    from System import Array
    from System import Int16
    from System import UInt32
    from System import Byte
    from System import SByte
    import time
    import clr
    clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\AdiCmdServerClient.dll")
    from AdiCmdServerClient import AdiCommandServerClient
    from AdiCmdServerClient import Enums
    from AdiCmdServerClient import MykDpdConfig
    from AdiCmdServerClient import MykClgcConfig
    from AdiCmdServerClient import MykVswrConfig
    from AdiCmdServerClient import TddFsmParameters_us
    from AdiCmdServerClient import MykonosProfileData
    from AdiCmdServerClient.AD9528 import AD9528Settings
    
    #Create an Instance of the Class
    Link = AdiCommandServerClient.Instance
    Mykonos = AdiCommandServerClient.Instance.Mykonos
    FpgaMykonos = AdiCommandServerClient.Instance.FpgaMykonos
    
    #Connect to the Zynq Platform
    #Connect to the Zynq Platform
    if(Link.hw.Connected == 1):
        Connect = 1
    else:
    	Connect = 0
    	Link.hw.Connect("192.168.99.248", 55555)
       
    
    ############################################################
    #                      initStructures                      #
    ############################################################
    fpgaId = Link.identify()
    cmdSrvVersion = Link.version()
    Link.Mykonos.init_clearProfiles()
    Link.Mykonos.init_clocks(122880, 6144000, Link.Mykonos.VCODIV.VCODIV_1, 4)
    
    
    ############################################################
    #       Rx Profile Rx 100MHz, IQrate 153.6MSPS, Dec5       #
    ############################################################
    Link.Mykonos.init_rxsettings(1, Mykonos.RXCHANNEL.RX1_RX2, 0, 3500000000, 0)
    Link.Mykonos.init_rxProfiles(1, 1, 2, 5, 1, 1, 153600, 100000000, 100000)
    Link.Mykonos.init_firfilters(1, Mykonos.FILTERNAME.RX, 'C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\Resources\\DigitalFilters\\RxApp15_BW100_ADC1536_OR153p6.ftr')
    
    
    ############################################################
    #     Tx Profile Tx 100/250MHz, IQrate 307.2MSPS, Dec5     #
    ############################################################
    Link.Mykonos.init_txsettings(1, Mykonos.TXATTENSTEPSIZE.TXATTEN_0P05_DB, Mykonos.TXCHANNEL.TX1_TX2, 0, 3500000000, 10000, 10000)
    Link.Mykonos.init_txProfiles(1, Mykonos.DACDIV.DACDIV_2p5, 1, 2, 1, 1, 307200, 100000000, 250000000, 236846, 125000)
    Link.Mykonos.init_firfilters(1, Mykonos.FILTERNAME.TX, 'C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\Resources\\DigitalFilters\\TxApp49_307p2_BW250_PriSigBW100.ftr')
    
    
    ############################################################
    #     Snf rx Profile SRx 20MHz, IQrate 38.4MSPS, Dec5      #
    ############################################################
    Link.Mykonos.init_snifferProfiles(1, 1, 4, 5, 2, 38400, 20000000, 120000)
    Link.Mykonos.init_firfilters(1, Mykonos.FILTERNAME.SNIFFER, 'C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\Resources\\DigitalFilters\\RxApp203_BW20_ADC1536_OR38p4.ftr')
    
    
    ############################################################
    #    Obs rx Profile ORX 240MHz, IQrate 307.2MSPS, Dec5     #
    ############################################################
    Link.Mykonos.init_obsrxsettings(1, 31, Mykonos.OBSRX_LO_SOURCE.OBSLO_TX_PLL, 3500000000, 0, Mykonos.OBSRXCHANNEL.OBS_RXOFF)
    Link.Mykonos.init_obsProfiles(1, 1, 1, 5, 1, 307200, 240000000, 100000)
    Link.Mykonos.init_firfilters(1, Mykonos.FILTERNAME.ORX, 'C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\Resources\\DigitalFilters\\RxApp306_BW240_ADC1536_OR307p2.ftr')
    
    
    ############################################################
    #                        initAD9528                        #
    ############################################################
    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)
    
    pllStatus = Link.Ad9528.readPllStatus()
    print 'Ad9528 pllStatus =', hex(pllStatus)
    Link.Mykonos.init_armGpioStructure(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    ############################################################
    #                         initDPD                          #
    ############################################################
    mykDpdConfig = MykDpdConfig()
    mykDpdConfig.Damping = 5
    mykDpdConfig.NumWeights = 1
    mykDpdConfig.ModelVersion = 2
    mykDpdConfig.HighPowerModelUpdate = 1
    mykDpdConfig.ModelPriorWeight = 20
    mykDpdConfig.RobustModeling = 0
    mykDpdConfig.Samples = 512
    mykDpdConfig.OutlierThreshold = 4096
    mykDpdConfig.AdditionalDelayOffset = 0
    mykDpdConfig.PathDelayPnSeqLevel = 255
    mykDpdConfig.WeightsReal = Array[SByte]([64, 0, 0])
    mykDpdConfig.WeightsImag = Array[SByte]([0, 0, 0])
    Link.Mykonos.init_dpdConfigStruct(1, mykDpdConfig)
    Link.Mykonos.init_enableDpd(1, 1)
    mykClgcConfig = MykClgcConfig()
    mykClgcConfig.Tx1DesiredGain = -2000
    mykClgcConfig.Tx2DesiredGain = -2000
    mykClgcConfig.Tx1AttenLimit = 0
    mykClgcConfig.Tx2AttenLimit = 0
    mykClgcConfig.Tx1ControlRatio = 75
    mykClgcConfig.Tx2ControlRatio = 75
    mykClgcConfig.AllowTx1AttenUpdates = 0
    mykClgcConfig.AllowTx2AttenUpdates = 0
    mykClgcConfig.AdditionalDelayOffset = 0
    mykClgcConfig.PathDelayPnSeqLevel = 255
    mykClgcConfig.Tx1RelThreshold = 600
    mykClgcConfig.Tx2RelThreshold = 600
    mykClgcConfig.Tx1RelThresholdEn = 0
    mykClgcConfig.Tx2RelThresholdEn = 0
    Link.Mykonos.init_clgcConfigStruct(1, mykClgcConfig)
    mykVswrConfig = MykVswrConfig()
    mykVswrConfig.AdditionalDelayOffset = 0
    mykVswrConfig.PathDelayPnSeqLevel = 255
    mykVswrConfig.Tx1VswrSwitchGpio3p3Pin = 0
    mykVswrConfig.Tx2VswrSwitchGpio3p3Pin = 1
    mykVswrConfig.Tx1VswrSwitchPolarity = 0
    mykVswrConfig.Tx2VswrSwitchPolarity = 0
    mykVswrConfig.Tx1VswrSwitchDelay_us = 50
    mykVswrConfig.Tx2VswrSwitchDelay_us = 50
    Link.Mykonos.init_vswrConfigStruct(1, mykVswrConfig)
    
    ############################################################
    #                         initJESD                         #
    ############################################################
    Link.Mykonos.init_jesd204bdeframer(1, 0, 0, 0, 4, 32, 1, 1, 15, 228, 1, 0, 0, 0, 0)
    Link.Mykonos.init_jesd204bframer(1, 0, 0, 0, 4, 32, 1, 1, 10, 228, 22, 4, 0, 0, 0, 0, 0, 0)
    Link.Mykonos.init_obsRxFramer(1, 0, 0, 0, 2, 32, 1, 1, 5, 228, 22, 4, 0, 0, 0, 0, 1, 1)
    
    ############################################################
    #                       init Mykonos                       #
    ############################################################
    Link.FpgaMykonos.resetFPGAIP(0x7)
    Link.FpgaMykonos.resetFPGAIP(0x0)
    Link.FpgaMykonos.resetFpgaRegisters()
    
    Link.Mykonos.resetDevice()
    Link.Mykonos.initialize()
    
    Link.fpgaWrite(0x40, 0x1)
    pllStatus = Link.Mykonos.checkPllsLockStatus()
    print 'Mykonos pllStatus =', hex(pllStatus)
    if not (pllStatus & 0x01):print 'Error pllStatus = ' + System.String(pllStatus)
    
    mcsStatus = Link.Mykonos.enableMultichipSync(1, 0)
    Link.Ad9528.requestSysref(True)
    Link.Ad9528.requestSysref(True)
    mcsStatus = Link.Mykonos.enableMultichipSync(0, 0)
    print 'MCS Status = ', hex(mcsStatus)
    
    Link.Mykonos.initArm()
    Link.SetLogLevel(0)
    Link.Mykonos.loadArm('C:\\Program Files (x86)\\Analog Devices\\AD9371 Transceiver Evaluation Software\\Resources\\Mykonos_M3.bin')
    Link.SetLogLevel(63)
    
    ArmStatus = Link.Mykonos.verifyArmChecksum()
    print 'ArmStatus =', hex(ArmStatus)
    if not (ArmStatus & 0x01):print 'Error ArmStatus  = ' + System.String(ArmStatus)
    Link.hw.ReceiveTimeout =3000
    time.sleep (0.2)
    
    pllStatus = Link.Mykonos.checkPllsLockStatus()
    print 'pllStatus = ', hex(pllStatus)
    if not (pllStatus & 0x01):print 'Error pllStatus  = ' + System.String(pllStatus)
    
    time.sleep (0.01)
    Link.hw.ReceiveTimeout =0
    Link.FpgaMykonos.setupJesd204(122880, 153600, 4, 10, 32, 1, 307200, 4, 15, 32, 1, 307200, 38400, 5, 32, 1)
    Link.fpgaWrite(0x540, 0xE4)
    Link.fpgaWrite(0x544, 0xE4)
    
    ############################################################
    #                       Set RF plls                        #
    ############################################################
    Link.Mykonos.setRfPllFrequency(Mykonos.PLLNAME.RX_PLL, 3500000000)
    Link.Mykonos.setRfPllFrequency(Mykonos.PLLNAME.TX_PLL, 3500000000)
    Link.Mykonos.setRfPllFrequency(Mykonos.PLLNAME.SNIFFER_PLL, 3500000000)
    pllStatus = Link.Mykonos.checkPllsLockStatus()
    print 'pllStatus = ', hex(pllStatus)
    
    
    ############################################################
    #                        Setup GPIO                        #
    ############################################################
    Link.Mykonos.setRx1GainCtrlPin(0, 0, 0, 0, 0)
    Link.Mykonos.setRx2GainCtrlPin(0, 0, 0, 0, 0)
    Link.Mykonos.setTx1AttenCtrlPin(0, 0, 0, 0, 0)
    Link.Mykonos.setTx2AttenCtrlPin(0, 0, 0, 0)
    Link.Mykonos.setupGpio(0, Mykonos.GPIO_MODE.GPIO_MONITOR_MODE, Mykonos.GPIO_MODE.GPIO_MONITOR_MODE, Mykonos.GPIO_MODE.GPIO_MONITOR_MODE, Mykonos.GPIO_MODE.GPIO_BITBANG_MODE, Mykonos.GPIO_MODE.GPIO_BITBANG_MODE)
    
    ############################################################
    #                     Set MANUAL Gains                     #
    ############################################################
    Link.Mykonos.setRx1ManualGain(255)
    Link.Mykonos.setRx2ManualGain(255)
    Link.Mykonos.setObsRxManualGain(Mykonos.OBSRXCHANNEL.OBS_RX1_TXLO, 255)
    Link.Mykonos.setObsRxManualGain(Mykonos.OBSRXCHANNEL.OBS_RX2_TXLO, 255)
    Link.Mykonos.setObsRxManualGain(Mykonos.OBSRXCHANNEL.OBS_SNIFFER_A, 255)
    Link.Mykonos.setObsRxManualGain(Mykonos.OBSRXCHANNEL.OBS_SNIFFER_B, 255)
    Link.Mykonos.setObsRxManualGain(Mykonos.OBSRXCHANNEL.OBS_SNIFFER_C, 255)
    
    ############################################################
    #                 Initialize attenuations                  #
    ############################################################
    Link.Mykonos.setTx1Attenuation(0)
    Link.Mykonos.setTx2Attenuation(0)
    
    ############################################################
    #    Setting BBP overSampling For Observation Channels     #
    ############################################################
    Link.FpgaMykonos.setupJesd204bObsRxOversampler(FpgaMykonos.FPGA_SAMPLE_DECIMATION.DECIMATE_BY_8, 0)
    
    ############################################################
    #                        ConfigDPD                         #
    ############################################################
    Link.Mykonos.configDpd()
    Link.Mykonos.configClgc()
    Link.Mykonos.configVswr()
    
    ############################################################
    #                        DoInitCals                        #
    ############################################################
    calMask = 0
    calMask |= (int(Link.Mykonos.CALMASK.TX_BB_FILTER))
    calMask |= (int(Link.Mykonos.CALMASK.ADC_TUNER))
    calMask |= (int(Link.Mykonos.CALMASK.TIA_3DB_CORNER))
    calMask |= (int(Link.Mykonos.CALMASK.DC_OFFSET))
    calMask |= (int(Link.Mykonos.CALMASK.TX_ATTENUATION_DELAY))
    calMask |= (int(Link.Mykonos.CALMASK.RX_GAIN_DELAY))
    calMask |= (int(Link.Mykonos.CALMASK.FLASH_CAL))
    calMask |= (int(Link.Mykonos.CALMASK.PATH_DELAY))
    calMask |= (int(Link.Mykonos.CALMASK.LOOPBACK_RX_LO_DELAY))
    calMask |= (int(Link.Mykonos.CALMASK.LOOPBACK_RX_RX_QEC_INIT))
    calMask |= (int(Link.Mykonos.CALMASK.TX_LO_LEAKAGE_INTERNAL))
    calMask |= (int(Link.Mykonos.CALMASK.TX_QEC_INIT))
    calMask |= (int(Link.Mykonos.CALMASK.RX_LO_DELAY))
    calMask |= (int(Link.Mykonos.CALMASK.RX_QEC_INIT))
    #CalMask = 0x7DFF
    Link.hw.ReceiveTimeout =0
    Link.Mykonos.runInitCals(calMask)
    Link.hw.ReceiveTimeout =0
    Link.Mykonos.waitInitCals(15000, 0, 0)
    Link.Mykonos.readArmCmdStatus(0, 0)
    Link.Mykonos.readArmCmdStatByte(2, 0)
    Link.hw.ReceiveTimeout =5000
    
    ############################################################
    #                    EnableTrackingCals                    #
    ############################################################
    calMask = (int(Link.Mykonos.TRACKING_CALMASK.NO_CALS_ENABLED))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.RX1_QEC))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.RX2_QEC))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.TX1_LOL))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.TX2_LOL))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.TX1_QEC))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.TX2_QEC))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.ORX1_QEC))
    calMask |= (int(Link.Mykonos.TRACKING_CALMASK.ORX2_QEC))
    #CalMask = 0xFF
    Link.hw.ReceiveTimeout =0
    Link.Mykonos.enableTrackingCals(calMask)
    Link.Mykonos.radioOn()
    Link.Mykonos.setObsRxPathSource(Mykonos.OBSRXCHANNEL.OBS_RXOFF)
    Link.Mykonos.setObsRxPathSource(Mykonos.OBSRXCHANNEL.OBS_INTERNALCALS)
    Link.Mykonos.radioOff()
    
    ############################################################
    #                    EnableRxFramerLink                    #
    ############################################################
    Link.FpgaMykonos.resetFPGAIP(0x6)
    Link.FpgaMykonos.resetFPGAIP(0x0)
    Link.FpgaMykonos.enableJesd204bRxDeframer(False)
    Link.FpgaMykonos.enableJesd204bObsRxDeframer(False)
    
    Link.Mykonos.enableSysrefToRxFramer(1)
    Link.Mykonos.enableSysrefToObsRxFramer(1)
    Link.FpgaMykonos.enableJesd204bRxDeframer(True)
    Link.FpgaMykonos.enableJesd204bObsRxDeframer(True)
    
    
    ############################################################
    #                       EnableTxLink                       #
    ############################################################
    Link.FpgaMykonos.resetFPGAIP(0x1)
    Link.FpgaMykonos.enableJesd204bFramer(False)
    Link.FpgaMykonos.resetFPGAIP(0x0)
    
    Link.Mykonos.enableSysrefToDeframer(0)
    Link.Mykonos.resetDeframer()
    
    Link.FpgaMykonos.enableJesd204bFramer(True)
    
    Link.Mykonos.enableSysrefToDeframer(1)
    
    
    ############################################################
    #                      Bring up Links                      #
    ############################################################
    Link.Ad9528.requestSysref(True)
    
    ############################################################
    #                       Status Check                       #
    ############################################################
    status = Link.Mykonos.readRxFramerStatus()
    print 'readRxFramerStatus= ', hex(status)
    
    status = Link.Mykonos.readOrxFramerStatus()
    print 'readOrxFramerStatus= ', hex(status)
    
    status = Link.Mykonos.readDeframerStatus()
    print 'readDeframerStatus= ', hex(status)
    
    status = Link.Mykonos.jesd204bIlasCheck(0)
    print 'jesd204bIlasCheck = ', hex(status)
    
    syncStatus = Link.FpgaMykonos.readSyncbStatus()
    print 'readSyncbStatus= ', hex(syncStatus)
    
    mcsStatus = Link.Mykonos.enableMultichipSync(0, 0)
    #MCS Status = 0
    print 'MCS Status = ', hex(mcsStatus)
    
    ############################################################
    #                         Radio On                         #
    ############################################################
    Link.Mykonos.radioOn()
    
    
    RadioState = Link.Mykonos.getRadioState(0)
    print 'Radio State = ', hex(RadioState)
    
    
    #Read the Version
    print Link.version()
    
    #Disconnect from the Zynq Platform
    if(Connect == 0):
        Link.hw.Disconnect()


    Regards,
    Jedrzej



  • I am looking to test with the same files shared by you and trying to replicate your issue in our lab.

    I have loaded the GUI setup file in our lab setup and see that there is error related to "incorrect profile selected for Rx and ORX" . Is the profile working fine in AD9375 eval board?

    And the FDD waveform shared is 307.2MHz (etm_3.1_20MHz_307.2MHz_FDD_pci_1r) and the use case TX sampling rate is 122.88MHz. Am I missing anything here?

  • Can you also share the VSA setup(.setx) file with us?