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: Error: LOS Indicator for (Serdes Loss of signal) lane 0: 1

Part Number: AFE7950EVM
Other Parts Discussed in Thread: AFE7950

Tool/software:

Hi,

We are working on integrating AFE7950EVM and KCU105. FPGA is programmed with LMFSH = 24410, k= 32 for both ADC & DAC. AFE7950EVM is programmed through python script with same LMFSHK as FPGA.

1. We are getting the following in the AFE log:

#======

#======

#Executing .. AFE7950/bringup/S1_OnboardClk_RX_250M_TX_FB_500M.py

#Start Time 2024-07-23 18:11:44.916000

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 Clock Divider - Device registers reset.

LMK Clock Divider - Device registers reset.

REFCLOCK is used from LMK source, ensure board connections are ok to do the same

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

//Firmware Version = 11000

//PG Version = 1

//Release Date [dd/mm/yy] = 10/7/19

patchSize=11697

//Patch Version = 165

//PG Version = 0

//Release Date [dd/mm/yy] = 27/11/21

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###########

LOS Indicator for (Serdes Loss of signal) lane 0: 1

Serdes-FIFO error for lane 0: 1

Serdes-FIFO error for lane 1: 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.

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

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

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

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

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

LOS Indicator for (Serdes Loss of signal) lane 0: 1

Serdes-FIFO error for lane 0: 1

Serdes-FIFO error for lane 1: 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.

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

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

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

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

AFE Configuration Complete

#Done executing .. AFE7950/bringup/S1_OnboardClk_RX_250M_TX_FB_500M.py

#End Time 2024-07-23 18:12:26.706000

#Execution Time = 41.7900002003 s

I'm attaching my python script file. Kindly let us know how to get through the errors.

2. Also, we are not getting DAC_SYNC on the pin, SYNC pin is always low in chipscope of FPGA. Is it because of the following error? SYNC from AFE is active low or high?

regards

Salman

##############		Read me			##############
#In HSDC Pro DAC tab, Select AFE79xx_2x2TX_44210; Data Rate = 491.52M
#In HSDC Pro ADC tab, Select AFE79xx_2x2RX_24410; Data Rate = 245.76M ---> To capture 4 RX channels
#In HSDC Pro ADC tab, Select AFE79xx_1x2FB_44210; Data Rate = 491.52M ---> To capture 2 FB channels

sysParams=AFE.systemParams
sysParams.__init__();sysParams.chipVersion=chipVersion

setupParams.skipFpga = 1 # setup FPGA (TSW14J56) using HSDC Pro 

##############		Top Level			##############
sysParams.FRef			= 491.52
sysParams.FadcRx		= 2949.12
sysParams.FadcFb		= 2949.12
sysParams.Fdac			= 2949.12*4
sysParams.externalClockRx=False
sysParams.externalClockTx=False
													
##############		Digital Chain		##############

		#####	RX	#####
sysParams.ddcFactorRx	=	[12,12,12,12]			#DDC decimation factor for RX A, B, C and D
sysParams.rxNco0		= 	[[9500,9500],			#Band0, Band1 for RXA 
							[9500,9500],        	#Band0, Band1 for RXB 
							[9500,9500],        	#Band0, Band1 for RXC 
							[9500,9500]]        	#Band0, Band1 for RXD 

		#####	FB	#####
sysParams.fbEnable		=	[False,False]
sysParams.ddcFactorFb	=	[6,6]					#DDC decimation factor for FB 1 and 2
sysParams.fbNco0		= 	[9500,9500]				#Band0 for FB1 and FB2 

		#####	TX	#####
sysParams.ducFactorTx	=	[48,48,48,48]			#DUC interpolation factor for TX A, B, C and D		
sysParams.txNco0		= 	[[9500,9500],			#Band0, Band1 for TXA 
							[9500,9500],        	#Band0, Band1 for TXB 
							[9500,9500],        	#Band0, Band1 for TXC 
							[9500,9500]]        	#Band0, Band1 for TXD


##############		JESD		##############

		#####	ADC-JESD	#####
