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.

[参考译文] AFE7900:AFE7900同步问题

Guru**** 2390735 points
Other Parts Discussed in Thread: AFE7900, AFE7900EVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1201866/afe7900-afe7900-sync-problem

器件型号:AFE7900

## sigSource2.frequency = 5.0e9
## sigSource2.amplitude = 10
## sigSource2.on = True
## LmkClkSrc.frequency = 1.0e9
## LmkClkSrc.amplitude = 10
## LmkClkSrc.on = True

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

setupParams.skipFpga 				= 1
sysParams							= AFE.systemParams
setupParams.fpgaRefClk 				= 250	
AFE.systemStatus.loadTrims			= 1
sysParams.FRef                    	= 5000
sysParams.FadcRx                  	= 2500
sysParams.FadcFb				  	= 2500
sysParams.Fdac                    	= 2500*2
sysParams.rxEnable                  = [True]*4
sysParams.txEnable                  = [True]*4
sysParams.fbEnable                  = [False]*2
sysParams.externalClockTx			= True
sysParams.externalClockRx			= True

sysParams.enableDacInterleavedMode	= False 					#DAC interleave mode to save power consumption. Fs/2 - Fin spur occurs

sysParams.modeTdd 					= 0		
										# 0- Single TDD Pin for all Channels
										# 1- Separate Control for 2T/2R/1F
										# 2- Separate Control for 1T/1R/1F			

sysParams.RRFMode 					= 0   #4T4R2F FDD mode
sysParams.jesdSystemMode			= [1,1]
										#SystemMode 0:	2R1F-FDD						; rx1-rx2-fb-fb
										#SystemMode 1:	1R1F-FDD						; rx1-rx1-fb-fb
										#SystemMode 2:	2R-FDD							; rx1-rx1-rx2-rx2
										#SystemMode 3:	1R								; rx1-rx1-rx1-rx1
										#SystemMode 4:	1F								; fb-fb-fb-fb
										#SystemMode 5:	1R1F-TDD						; rx1/fb-rx1/fb-rx1/fb-rx1/fb
										#SystemMode 8:	1R1F-TDD 1R-FDD	(FB-2Lanes)(RX1 RX2 interchanged)		; rx2/fb-rx2/fb-rx1-rx1


sysParams.jesdLoopbackEn			= 0 #Make it 1 to Enable the JESDTX to JESDRX internal loopback
sysParams.LMFSHdRx                	= ['181610']*4	
										# The 2nd and 4th are valid only for jesdSystemMode values in (2,6,7,8). For other modes, select 4 converter modes for 1st and 3rd.
sysParams.LMFSHdFb                	= ['24410']*4
sysParams.LMFSHdTx                	= ['14810']*4
sysParams.jesdTxProtocol            = [0,0]
sysParams.jesdRxProtocol            = [0,0]
sysParams.serdesFirmware			= True 		# If you want to lead any firmware, please speify the path here. Otherwise it will not write any firmware
#sysParams.jesdTxLaneMux				= [0,1,2,3,4,5,6,7]  #orj
sysParams.jesdTxLaneMux				= [0,1,2,3,4,5,6,7]		#OUR CONFIGURATION STx1 and SRx5 & SRx6
												# Enter which lanes you want in each location. 
												# Note that across 2T Mux is not possible in 0.5.
												# For example, if you want to exchange the first two lines of each 2T, this should be [[1,0,2,3],[5,4,6,7]]
#sysParams.jesdRxLaneMux				= [0,4,2,3,1,5,6,7]	#orj
sysParams.jesdRxLaneMux				= [4,1,2,3,5,0,6,7]	#OUR CONFIGURATION STx1 and SRx5 & SRx6
												# Enter which lanes you want in each location.
												# Note that across 2R Mux is not possible in 0.5.
												# For example, if you want to exchange the first two lines of each 2R, this should be [[1,0,2,3],[5,4,6,7]]

sysParams.jesdRxRbd					= [3, 3]

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

sysParams.rxJesdTxK					= [4]*4
sysParams.fbJesdTxK					= [4]*2
sysParams.jesdRxK					= [4]*4
	
sysParams.ncoFreqMode 				= "FCW"

sysParams.txNco0					= 	[[3100,2800],		#Band0, Band1 for TxA for NCO0
										[3100,2800],        #Band0, Band1 for TxB for NCO0
										[3100,2800],        #Band0, Band1 for TxC for NCO0
										[3100,2800]]        #Band0, Band1 for TxD for NCO0

