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.

[参考译文] AFE7906:动态 NCO 开关

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1475090/afe7906-dynamic-nco-switching

器件型号:AFE7906

工具与软件:

此脚本是否支持在 Latte V2p6中进行动态 NCO 切换?

我们将在 Latte 中看到以下警告:

numRxNCOB0/1允许的最大值为2。 因此将该值强制为2。 如果需要2个 NCO、这个参数可被设定为2并在启动后调用函数 updateRxNcoMultiNcoMode。

numRxNCOB0/1允许的最大值为2。 因此将该值强制为2。 如果需要2个 NCO、这个参数可被设定为2并在启动后调用函数 updateRxNcoMultiNcoMode。

numRxNCOB0/1允许的最大值为2。 因此将该值强制为2。 如果需要2个 NCO、这个参数可被设定为2并在启动后调用函数 updateRxNcoMultiNcoMode。

numRxNCOB0/1允许的最大值为2。 因此将该值强制为2。 如果需要2个 NCO、这个参数可被设定为2并在启动后调用函数 updateRxNcoMultiNcoMode。

脚本:

############################## 数字链########################

sysParams.ncoFreqMode ="FCW"

sysParams.numRxNCO = 3

sysParams.broadcastRxNcoSel = 0

sysParams.numFbNCO = 2

sysParams.ncoRxMode =[5、5]

sysParams.ncofbMode =[2、2]

###### Rx ######

sysParams.ddcFactorRx =[8、8、8、8]#DDC 抽取因子、适用于 RX A、B、C 和 D

sysParams.rxNco0 =[[614.4614.4]、#Band0、Band1 (对于 RXA)

[614.4614.4]、#Band0、Band1 (对于 RXB)

[614.4614.4]、#Band0、Band1 (对于 RXC)

[614.4614.4]]#Band0、Band1表示 RXD

sysParams.rxNco1 =[[614.4614.4]、#Band0、Band1 (对于 RXA)

[614.4614.4]、#Band0、Band1 (对于 RXB)

[614.4614.4]、#Band0、Band1 (对于 RXC)

[614.4614.4]]#Band0、Band1表示 RXD

sysParams.rxNco2 =[[614.4614.4]、#Band0、Band1 (对于 RXA)

[614.4614.4]、#Band0、Band1 (对于 RXB)

[614.4614.4]、#Band0、Band1 (对于 RXC)

[614.4614.4]]#Band0、Band1表示 RXD

sysParams.rxNco3 =[[614.4614.4]、#Band0、Band1 (对于 RXA)

[614.4614.4]、#Band0、Band1 (对于 RXB)

[614.4614.4]、#Band0、Band1 (对于 RXC)

[614.4614.4]]#Band0、Band1表示 RXD

sysParams.fbNco0 =[614.4614.4]

sysParams.fbNco1 =[614.4614.4]

sysParams.fbNco2 =[614.4614.4]