sysParams.jesdSystemMode= [1,1]
													#SystemMode 0:	2R1F-FDD						; rx1-rx2-fb -fb
													#SystemMode 1:	1R1F-FDD						; rx -rx -fb -fb
													#SystemMode 2:	2R-FDD							; rx1-rx1-rx2-rx2
													#SystemMode 3:	1R								; rx -rx -rx -rx
													#SystemMode 4:	1F								; fb -fb- fb -fb
													#SystemMode 5:	1R1F-TDD						; rx/fb-rx/fb-rx/fb-rx/fb
													
sysParams.jesdTxProtocol= [0,0]						# 0 - 8b/10b encoding; 2 - 64b/66b encoding 
sysParams.LMFSHdRx		= ["24410","24410","24410","24410"]
													# The 2nd and 4th are valid only for jesdSystemMode values in (0,2).
													# For other modes, select 4 converter modes for 1st and 3rd.
sysParams.LMFSHdFb		= ["22210","22210"]

sysParams.rxJesdTxScr	= [False,False,False,False]
sysParams.fbJesdTxScr	= [True,True]

sysParams.rxJesdTxK		= [32,32,32,32]
sysParams.fbJesdTxK		= [16,16]

sysParams.jesdTxLaneMux	= [0,1,2,3,4,5,6,7]			# Enter which lanes you want in each location. 
													# 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]]

		#####	DAC-JESD	#####
sysParams.jesdRxProtocol= [0,0]
sysParams.LMFSHdTx		= ["24410","24410","24410","24410"]
sysParams.serdesRxLanePolarity = [1,1,1,1,0,0,0,0]

sysParams.jesdRxLaneMux	= [5,6,4,7,3,2,1,0]			# Enter which lanes you want in each location.
													# 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.jesdRxRbd		= [15, 15]
sysParams.jesdRxScr		= [False,False,False,False]
sysParams.jesdRxK		= [32,32,32,32]


		#####	JESD Common	#####
sysParams.useSpiSysref = False	
sysParams.jesdABLvdsSync= True
sysParams.jesdCDLvdsSync= True
sysParams.syncLoopBack	= True	#JESD Sync signal is connected to FPGA
sysParams.jesdLoopbackEn = False

##############		GPIO		##############
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 Params		##############
setupParams.skipLmk		= False
lmkParams.pllEn			= True
lmkParams.inputClk		= 983.04 # Valid only when lmkParams.pllEn = False
lmkParams.lmkFrefClk	= True
setupParams.fpgaRefClk	= 245.76 # Should be equal to LaneRate/40 for TSW14J56



##############		Logging		##############
logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
logDumpInst.logFormat=0x1 #Modify to 0x1 to save register scequence to log file. Script takes more time to execute.
logDumpInst.rewriteFile=1
logDumpInst.rewriteFileFormat4=1
logDumpInst.logCombinedBurstWrites=True