sysParams.rxNco0					= 	[[3100,2800],		#Band0, Band1 for RxA for NCO0
										[3100,2800],        #Band0, Band1 for RxB for NCO0
										[3100,2800],        #Band0, Band1 for RxC for NCO0
										[3100,2800]]        #Band0, Band1 for RxD for NCO0

sysParams.fbNco0					= 	[3100,2800]			#FBA, FBC for NCO0
sysParams.fbNco1					= 	[3100,2800]			#FBA, FBC for NCO1
sysParams.fbNco2					= 	[3100,2800]			#FBA, FBC for NCO2
sysParams.fbNco3					= 	[3100,2800]			#FBA, FBC for NCO3

sysParams.numBandsRx				= [0]*4					# 0 for single, 1 for dual
sysParams.numBandsFb				= [0,0]				
sysParams.numBandsTx				= [0,0,0,0]

sysParams.ddcFactorRx             	= [40]*4			# DDC decimation factor for RX A, B, C and D
sysParams.ddcFactorFb             	= [10]*2
sysParams.ducFactorTx             	= [40]*4

## The following parameters sets up the LMK04828 clocking schemes
lmkParams.pllEn						=	False#True#
lmkParams.inputClk					=	1000#1000 di
lmkParams.sysrefFreq				=	2500./768
lmkParams.lmkFrefClk				=	False

## The following parameters sets up the register and macro dumps
logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
logDumpInst.logFormat				= 0x01
logDumpInst.rewriteFile				= 1
logDumpInst.rewriteFileFormat4		= 1
device.optimizeWrites				= 0
device.rawWriteLogEn				= 1

## The following parameters sets up the SYNCIN and SYNCOUT to interface with the TSW14J57
sysParams.jesdABLvdsSync			= 1
sysParams.jesdCDLvdsSync			= 1
sysParams.rxJesdTxSyncMux			= [0,0,0,0]
sysParams.fbJesdTxSyncMux			= [0,0]
sysParams.jesdRxSyncMux				= [0,0,0,0]		#[0,0,1,1]
sysParams.syncLoopBack				= True

# ## The following parameters sets up the AGC
# sysParams.agcParams[0].agcMode = 1 ##internal AGC
# sysParams.agcParams[0].gpioRstEnable = 0 ##disable GPIO based reset to AGC detector 
# sysParams.agcParams[0].atken = [0, 1, 0] ##enable big and small step attack
# sysParams.agcParams[0].decayen = [0,1,0] ##enable big and small step decay
# sysParams.agcParams[0].atksize = [2,1,0] ## bigs step = 2dB, small step = 1dB
# sysParams.agcParams[0].decaysize = [2,1,0] ##big step = 2dB, small step = 1dB
# sysParams.agcParams[0].atkthreshold = [-1, -2, -14] ##attack threshold
# sysParams.agcParams[0].decaythreshold = [-14, -6, -20] ##decay threshold
# sysParams.agcParams[0].atkwinlength = [170, 170] ## detector time constant expressed inn absolute time in ns. 
# sysParams.agcParams[0].decaywinlength = 87380 ##detector time constant expressed in absolute time in ns. All detectors use the same value for decay time constant
# sysParams.agcParams[0].atkNumHitsAbs = [8,8] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock
# sysParams.agcParams[0].decayNumHitsAbs = [100,100] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock
# sysParams.agcParams[0].minDsaAttn = 0 ##minimum DSA attenuation used by AGC
# sysParams.agcParams[0].maxDsaAttn = 22 ##maximum DSA attenuation used by AGC
# sysParams.agcParams[0].totalGainRange = 22 ##total gain range used by ALC for gain compensation
# sysParams.agcParams[0].minAttnAlc = 0 ##minimum attenuation used by ALC for compensation when useMinAttnAgc = 0
# sysParams.agcParams[0].useMinAttnAgc = 1 ##enable ALC to use minimum attenuation from AGC for which compensation is required.
# sysParams.agcParams[0].alcEn = 1
# sysParams.agcParams[0].alcMode = 0 ##floating point DGC
# sysParams.agcParams[0].fltPtMode = 0 ##if exponent > 0, dont send MSB
# sysParams.agcParams[0].fltPtFmt = 1 ##3 bit exponent