sysParams.fbNco3 =[614.4614.4]

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

    请参阅以下更新的参数:

    ############################## 数字链########################

    sysParams.ncoFreqMode ="FCW"

    sysParams.numRxNCO = 4

    sysParams.broadcastRxNcoSel = 0

    sysParams.numFbNCO = 4

    sysParams.ncoRxMode =[5、5]

    sysParams.ncofbMode =[2、2]

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

    尊敬的 Ramanathan:

    numRxNCO 参数应设置为"2"以使用多个 NCO。 对于动态 NCO 更改、我建议遵循"AFE79xx_16_RX_NCOS.pdf"文档、该文档位于 AFE79xx OneRelease 文件夹中、可使用以下链接访问。

    https://www.ti.com/secureresources/ 

    此致、

    David Chaparro  

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

    尊敬的 David:

    感谢您的答复。 我之前提供了脚本、用于指示已经配置了该参数。 根据数据表、它应该支持16 NCO 频率的开关。 因此、如果我打算使用"4"、为什么必须将 numRxNCO 参数设置为"2"?

    请帮助我们解决这个问题。

    此致、

    Ramanathan D.

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

    尊敬的  Ramanathan:

    将此参数设置为"2"时、需要使用所有16个 NCO、如"AFE79xx_16_RX_NCOs.pdf"文档中所示。  另外、如 Latte 日志中所示、"numRxNCOB0/1允许的最大值为2"。  

    此致、

    David Chaparro  

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

    尊敬的 David:

    感谢您的及时回复。

    根据您的应用报告:SBAA417–2020年6月(AFE79xx 配置指南)、它指出" 器件支持多达16个、但当前版本的 Latte 软件最多仅支持2个。 请注意、当 numRxNCO 大于2时、NCO 应在 FCW 模式下使用、不支持1KHz 模式" . 我附上了一张图片供您参考。

    请向我们提供必要的脚本 我们目前使用的是最新版本的 Latte、即 V2p6。

    此致、

    Ramanathan D.

     

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

    尊敬的 Ramanathan

    配置指南是正确的、numRxNco 参数最多只能支持2个 NCO、这就是我们提到将参数设置为"2"的原因。 若要使用其他 NCO、您可以使用 "AFE79xx_16_RX_NCOs.pdf" 和"AFE79xx_16_TX_NCOs.pdf"文档中列出的更新参数。 这些文档还提供了有关如何在 NCO 之间切换的说明。  


    您是否有机会尝试这些文档中概述的步骤?  

    此致、

    David Chaparro  

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

    尊敬的 David:  

    感谢您提供信息。 我会自行检查。

    此致、

    Ramanathan D.

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

    尊敬的 David:

    根据"AFE79xx_16_TX_NCOS.pdf"文档、所需的参数已进行修改、脚本也已修改。 经过这些调整后、NCO 开关不会发生、并保持在614.4 MHz 固定。 我已经突出显示了某些参数以供您查看。  如需进一步修改、请通知我们。

    此致、

    Ramanathan D.

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

    尊敬的 David:

    根据"AFE79xx_16_TX_NCOS.pdf"文档、所需的参数已进行修改、脚本也已修改。 经过这些调整后、NCO 开关不会发生、并保持在614.4 MHz 固定。 我已经突出显示了某些参数以供您查看。  如需进一步修改、请通知我们。

    此致、

    Ramanathan D.

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

    尊敬的 Ramanathan:

    在脚本中、我看到您正确更新了 NCO 频率、但我在脚本中看不到 NCO 的任何切换。 您是在另一个脚本中执行此操作吗?  

    请注意、如'AFE79xx_16_TX_NCOs.pdf'文档的第3节"切换 NCO"中所述、RX_CHOSEL_x 输入用于在 NCO 之间切换。

    您可以使用 AFE.IOWRAP.overrideFunction ('RX_NCOSEL_x'、OVERRIDE_ENABLE、OVERRIDE_VALUE)函数将 GPIO 输入覆盖为特定值。  

    下面的脚本是 实现该目标的示例。 要切换到 NCO 1、您可以使用"AFE.IOWRAP.OVERRIDEFunction ("RX_NCOSEL_0"、1、1)"。  

    ##############		Read me			##############
    #In HSDC Pro ADC tab, Select AFE79xx_6RX_24410; Data Rate = 245.76M ---> To capture 4 RX and 2 FB channels
    
    sysParams=AFE.systemParams
    sysParams.__init__();sysParams.chipVersion=chipVersion
    
    setupParams.skipFpga = 0 # setup FPGA (TSW14J56) using HSDC Pro 
    
    ##############		Top Level			##############
    sysParams.FRef			= 307.2
    sysParams.FadcRx		= 2457.6
    sysParams.FadcFb		= 2457.6
    sysParams.Fdac			= 2457.6*3
    sysParams.externalClockRx=False
    sysParams.externalClockTx=False
    													
    ##############		Digital Chain		##############
    
    		#####	RX	#####
    sysParams.ddcFactorRx	=	[8,8,8,8]			#DDC decimation factor for RX A, B, C and D
    sysParams.rxNco0		= 	[[614.4,5400],			#Band0, Band1 for RXA 
    							[614.4,500],        	#Band0, Band1 for RXB 
    							[614.4,2500],        	#Band0, Band1 for RXC 
    							[614.4,1800]]        	#Band0, Band1 for RXD 
    
    		#####	FB	#####
    sysParams.ddcFactorFb	=	[8,8]					#DDC decimation factor for FB 1 and 2
    sysParams.fbNco0		= 	[614.4,1800]				#Band0 for FB1 and FB2 
    
    		#####	TX	#####
    sysParams.txEnable = [False,False,False,False]
    sysParams.ducFactorTx	=	[24,24,24,24]			#DDC decimation factor for TX A, B, C and D
    sysParams.txNco0		= 	[[5400,5400],			#Band0, Band1 for TXA 
    							[500,500],        	#Band0, Band1 for TXB 
    							[2500,2500],        	#Band0, Band1 for TXC 
    							[1800,1800]]        	#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		= ["12410","12410"]
    
    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= True
    sysParams.jesdCDLvdsSync= True
    sysParams.syncLoopBack	= False	#JESD Sync signal is connected to FPGA
    
    ##############		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'],
    						'G6': 'RX_NCOSEL_0', 
    						'G7': 'RX_NCOSEL_1', 
    						'G8': 'RX_NCOSEL_2', 
    						'R5': 'RX_NCOSEL_3'}
    
    ##############		LMK Params		##############
    lmkParams.pllEn			= False
    lmkParams.inputClk		= 614.4 # Valid only when lmkParams.pllEn = False
    lmkParams.lmkFrefClk	= True
    setupParams.fpgaRefClk	= 307.2 # 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
    
    ##############		16 NCO Params		##############
    sysParams.ncoFreqMode	= "FCW"
    
    sysParams.ncoRxMode		=	[6,6]
    sysParams.broadcastRxNcoSel = 1
    sysParams.numRxNCO		=	2
    
    #-------------------------------------------------------------------------------------------------#
    AFE.deviceBringup()
    
    AFE.TOP.overrideTdd(15,3,0)	# bit-wise; 4R,2F,4T
    
    ##############		Update NCOs		##############
    freqList= [614.4,1843.2,921.6,1228.8]
    for i in range(4):
    	for j in range(4):
    		AFE.updateRxNcoMultiNcoMode(j,freqList[i],i)
    		AFE.updateTxNcoMultiNcoMode(j,freqList[i],i)
    		
    ##############		Switch NCOs		##############
    AFE.IOWRAP.overrideFunction('RX_NCOSEL_0',1,1) 
    AFE.IOWRAP.overrideFunction('RX_NCOSEL_1',1,1)
    # AFE.IOWRAP.overrideFunction('RX_NCOSEL_2',0,0)
    # AFE.IOWRAP.overrideFunction('RX_NCOSEL_3',0,0)

    此致、

    David Chaparro