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:Rx NCO 更新

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1353272/afe7950evm-rx-nco-update

器件型号:AFE7950EVM

大家好、

我希望寻求帮助、以通过 GPIO 实现 RX NCO 切换。 我已经成功通过这种方式更改了 TX NCO、如本主题中所述:
https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1295365/afe7900evm-nco-frequency-configuration

然后我尝试用 RX 相关的内容(device.tt->device.rf、TXDIG->RXDIG 等)替换代码的 TX 特定部分。  尽管已加载 RX NCO 阵列的第一个元素、其他元素似乎没有效果、我甚至无法通过 IOWRAP.OverrideFunction 控制 GPIO 函数。 LMK 配置如下:

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

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

setupParams.skipFpga = 1 # setup FPGA (TSW14J56) using HSDC Pro 
##############		Top Level			##############
sysParams.FRef			= 506
sysParams.FadcRx		= 2530
sysParams.FadcFb		= 2530
sysParams.Fdac			= 2530*4
sysParams.externalClockRx=False
sysParams.externalClockTx=False
													
##############		Digital Chain		##############

		#####	RX	#####
sysParams.ncoFreqMode="FCW"
sysStatus.rxChainDirectCtrl=True
sysParams.rxChainDirectCtrl=True
sysParams.broadcastRxNcoSel=1
sysParams.numRxNco=16
sysParams.ncoRxMode=[6,6]
		
sysParams.ddcFactorRx	=	[5,5,5,5]				#DDC decimation factor for RX A, B, C and D
sysParams.rxNco0		= 	[[1800,5400],			#Band0, Band1 for RXA 
							[750,750],        		#Band0, Band1 for RXB 
							[3000,2500],        	#Band0, Band1 for RXC 
							[1800,1800]]        	#Band0, Band1 for RXD 

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

		#####	TX	#####	


sysParams.ducFactorTx	=	[20,20,20,20]			#DUC interpolation factor for TX A, B, C and D
sysParams.txNco0		= 	[[875.5,1800],			#Band0, Band1 for TXA 
							[1987.5,1800],        		#Band0, Band1 for TXB 
							[3605,2500],        	#Band0, Band1 for TXC 
							[1800,1800]]        	#Band0, Band1 for TXD


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

		#####	ADC-JESD	#####
sysParams.jesdSystemMode= [3,3]
													#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		= ["44210","44210","44210","44210"]
													# 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	= [True,True,True,True]
sysParams.fbJesdTxScr	= [True,True]

sysParams.rxJesdTxK		= [16,16,16,16]
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		= ["44210","44210","44210","44210"]
sysParams.jesdRxLaneMux	= [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 2R
													#		this should be [[1,0,2,3],[5,4,6,7]]
sysParams.jesdRxRbd		= [4, 4]
sysParams.jesdRxScr		= [True,True,True,True]
sysParams.jesdRxK		= [16,16,16,16]

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

##############		GPIO		##############
sysParams.gpioMapping	= {
						'H8': 'ADC_SYNC0',
						'H7': 'DAC_SYNC0',
						'N8': 'ADC_SYNC2',
						'N7': 'ADC_SYNC3',
						'H9': 'ADC_SYNC1',
						'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'],
						'L14': ['RX_NCOSEL_3'],
						'M14': ['RX_NCOSEL_2'],
						'P13': ['RX_NCOSEL_1'],
						'N12': ['RX_NCOSEL_0']}

##############		LMK Params		##############
lmkParams.pllEn			= False
lmkParams.inputClk		= 506 #983.04 # Valid only when lmkParams.pllEn = False
lmkParams.lmkFrefClk	= True
setupParams.fpgaRefClk	= 126.5 # Should be equal to LaneRate/40 for TSW14J56

##############		Logging		##############
logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
logDumpInst.logFormat=0x21 #Modify to 0x1 to save register scequence to log file. Script takes more time to execute.
logDumpInst.rewriteFile=1
logDumpInst.rewriteFileFormat4=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 配置如下:

## Initiates AFE79xx Bring-up
setupParams.skipLmk	=	True
AFE.deviceBringup()

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

#for i in range(4): AFE.DSA.setRxDsa(i,4)

### ADC Ramp Out
# for i in range(3):
# 	AFE.JESD.ADCJESD[0].adcRampTestPattern(i,1,1)
# 	AFE.JESD.ADCJESD[1].adcRampTestPattern(i,1,1) #chNo, En, RampInc 


### RX NCO Update
rx_nco_freqs_ch_A=[ 920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690]

rx_nco_freqs_ch_B=[ 920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690]

rx_nco_freqs_ch_C=[ 920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690]

rx_nco_freqs_ch_D=[ 920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690,
					920.5,1185,290,690]

