Part Number: AFE7920EVM
Hi Team,
After a lot of appreciated input from your side, we have finally managed to enable AFE EVM to communicate with our FPGA (Kintex 7 series).
However, upon doing this, we have encountered several issues regarding the JESD protocol. In fact, the error Latte gives is shown below:
###########Device DAC JESD-RX 0 Link Status###########
Serdes-FIFO error for lane 0: 1
Serdes-FIFO error for lane 1: 1
Serdes-FIFO error for lane 2: 1
Serdes-FIFO error for lane 3: 1
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: 0xf000
###################################
###########Device DAC JESD-RX 1 Link Status###########
Serdes-FIFO error for lane 0: 1
Serdes-FIFO error for lane 1: 1
Serdes-FIFO error for lane 2: 1
Serdes-FIFO error for lane 3: 1
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: 0xf000
###################################
#Done executing .. AFE79xx/bringup/AWS_VLBI_test_script_working.py
#End Time 2023-02-24 13:50:04.073000
#Execution Time = 31.3729999065 s
#================ ERRORS:18, WARNINGS:0 ================#
In addition, even with this error, there is still some signal visible on the spectrum analyzer when FPGA tries to send a BOC type signal to the AFE DACs:

However, the observed spectrum fluctuates and is very much just some artifact due to the error in the JESD interface.
On the FPGA side we use the same LMFSHd parameter as in Latte script, 44210, with K parameter set to 16.
The Latte code we use is given below:
########## Board bringup procedure ##########
#mainWindow.clearSession()
#base_directory = "C:\\Users\\a0217443\\Documents\\Texas Instruments\\Latte\\projects\\AFE79xx\\bringup\\"
#mainWindow.runFile(base_directory + r"setup.py")
#mainWindow.runFile(base_directory + r"devInit.py")
########## General settings: ##########
# VLBI Tx frequency plan details:
custom_clk = 3
ncoFreqModes = ["1KHz", "FCW"]
Fnco_tx1 = 2245.0
Fnco_rx1 = 500.0
if (custom_clk == 1):
f0 = 163.68
Nrx = 18
Nddc = 6
Ntx = 4
NFRef = 1
NfpgaRefClk = 1
NinputClk = 1
LMFSHdRx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']#
LMFSHdFb = ['22210', '22210']
LMFSHdTx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']#
syncLoopBack = False
jesdLoopbackEn = True
elif custom_clk == 0:
f0 = 122.88
Nrx = 24
Nddc = 12
Ntx = 3
NFRef = 4
NfpgaRefClk = 2
NinputClk = 12
LMFSHdRx = ['24410', '24410', '24410', '24410']
LMFSHdFb = ['24410', '24410']
LMFSHdTx = ['24410', '24410', '24410', '24410']
syncLoopBack = False
jesdLoopbackEn = True
elif custom_clk == 2:
f0 = 163.68
Nrx = 12
Nddc = 6
Ntx = 3#6
NFRef = 1
NfpgaRefClk = 1
NinputClk = 1
LMFSHdRx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']
LMFSHdFb = ['22210', '22210']
LMFSHdTx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']
syncLoopBack = False
jesdLoopbackEn = True
elif custom_clk == 3:
f0 = 163.68
Nrx = 12
Nddc = 6
Ntx = 3#6
NFRef = 1
NfpgaRefClk = 1
NinputClk = 1
LMFSHdRx = ['44210', '44210', '44210', '44210']
LMFSHdFb = ['22210', '22210']
LMFSHdTx = ['44210', '44210', '44210', '44210']
syncLoopBack = True
jesdLoopbackEn = False
Nduc = Nddc*Ntx
# AFE general settings
AFE.systemStatus.loadTrims = 1
setupParams.skipFpga = 1
setupParams.fpgaRefClk = f0*NfpgaRefClk
sysParams = AFE.systemParams
sysParams.FRef = f0*NFRef
########## Analog settings: AFE 79XX EVM ##########
# General system settings
sysParams.RRFMode = 0
sysParams.modeTdd = 0
sysParams.adcSelect0 = [0, 1, 2]
sysParams.adcSelect1 = [0, 1, 2]
sysParams.useSpiSysref = 0
sysParams.sysrefTermination = 0
sysParams.ncoFreqMode = ncoFreqModes[custom_clk != 0]
sysParams.spiMode = 1
# ADC settings
sysParams.FadcRx = f0*Nrx
sysParams.rxEnable = [1, 1, 1, 1]
sysParams.externalClockRx = 0
sysParams.halfRateModeRx = [0, 0]
sysParams.ddcFactorRx = [Nddc, Nddc, Nddc, Nddc]
sysParams.numBandsRx = [0, 0, 0, 0]
sysParams.numRxNCO = 1
sysParams.ncoRxMode = [0, 0]
sysParams.broadcastRxNcoSel = 0
sysParams.rxNco0 = [ [Fnco_rx1, Fnco_rx1],
[870.0, 870.0],
[637.5, 637.5],
[637.5, 637.5]]
sysParams.rxNco1 = [ [Fnco_rx1, Fnco_rx1],
[870.0, 870.0],
[637.5, 637.5],
[637.5, 637.5]]
# FB settings
sysParams.FadcFb = sysParams.FadcRx
sysParams.fbEnable = [0, 0]
sysParams.halfRateModeFb = [0, 0]
sysParams.ddcFactorFb = [Nddc, Nddc]
sysParams.numBandsFb = [0, 0]
sysParams.numFbNCO = 1
sysParams.ncoFbMode = 0
sysParams.fbNco0 = [1000, 1000]
sysParams.fbNco1 = [1000, 1000]
sysParams.fbNco2 = [1000, 1000]
sysParams.fbNco3 = [1000, 1000]
# DAC settings
# DAC sampling rate must fall into one of the following frequency ranges (due to pll restrictions): [7.2 GHz, 7.68 GHz] or [8.8 GHz, 9.1 GHz] or [9.7 GHz, 10.24 GHz] or [11.6 GHz, 12.08 GHz]
sysParams.Fdac = sysParams.FadcRx*Ntx
sysParams.txEnable = [1, 1, 1, 1]
sysParams.externalClockTx = 0
sysParams.halfRateModeTx = [0, 0]
sysParams.ducFactorTx = [Nduc, Nduc, Nduc, Nduc]
sysParams.numBandsTx = [0, 0, 0, 0]
sysParams.numTxNCO = 1
sysParams.combineDucMode = [0, 0]
sysParams.enableDacInterleavedMode = 0
sysParams.ncoTxMode = [0, 0]
sysParams.broadcastTxNcoSel = 0
sysParams.txNco0 = [ [Fnco_tx1, Fnco_tx1],
[5020.0, 5020.0],
[8212.5, 8212.5],
[6812.5, 6812.5]]
sysParams.txNco1 = [ [Fnco_tx1, Fnco_tx1],
[5020.0, 5020.0],
[8212.5, 8212.5],
[6812.5, 6812.5]]
########## Clock distribution mode setting ##########
setupParams.skipLmk = 0
lmkParams.pllEn = (custom_clk == 0)
lmkParams.inputClk = f0*NinputClk
lmkParams.sysrefFreq = lmkParams.inputClk#f0*Nrx/1024
lmkParams.lmkFrefClk = 1
lmkParams.lmkPulseSysrefMode = 0
#AFE.systemStatus.sysrefFreq = lmkParams.inputClk
#AFE.LMK.lmkConfig()
########## JESD204 settings AFE 79XX EVM ##########
sysParams.topLevelSystemMode = 'StaticTDDMode'
sysParams.jesdSystemMode = [3, 3]
sysParams.serdesFirmware = 1
sysParams.jesdABLvdsSync = 1
sysParams.jesdCDLvdsSync = 1
sysParams.syncLoopBack = syncLoopBack
sysParams.jesdLoopbackEn = jesdLoopbackEn
sysParams.setIlaParams = 1
sysParams.jesdTxIlaM = [8, 8, 2, 8, 8, 2]
sysParams.jesdTxIlaLid = [0, 1, 2, 3, 4, 5, 6, 7]
sysParams.jesdTxIlaL = [4, 4, 2, 4, 4, 2]
sysParams.LMFSHdRx = LMFSHdRx
sysParams.jesdRxProtocol = [0, 0]
sysParams.jesdRxLaneMux = [0, 1, 2, 3, 4, 5, 6, 7]
sysParams.jesdRxRbd = [4, 4]
sysParams.rxJesdTxScr = [1, 1, 1, 1]
sysParams.rxJesdTxK = [16, 16, 16, 16]
sysParams.rxJesdTxSyncMux = [0, 0, 0, 0]
sysParams.rxDataMux = [0, 1, 2, 3, 4, 5, 6, 7]
sysParams.serdesRxLanePolarity = [0, 0, 0, 0, 0, 0, 0, 0]
sysParams.adcDataMuxEn = 0
sysParams.LMFSHdFb = LMFSHdFb
sysParams.fbJesdTxScr = [1, 1]
sysParams.fbJesdTxK = [16, 16]
sysParams.fbJesdTxSyncMux = [0, 0]
sysParams.fbDataMux = [0, 1]
sysParams.LMFSHdTx = LMFSHdTx
sysParams.jesdTxProtocol = [0, 0]
sysParams.jesdTxLaneMux = [0, 1, 2, 3, 4, 5, 6, 7]
#sysParams.jesdTxRbd = [4, 4]
sysParams.jesdRxScr = [1, 1, 1, 1]
sysParams.jesdRxK = [16, 16, 16, 16]
sysParams.jesdRxSyncMux = [0, 0, 0, 0]
sysParams.txDataMux = [0, 1, 2, 3, 4, 5, 6, 7]
sysParams.serdesTxLanePolarity = [0, 0, 0, 0, 0, 0, 0, 0]
#sysParams.dacDataMuxEn = 0
#sysParams.serdesTxPreCursor = [6, 6, 6, 6, 6, 6, 6, 6]
#sysParams.serdesTxPostCursor = [0, 0, 0, 0, 0, 0, 0, 0]
#sysParams.serdesTxMainCursor = [3, 0, 0, 0, 0, 0, 0, 3]
########## Dummy txt ##########
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']}
lmk.rawWriteLogEn = 1
lmk.logEn = 1
logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
logDumpInst.logFormat = 0x01
logDumpInst.rewriteFile = 1
logDumpInst.rewriteFileFormat4 = 1
device.optimizeWrites = 0
device.rawWriteLogEn = 1
device.delay_time = 0
AFE.deviceBringup()
AFE.TOP.overrideTdd(15,3,15)
# Force Latte to program the LMK outputs (relevant to the FPGA) in bypass/distribution mode
lmk.head.page.DCLK0_SDCLK1_controls.Analog_Dig_Delay.dclk_mux_lt_1_0_gt_=2
lmk.head.page.DCLK8_SDCLK9_controls.Analog_Dig_Delay.dclk_mux_lt_1_0_gt_=2
lmk.head.page.DCLK12_SDCLK13_controls.Analog_Dig_Delay.dclk_mux_lt_1_0_gt_=2
AFE.saveCAfeParamsFile()
# C273 (GTXCLK_P, yellow) is now at 163.68 MHz (sine-wave-looking signal, with noticed background noise, however, enough for FPGA to get a PLL lock)
# C259 (FPGA_CLK2P/FPGA_REFCLK2_P, red) is now at 163.68 MHz (sine-wave-looking signal, with noticed background noise, however, enough for FPGA to get a PLL lock)
# R353 (CAR_SYSREF_P/FPGA_SYSREF_P, green) is now at ?? MHz (Hard to really tell)
Note that when switching to the loop-back mode (jesdLoopbackEn=1 and syncLoopBack=0), we can clearly see in the spectrum analyzer the same signal sent by the analog signal generator (incoming to AFE ADC).
If you could provide any input from your side about the origin of this error and how to resolve it, we would appreciate it greatly.