lmklogDumpInst=mLogDump.logDump(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1_LMK.txt")
lmklogDumpInst.logFormat=0x1 
lmk.logClassInst = lmklogDumpInst
lmk.rawWriteLogEn=1

device.optimizeWrites=0
device.rawWriteLogEn=1

device.delay_time = 0
#-------------------------------------------------------------------------------------------------#

AFE.deviceBringup()

AFE.TOP.overrideTdd(1,1,1)	# bit-wise; 4R,2F,4T

  • Hi Salman,

    The LOS (Serdes Loss of Signal) tells us that the issue is related to the FPGA configuration. Can you confirm that on the FPGA side the JESD IP is configured for the LMFS 48410 and is sending data on all four of the SerDes lanes before configuring the AFE? One additional thing that I noticed is that in your bringup script you are configuring the LMK and AFE at the same time, which could also introduce errors. 

    The correct bring up procedure would be: 

    1. Setup clocks (Program LMK)
    2. Take the JESD IP out of reset and verify the QPLL locks
    3. Take Tx JESD IP out of reset and start sending data from FPGA to DAC over SerDes lanes
    4. Program AFE
    5. Take Rx JESD IP out of reset

    To split up the programming of the LMK and AFE in Latte you can use the two scripts below. 

    LMK Config:

    ##############		Read me			##############
    #In HSDC Pro DAC tab, Select AFE79xx_2x2TX_44210; Data Rate = 491.52M
    #In HSDC Pro ADC tab, Select AFE79xx_2x2RX_24410; Data Rate = 245.76M ---> To capture 4 RX channels
    #In HSDC Pro ADC tab, Select AFE79xx_1x2FB_44210; Data Rate = 491.52M ---> To capture 2 FB channels
    
    sysParams=AFE.systemParams
    sysParams.__init__();sysParams.chipVersion=chipVersion
    
    setupParams.skipFpga = 1 # setup FPGA (TSW14J56) using HSDC Pro 
    
    ##############		Top Level			##############
    sysParams.FRef			= 491.52
    sysParams.FadcRx		= 2949.12
    sysParams.FadcFb		= 2949.12
    sysParams.Fdac			= 2949.12*4
    sysParams.externalClockRx=False
    sysParams.externalClockTx=False
    													
    ##############		Digital Chain		##############
    
    		#####	RX	#####
    sysParams.ddcFactorRx	=	[12,12,12,12]			#DDC decimation factor for RX A, B, C and D
    sysParams.rxNco0		= 	[[9500,9500],			#Band0, Band1 for RXA 
    							[9500,9500],        	#Band0, Band1 for RXB 
    							[9500,9500],        	#Band0, Band1 for RXC 
    							[9500,9500]]        	#Band0, Band1 for RXD 
    
    		#####	FB	#####
    sysParams.fbEnable		=	[False,False]
    sysParams.ddcFactorFb	=	[6,6]					#DDC decimation factor for FB 1 and 2
    sysParams.fbNco0		= 	[9500,9500]				#Band0 for FB1 and FB2 
    
    		#####	TX	#####
    sysParams.ducFactorTx	=	[48,48,48,48]			#DUC interpolation factor for TX A, B, C and D		
    sysParams.txNco0		= 	[[9500,9500],			#Band0, Band1 for TXA 
    							[9500,9500],        	#Band0, Band1 for TXB 
    							[9500,9500],        	#Band0, Band1 for TXC 
    							[9500,9500]]        	#Band0, Band1 for TXD
    
    
    ##############		JESD		##############
    
    		#####	ADC-JESD	#####
    sysParams.jesdSystemMode= [1,1]
    													#SystemMode 0:	2R1F-FDD						; rx1-rx2-fb -fb
    													#SystemMode 1:	1R1F-FDD						; rx -rx -fb -fb
    													#SystemMode 2:	2R-FDD							; rx1-rx1-rx2-rx2
    													#SystemMode 3:	1R								; rx -rx -rx -rx
    													#SystemMode 4:	1F								; fb -fb- fb -fb
    													#SystemMode 5:	1R1F-TDD						; rx/fb-rx/fb-rx/fb-rx/fb
    													
    sysParams.jesdTxProtocol= [0,0]						# 0 - 8b/10b encoding; 2 - 64b/66b encoding 
    sysParams.LMFSHdRx		= ["24410","24410","24410","24410"]
    													# The 2nd and 4th are valid only for jesdSystemMode values in (0,2).
    													# For other modes, select 4 converter modes for 1st and 3rd.
    sysParams.LMFSHdFb		= ["22210","22210"]
    
    sysParams.rxJesdTxScr	= [False,False,False,False]
    sysParams.fbJesdTxScr	= [False,False]
    
    sysParams.rxJesdTxK		= [32,32,32,32]
    sysParams.fbJesdTxK		= [32,32]
    
    sysParams.jesdTxLaneMux	= [0,1,2,3,4,5,6,7]			# Enter which lanes you want in each location. 
    													# 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]]
    
    		#####	DAC-JESD	#####
    sysParams.jesdRxProtocol= [0,0]
    sysParams.LMFSHdTx		= ["24410","24410","24410","24410"]
    sysParams.serdesRxLanePolarity = [1,1,1,1,0,0,0,0]
    
    sysParams.jesdRxLaneMux	= [5,6,4,7,3,2,1,0]			# Enter which lanes you want in each location.
    													# 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.jesdRxRbd		= [15, 15]
    sysParams.jesdRxScr		= [False,False,False,False]
    sysParams.jesdRxK		= [32,32,32,32]
    
    
    		#####	JESD Common	#####
    sysParams.useSpiSysref = False	
    sysParams.jesdABLvdsSync= True
    sysParams.jesdCDLvdsSync= True
    sysParams.syncLoopBack	= True	#JESD Sync signal is connected to FPGA
    sysParams.jesdLoopbackEn = False
    
    ##############		GPIO		##############
    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 Params		##############
    setupParams.skipLmk		= False
    lmkParams.pllEn			= True
    lmkParams.inputClk		= 983.04 # Valid only when lmkParams.pllEn = False
    lmkParams.lmkFrefClk	= True
    setupParams.fpgaRefClk	= 245.76 # Should be equal to LaneRate/40 for TSW14J56
    
    
    
    ##############		Logging		##############
    logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
    logDumpInst.logFormat=0x1 #Modify to 0x1 to save register scequence to log file. Script takes more time to execute.
    logDumpInst.rewriteFile=1
    logDumpInst.rewriteFileFormat4=1
    logDumpInst.logCombinedBurstWrites=True
    
    
    lmklogDumpInst=mLogDump.logDump(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1_LMK.txt")
    lmklogDumpInst.logFormat=0x1 
    lmk.logClassInst = lmklogDumpInst
    lmk.rawWriteLogEn=1
    
    device.optimizeWrites=0
    device.rawWriteLogEn=1
    
    device.delay_time = 0
    #-------------------------------------------------------------------------------------------------#
    setupParams.skipLmk	=	False
    AFE.initializeConfig()
    lmkParams.sysrefFreq = AFE.systemStatus.sysrefFreq
    lmkParams.lmkPulseSysrefMode = False
    AFE.LMK.lmkConfig()

    AFE Config: 

    setupParams.skipLmk	=	1 
    AFE.deviceBringup()
    AFE.TOP.overrideTdd(15,0,15)
    setupParams.skipLmk	=	0

    If the FPGA is not sending data on all four SerDes lanes then the AFE would not pull the SYNC pins high. 

    Regards,

    David Chaparro 

  • Hi David,

    1. FPGA side JESD is configured with LMFS: 24410.

        U have mentioned LMFS 48410. Configuration in FPGA and AFE7950 should be same. Then why 48410 in FPGA and 24410 config in AFE?

    2. I tried with split programming as mentioned by you, same LOS and serdes errors shown in log.

    3. One more query, when I run devInit.py, I'm getting one error "Reset the FPGA and try again". Can you please tell how to get rid of this error? Is there any reset pin need to be connected between AFE and FPGA? 

    Thank you

    Salman Baig

     

  • Hi Salman,

    Please see my responses below.

    1. The AFE has a total of 4 transmit, 4 receive, and 2 feedback channels i.e. 4T4R2F. However, the AFE is designed as two sub-chips (2T2R1F) within the device. Therefore, the parameters given in Latte correspond to each sub-chip. This means that for the LMFS of 24410 in Latte the FPGA should be configured for 48410. 
    2. This error is still there because of the JESD configuration on the FPGA. Please update this on the FPGA and you should no longer get the LOS error.
    3. This error is expected when not using the TI capture card TSW14J58. This error can be ignored for all other FPGAs.

    Regards,

    David Chaparro 

  • Hi David,

    1. I have modified FPGA configuration to 48410, LOS error has gone. But serdes FIFO and comma alignment error exists. Please find the error below:

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

    Serdes-FIFO error for lane 0: 1

    Serdes-FIFO error for lane 1: 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.

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

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

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

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

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

    Serdes-FIFO error for lane 0: 1

    Serdes-FIFO error for lane 1: 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.

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

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

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

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

    AFE Configuration Complete

    #Done executing .. AFE7950/bringup/script12.py

    #End Time 2024-07-30 14:46:57.421000

    #Execution Time = 41.0829999447 s

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

     

    2. Also, regarding SYNC in case of DAC, what is the pulse width of SYNC? I saw in chipscope, its going low only one clock cycle (chipscope is running on 245.76MHz).

    regards

    Salman Baig

  • Hi Salman,

    Okay, now that the LMFS has been corrected can you confirm that the JESD configuration matches on both the AFE and FPGA side. Specifically the K, scrambling, and lane rate are set appropriately? 

    Regards,

    David Chaparro 

  • Hi David,

    K=32, scrambling is off in both FPGA and AFE side. Regarding lane rate, we have set 9.8304 Gbps in FPGA. Same lane rate is seen in latte log.

    regards

    Salman

  • Hi Salman,

    We are taking this offline and I will be closing this post.


    Regards,

    David Chaparro