## The following parameters sets up the GPIOs
sysParams.gpioMapping={
		'H8': 'ADC_SYNC0',
		'H7': 'ADC_SYNC1',
		'N8': 'ADC_SYNC2',
		'N7': 'ADC_SYNC3',
		'H9': 'DAC_SYNC2',
		'G9': 'DAC_SYNC3',
		'N9': 'DAC_SYNC0',
		'P9': 'DAC_SYNC1',
		'P14': 'GLOBAL_PDN',
		'K14': 'FBABTDD',
		'R6': 'FBCDTDD',
		'H15': ['TXATDD','TXBTDD'],
		'V5': ['TXCTDD','TXDTDD'],
		'E7': ['RXATDD','RXBTDD'],
		'R15': ['RXCTDD','RXDTDD']}
		
#AFE.systemParams.papParams[0]['enable'] = True
#AFE.systemParams.papParams[1]['enable'] = True
#AFE.systemParams.papParams[2]['enable'] = True
#AFE.systemParams.papParams[3]['enable'] = True
		
device.delay_time = 0
## Initiates LMK04828 and AFE79xx Bring-up
AFE.deviceBringup()

AFE.TOP.overrideTdd(15,3,15)

设计概述

               该系统具有与 AFE7900进行通信的双链路10Gbps 通道速率和 LMFS=14810通道配置。 对于本规范、FPGA 设计有两个 Xilinx RX JESD204 IP、两个 Xilinx TX JESD204 IP 和两个 JESD204 PHY、用于16个 AFE。 图1显示了 设计中的 FPGA-AFE 连接。 SYSREF 由 FPGA 创建、FPGA 具有与 AFE REFCLK 相同的时钟域。

图1 - AFE-FPGA 连接方案

问题

1) 1) 我们正在使用通过 Latte Python 脚本创建的配置集 和我们在前面提到的设计、对 FPGA 进行开发。 在我们的测试期间、我们没有稳定的链路。 有时我们可以看到某些 AFE 的 SYNC_IN 和 SYNC_OUT 信号为高电平、但我们大部分时间都看不到。 下面介绍了一些 SPI 错误。 这些错误的含义是什么? 我们可以做什么来调试和修复这些错误?

我们有7个错误。 其中1个来自 ADC JESD 寄存器页面、其他来自 DAC JESD 寄存器页面(3个来自 DAC AB 页面、3个来自 DAC CD 页面)

ADC JESD 寄存器映射

  • 寄存器12Ch 预计为0x08、但具有0xF7。 此寄存器的含义是什么?为什么会出现此错误?  

 

 

 

DAC JESD 寄存器映射 (AB 页和 CD 页)

 此页面上有3+3错误、如下所示。 为什么我们会遇到这些错误,我们可以如何修复这些错误?  

  • 寄存器 A2h、预期值为0x02、但我们得到的是0x00。

 

 

  • 寄存器11CH、预期值为0x00、我们得到0x00、但在此地址出现错误。 我们不知道为什么、但原因可以是超时的。

  • 寄存器 EEh、预期值为0x01、但得到了0x00。

 

 2) 2)  我们向 TI 提出了以下问题、他们回答如下。 我们尝试使用恒定测试模式(使用 DAC JESD 页面中的 B7h)测试 DAC。 但我们已经看到、只有可以同步的 AFE 可以输出信号。 由于我们没有稳定链路、因此无法以这种方式执行正确的测试。 执行此测试是否需要同步 AFE?  下面分享了我们的测试模式。

测试图案:

寄存器18 -> 00

寄存器15 -> 00

寄存器16 -> 04

寄存器 B7 -> 01

寄存器16 -> 08

寄存器 B7 -> 01

 

我们的问题和 TI 的回复在下方分享。

问:我们怀疑电路板的时钟源、所以我们要检查一下。 我们的电路板具有5GHz 时钟源(信号发生器)。 我们使用频谱分析仪检查此时钟、时钟源似乎正常。  但是、当我在 JESD_SUBCHIP 页面上读取寄存器0x15F 时、AFE 返回0x03。 指示 SerdesAB 和 SerdesCD PLL 失锁的寄存器。 我们应该如何理解这一点呢? 是否设置了任何 SPI 寄存器和/或命令来决定时钟源是否正常?