id_ch_A=0	
id_ch_B=1
id_ch_C=2
id_ch_D=3				

for i,freq in enumerate(rx_nco_freqs_ch_A):
	AFE.updateRxNcoInfiniteNcoMode(id_ch_A,freq,i)

for i,freq in enumerate(rx_nco_freqs_ch_B):
	AFE.updateRxNcoInfiniteNcoMode(id_ch_B,freq,i)

for i,freq in enumerate(rx_nco_freqs_ch_C):
	AFE.updateRxNcoInfiniteNcoMode(id_ch_C,freq,i)

for i,freq in enumerate(rx_nco_freqs_ch_D):
	AFE.updateRxNcoInfiniteNcoMode(id_ch_D,freq,i)
	
for i in range(2):
	for j in range(2):
		device.RRF[j].RXDIG[i].RXDIG.REGGROUP_4.config_fmixer_update_pulse=0
		device.RRF[j].RXDIG[i].RXDIG.REGGROUP_4.config_fmixer_update_pulse=1

您认为缺少什么? 提前感谢您的帮助!

此致、
Norbert

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

    诺伯特、您好!

    我们将在 EVM 上测试这些脚本、并尝试重现此问题。 您是否能够在设置中测试其他 e2e 博文中的脚本?

    此致、

    David Chaparro

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

    尊敬的 David:

    您在另一篇文章中编写的脚本适用于 TX NCO、 但对 RX NCO 没有影响。

    我期待您的回复!

    Norbert

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

    诺伯特、您好!

    所提供的脚本可能不起作用的一个原因是 AFE79xx GUI 的版本。 您能否验证您是否使用的是最新版本的 AFE79xx GUI? 请注意、由于我们更新了用于更新 NCO 频率的函数的名称、应该从 AFE79xx 安全文件夹下载最新版本的 GUI。

    需要添加到 Rx 通道上16 NCO 控制的基本脚本中的唯一更改如下所示。 请接受这些更改并将它们添加到您的脚本中。  

    sysParams.ncoFreqMode	= "FCW"
    
    sysParams.ncoRxMode		=	[6,6]
    sysParams.broadcastRxNcoSel = 1
    sysParams.numRxNCO		=	2
    
    for i in range(16):
    	for j in range(4):
    		AFE.updateRxNcoMultiNcoMode(j,500+50*i,i)
    
    
    Assign RX_NCOSEL fucntion to GPIO pins (Example given below)
    
    	'G6': 'RX_NCOSEL_0',
    	'G7': 'RX_NCOSEL_1',
    	'G8': 'RX_NCOSEL_2',
    	'R5': 'RX_NCOSEL_3',

    此致、

    David Chaparro  

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

    尊敬的 David:

    我更新了 Latte、因此工具版本是2.5.0、Latte 框架版本是5.7.3。  一切都运行正常、没有任何错误。然而、RX NCO 看起来没有变化。 我 已经尝试在 LMK 配置文件和 AFE 启动文件中(单独)添加您建议的更改。 我还尝试了覆盖 RX NCO 函数、以排除 GPIO 控制不良的可能性。 关于问题是什么、您有什么其他想法吗?

    谢谢!

    Norbert

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

    诺伯特、您好!

    下面给出的两个脚本已更新、能够使用 GPIO 函数覆盖函数并查看 Rx NCO 移位。 您可以在您的设置上尝试一下吗? 如果取消注释"AFE.IOWRAP.overrideFunction ('RX_NCOSEL_0'、1、1)"行、则应看到 NCO 按50MHz 移位。  

    LMK 配置:  

    ##############		Read me			##############
    #In HSDC Pro DAC tab, Select AFE79xx_2x2TX_44210; Data Rate = 491.52M
    #In HSDC Pro ADC tab, Select AFE79xx_2x2RX_44210; Data Rate = 491.52M ---> To capture 4 RX channels
    
    sysParams=AFE.systemParams
    sysParams.__init__();sysParams.chipVersion=chipVersion
    
    setupParams.skipFpga = 1 # setup FPGA (TSW14J56) using HSDC Pro 
    ##############		Top Level			##############
    sysParams.FRef			= 506
    sysParams.FadcRx		= 2530
    sysParams.FadcFb		= 2530
    sysParams.Fdac			= 2530*4
    sysParams.externalClockRx=False
    sysParams.externalClockTx=False
    													
    ##############		Digital Chain		##############
    	
    sysParams.ddcFactorRx	=	[5,5,5,5]				#DDC decimation factor for RX A, B, C and D
    sysParams.rxNco0		= 	[[1800,5400],			#Band0, Band1 for RXA 
    							[750,750],        		#Band0, Band1 for RXB 
    							[3000,2500],        	#Band0, Band1 for RXC 
    							[1800,1800]]        	#Band0, Band1 for RXD 
    
    sysParams.ncoFreqMode	= "FCW"
    
    sysParams.ncoRxMode		=	[6,6]
    sysParams.broadcastRxNcoSel = 1
    sysParams.numRxNCO		=	2
    
    		#####	FB	#####
    sysParams.fbEnable		=	[False,False]
    sysParams.ddcFactorFb	=	[5,5]					#DDC decimation factor for FB 1 and 2
    sysParams.fbNco0		= 	[750,750]				#Band0 for FB1 and FB2 
    
    		#####	TX	#####	
    
    
    sysParams.ducFactorTx	=	[20,20,20,20]			#DUC interpolation factor for TX A, B, C and D
    sysParams.txNco0		= 	[[875.5,1800],			#Band0, Band1 for TXA 
    							[1987.5,1800],        		#Band0, Band1 for TXB 
    							[3605,2500],        	#Band0, Band1 for TXC 
    							[1800,1800]]        	#Band0, Band1 for TXD
    
    
    ##############		JESD		##############
    
    		#####	ADC-JESD	#####
    sysParams.jesdSystemMode= [3,3]
    													#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		= ["44210","44210","44210","44210"]
    													# 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	= [True,True,True,True]
    sysParams.fbJesdTxScr	= [True,True]
    
    sysParams.rxJesdTxK		= [16,16,16,16]
    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		= ["44210","44210","44210","44210"]
    sysParams.jesdRxLaneMux	= [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 2R
    													#		this should be [[1,0,2,3],[5,4,6,7]]
    sysParams.jesdRxRbd		= [4, 4]
    sysParams.jesdRxScr		= [True,True,True,True]
    sysParams.jesdRxK		= [16,16,16,16]
    
    		#####	JESD Common	#####
    	
    sysParams.jesdABLvdsSync= False
    sysParams.jesdCDLvdsSync= False
    sysParams.syncLoopBack	= True	#JESD Sync signal is connected to FPGA
    
    ##############		GPIO		##############
    sysParams.gpioMapping	= {
    						'H8': 'ADC_SYNC0',
    						'H7': 'DAC_SYNC0',
    						'N8': 'ADC_SYNC2',
    						'N7': 'ADC_SYNC3',
    						'H9': 'ADC_SYNC1',
    						'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'],
    						'L14': ['RX_NCOSEL_3'],
    						'M14': ['RX_NCOSEL_2'],
    						'P13': ['RX_NCOSEL_1'],
    						'N12': ['RX_NCOSEL_0']}
    
    ##############		LMK Params		##############
    lmkParams.pllEn			= False
    lmkParams.inputClk		= 506 #983.04 # Valid only when lmkParams.pllEn = False
    lmkParams.lmkFrefClk	= True
    setupParams.fpgaRefClk	= 253 # Should be equal to LaneRate/40 for TSW14J56
    
    ##############		Logging		##############
    logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
    logDumpInst.logFormat=0x0 #Modify to 0x1 to save register scequence to log file. Script takes more time to execute.
    logDumpInst.rewriteFile=1
    logDumpInst.rewriteFileFormat4=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 配置:  

    setupParams.skipLmk	=	1 
    AFE.deviceBringup()
    AFE.TOP.overrideTdd(15,0,15)
    
    for i in range(16):
    	for j in range(4):
    		AFE.updateRxNcoMultiNcoMode(j,1800+50*i,i)
    		
    # AFE.IOWRAP.overrideFunction('RX_NCOSEL_0',1,1) #GPIO Function Name, Override Enable, Override Value
    # AFE.IOWRAP.overrideFunction('RX_NCOSEL_1',1,1)
    # AFE.IOWRAP.overrideFunction('RX_NCOSEL_2',1,1)
    # AFE.IOWRAP.overrideFunction('RX_NCOSEL_3',1,1)

    此致、

    David Chaparro  

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

    尊敬的 David:

    感谢您的帮助、您提供的脚本 可以解决我的问题。 然而,我看不到我的脚本和你的脚本之间的区别,但我将从你的继续。 再次感谢您!

    此致、
    Norbert

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

    诺伯特、您好!

    使用您的脚本进行测试时、是否删除了以下行? 这些参数未正确设置 Rx NCO、并且其中一个参数 rxChainDirectCtrl 不是 Latte 使用的有效参数。 因此、这些可能是您的脚本出现问题的根源。  

    sysParams.ncoFreqMode="FCW"
    sysStatus.rxChainDirectCtrl=True
    sysParams.rxChainDirectCtrl=True
    sysParams.broadcastRxNcoSel=1
    sysParams.numRxNco=16
    sysParams.ncoRxMode=[6,6]

    此致、

    David Chaparro