DC:使用外部时钟时、我们没有可读取的寄存器来检查时钟是否存在。 可以完成的一项操作是将 AFE DAC 通道编程为恒定输出测试模式。 这种模式将使 DAC 能够仅输出 NCO 频率、而不管其接收的数据如何。 如果 DAC 输出在此模式下看起来良好、那么我们可以验证 AFE 是否正在接收外部时钟。 要将 AFE 置于此模式、您可以在 Latte 中运行以下行:

 

 

 

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Murat:

    我会向我们的团队核实您指出的寄存器的定义以及您所看到错误的可能原因。 需要验证的一点是 AFE 侧的 JESD 参数在 FPGA 侧相匹配。 这可包括以下参数:F、K、扰频和通道反转。 此外、  您使用的 AFE 配置是否已在我们的其中一个 AFE79xxEVM 上进行了测试?

    关于第二个问题、在对 DAC 进行编程以生成恒定输出之后、无论 JESD 状态如何、所有已启用的 Tx 通道上都应该有一个输出。 一个可能会出现的问题是、除了启用常量测试图形模式外、您还应该更新包含所发送常量值的寄存器。 应执行的寄存器写入如下所示:

    device.writeReg(0x16,0x04)
    device.writeReg(0xB7,0x01)
    device.writeReg(0xB9,0x40)
    device.writeReg(0xB8,0x00)
    device.writeReg(0xBB,0x00)
    device.writeReg(0xBA,0x00)
    device.writeReg(0xB7,0x01)
    device.writeReg(0xC1,0x40)
    device.writeReg(0xC0,0x00)
    device.writeReg(0xC3,0x00)
    device.writeReg(0xC2,0x00)
    
    device.writeReg(0x16,0x08)
    device.writeReg(0xB7,0x01)
    device.writeReg(0xB9,0x40)
    device.writeReg(0xB8,0x00)
    device.writeReg(0xBB,0x00)
    device.writeReg(0xBA,0x00)
    device.writeReg(0xB7,0x01)
    device.writeReg(0xC1,0x40)
    device.writeReg(0xC0,0x00)
    device.writeReg(0xC3,0x00)
    device.writeReg(0xC2,0x00)

    此致、

    David Chaparro

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,大卫,谢谢你的答复。 很长一段时间以来、我们一直在尝试验证我们的电路板和设计、我们真的需要您的帮助。

    1)是的、此配置由 TI 工程师提供、我们使用 AFE EVM 和 TSW14J56 EVM 进行了测试。 此外、我们已一起测试了我们的设计(使用 KCU105 FPGA)和 AFE EVM、并且同样有效。 然而、当我们使用定制电路板对设计进行测试时、我们遇到了同步问题。 因此、我认为我们的 JESD 参数是正确的、我们怀疑存在硬件问题。 因此、我们需要一些调试策略来通过找出错误原因来校正硬件和设计。

    2) 2)谢谢参数、我们将检查并告知您要讨论的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我们将尝试解决该问题。 你有没有更新?  

    我们还尝试了您共享的命令集用于恒定模式测试、但没有变化。 那么我们只能观察到来自同步的 AFE 的输出。 这可能是什么原因、这是否表示 AFE 的参考时钟存在问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我们遇到了类似的问题。  您对所提问题的回答对我们非常重要。

    您是否有您说应该检查的文档存在 AFE 不同步问题? (我们无法看到同步符号、但无法确定问题是什么。)

    此外、我们已经看到并确认、如果没有 SYNC、TX 信号将不会出现。

    此外、是否有一个寄存器用于指示采样时钟电平是否足以满足 AFE 要求?

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Murat:

    如果将 DAC 设置为恒定测试图形模式、并且在 TX 通道上未看到输出、这可能表示它们可能是 AFE 基准时钟的问题。 您能否检查 AFE 引脚上的参考时钟电平并验证它是否满足数据表要求?

    此致、

    David Chaparro

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我们必须在这些问题上得到明确的答案。  

    今天我们做了一个实验:根据参考时钟电平数据表、最小值(-0.3Vpp =-9.5dBm)
    但在 AFE7900EVM 中、它仍然生成了这种恒定模式、直到我们将参考时钟电平降低到-30dBm。

    我们无法理解这种情况。 如果基准时钟电平运行在这么低的电平、我们可以保证它在我们自己的卡上没有那么低、并且我们希望它能够工作。  但我们的卡不会生成此 TX 测试图形。

    此外、您是否能够共享一个文档、该文档介绍上电顺序和时间、保持 AFE 处于复位和复位时间等详细信息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tolga、

    AFE79xx 配置指南的第9.2节提供了 AFE79xx 的启动流程和电源序列。 请在 AFE79xx 加密文件夹中访问它。  

    由于已通过电子邮件联系我们、我们将关闭此帖子并通过电子邮件回复。 我还将通过电子邮件分享一份文档、供您了解 JESD204错误。

    此致、

    David Chaparro