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.

[参考译文] AFE7920EVM:AFE7920EVM:RX JESD 问题:帧错误、串行器/解串器 FIFO 错误和通道错误

Guru**** 2470720 points
Other Parts Discussed in Thread: AFE7920EVM, AFE7950EVM

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1206849/afe7920evm-afe7920evm-rx-jesd-issues-frame-errors-serdes-fifo-errors-and-lane-errors

器件型号:AFE7920EVM
主题中讨论的其他器件: AFE7950EVM

大家好、

在我的设置中(正弦信号发生器连接到 AFE7920EVM 的 ADC A、Kintex 7 FPGA+AFE7920EVM、外部时钟参考为163.68MHz、AFE7920EVM A 和 B DAC 输出连接到频谱分析仪)、AFE79xx 软件(最新的 Latte 软件迭代)产生了一些错误。

设置的启动过程分6步进行(请参阅本文底部的脚本)、如下所示:

  • 第0步-运行强制的 AFE79xx 脚本(setup.py 和 devInit.py)
  • 第1步-定义系统属性(外部时钟频率、NCO 频率等)并存储在局部变量中
  • 步骤2 -应用用户选择的射频 AFE 属性
  • 第3步-应用用户设置的 JESD AFE 属性
  • 第4步-应用用户设置的 LMK 设置
  • 步骤5 -按照 AFE7920EVM TI 安全文件夹中的参考设计文档所述初始化 FPGA (在适用于 Latte 的 Python 中没有专用脚本、这在 Vivado 中手动完成)
    1. 这里还确认 FPGA 中的 PLL 时钟存在
    2. FPGA 确认复位后有高 Rx 同步信号
    3. FPGA 确认复位后有高 Tx 同步信号(值 f 对应于来自 AFE 的4个同步、均为高值)、但在下一步调用 AFE.deviceBringup ()后、该值更改为较低的一个(值 c、对应于来自 AFE 的2个高同步和2个低同步)
    4. FPGA 通过 JESD 向 AFE DAC 发送 BOC 信号
  • 步骤6 -执行 AFE 启动、然后调用 AFE.TOP.overrideTdd (15、3、15)

~30-40s 后、因错误(如下所示的日志)中断步骤6。

在频谱分析仪上、我看到 DAC A 和 B 在出现错误(可能是由于我们收到的 JESD 错误)后发送无效数据。

为了确保 AFE 和 FPGA 之间存在某种通信、我将重复步骤0-5的过程、而不是步骤6、我从 ADC 向 FPGA 发送斜坡信号、并斜坡到 DAC 输出。

通过读取 FPGA 中传入 ADC 数据的内容、我们可以看到类似斜坡的样本值(相邻样本按 AFE.JEST.ADCJESD[topNr].adcRampTestPattern (chnnlNo、TxRampEnable、rampStepSize-1)中指定的值递增)、这可以确认 FPGA 可以获取 ADC 数据(不过仍然没有外部正弦波)。 不过、ADC 斜坡在 FPGA 中似乎有点错位、但这可能是 FPGA 延迟对齐导致的(希望不是 Latte 脚本引起的问题)。

另一方面、频谱分析仪可确认 DAC A 和 B 输出端类似斜坡的频谱、这一情况也很好。 AFE 似乎可以发送数据并可以将接收到的数据从 JESD Rx 传播到 DAC、但由于我们看到的错误、它无法通过 JESD 接口从 FPGA 接收数据。

您能对此提供一些见解并帮助我们解决问题吗? 使这个设置正常工作对我们来说非常关键。

完整的 AFE79xx 软件日志记录如下所示:

工作区被清除

AFE79xxLibraryPG1p0

SPI -已创建 USB 仪器。

复位设备

清除

Kintex RegProgrammer - USB Instrument created。

Kintex RegProgrammer - USB Instrument created。

Kintex RegProgrammer - USB Instrument created。

##==================== 错误:0,警告:0=================== #

电源卡- USB 仪器已创建。

重置 FPGA、然后重试。

已加载的库

更新了 GUI

##==================== 错误:1,警告:0=================== #

**

强制 AFE 初始化完成

**

#DONE 正在执行... AFE79xx/bringup/AWS_step0_EVMsetup.py

#结束时间2023-03-16 12:23:08.208000

#执行时间= 28.9049999714 s

##==================== 错误:0,警告:0=================== #

#====

#正在执行.. AFE79xx/bringup/AWS_step1_ParsDefine.py

#开始时间2023-03-16 12:23:19.864000

TX 和 RX LMFSHd 设置:44210

-------------------------------------------------------

用户配置:

中继器

禁用 X 带中的 DAC 采样

LVDS SYNC 禁用- ADC 和 DAC SYNC 启用

使用的外部时钟参考频率:163.68MHz

-------------------------------------------------------

**

用户参数化完成

**

#DONE 正在执行... AFE79xx/bringup/AWS_step1_ParsDefine.py

#结束时间2023-03-16 12:23:19.873000

#执行时间= 0.00899982452393 s

##==================== 错误:0,警告:0=================== #

#====

#正在执行.. AFE79xx/bringup/AWS_step2_AFEsetup.py

#开始时间2023-03-16 12:23:37.507000

ADC 采样率:1964.16MHz

ADC 降频转换因子:[6、6、6]

ADC NCO:500.0MHz、870.0MHz、637.5MHz、637.5MHz

FB ADC 采样率:1964.16MHz

FB ADC 降频转换因子:[6、6]

FB ADC NCO:1000MHz、1000MHz

DAC 采样率:5892.48MHz

DAC 上变频因子:[18、18、18]

DAC NCO:2245.0MHz、5020.0MHz、8212.5MHz、6812.5MHz

**

模拟前端设置完成

**

#DONE 正在执行... AFE79xx/bringup/AWS_step2_AFEsetup.py

#结束时间2023-03-16 12:23:37.517000

#执行时间= 0.009999046326秒

##==================== 错误:0,警告:0=================== #

#====

#正在执行.. AFE79xx/bringup/AWS_step3_JESDsetup.py

#Start time 2023-03-16 12:23:45.539000

**

JESD 设置完成

**

#DONE 正在执行... AFE79xx/bringup/AWS_step3_JESDsetup.py

#end time 2023-03-16 12:23:45.555000

#执行时间= 0.0160000324249秒

##==================== 错误:0,警告:0=================== #

#====

#正在执行.. AFE79xx/bringup/AWS_step4_LMKsetup.py

#开始时间2023-03-16 12:23:48.729000

外部 Sysref 频率应是一个整数因子:5.115MHz

2T2R1F 编号:0

有效配置:true

laneRateRx:6547.2.

laneRateFb:6547.2.

laneRateTx:6547.2.

2T2R1F 编号:1.

有效配置:true

laneRateRx:6547.2.

laneRateFb:6547.2.

laneRateTx:6547.2.

LMK 时钟分频器-器件寄存器复位。

LMK 时钟分频器-器件寄存器复位。

**

LMK 设置完成

**

#DONE 正在执行... AFE79xx/bringup/AWS_step4_LMKsetup.py

#结束时间2023-03-16 12:23:49.844000

#Execution time = 1.11500000954秒

##==================== 错误:0,警告:0=================== #

#====

#正在执行.. AFE79xx/bringup/AWS_step6_AFEbringup.py

#开始时间2023-03-16 12:24:36.659000

外部 Sysref 频率应是一个整数因子:5.115MHz

2T2R1F 编号:0

有效配置:true

laneRateRx:6547.2.

laneRateFb:6547.2.

laneRateTx:6547.2.

2T2R1F 编号:1.

有效配置:true

laneRateRx:6547.2.

laneRateFb:6547.2.

laneRateTx:6547.2.

已配置 LMK 和 FPGA。

donot_open_Atharv_full -器件寄存器复位。

芯片类型:0xA

芯片号:0x78

芯片版本:0x11

AFE 复位完成

熔丝组负载自动加载成功完成

无自动加载错误

熔丝组负载自动加载成功完成

无自动加载错误

//固件版本= 11000

//PG 版本= 1.

//发布日期[dd/mm/yy]= 10/7/19

patchSize=11697

//修补程序版本= 165

//PG 版本= 0

//发布日期[dd/mm/yy]= 27/11/21

AFE MCU 唤醒完成并加载补丁。

PLL 被锁定

AFE PLL 已配置。

已配置 AFE 串行器/解串器。

配置了 AFE 数字链。

已配置 AFE TX 模拟。

已配置 AFE RX 模拟。

已配置 AFE FB 模拟。

配置了 AFE JESD。

已配置 AFE AGC。

已配置 AFE GPIO。

Sysref 按预期读取

###################### 设备 DAC JESD-RX 0链路状态#######

通道0:1的 SERDES-FIFO 错误

通道0:1的帧同步错误(意外的 k28.5)

通道1:1的 SERDES-FIFO 错误

通道1:1的帧同步错误(意外的 k28.5)

通道2:1的 SERDES-FIFO 错误

通道2:1的帧同步错误(意外的 k28.5)

通道3:1的 SERDES-FIFO 错误

通道3:1的帧同步错误(意外的 k28.5)

lane0 Error=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

lane1 Error=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

Lane2 Errors=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

lane3 Error=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

CS State TX0: 0b00000000。 预计为0b10101010

FS 状态 TX0: 0b01010101。 预计为0b01010101

无法建立设备 RX 的链接:0;警报:0xcfcfcfcfcfcff000f000L

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

###################### 设备 DAC JESD-RX 1链路状态##############

lane0 Error=0b1111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match_ctrl"和"match_data"编程值不匹配;

lane1 Error=0b0111;got errors: 8b/10b disparty 错误;8b/10b 不在表中的代码错误;代码同步错误;

Lane2 Error=0b0111;GOT errors: 8b/10b disparty 错误;8b/10b 不在表中的代码错误;代码同步错误;

lane3 Error=0b0111;got error:8b/10b disparty error;8b/10b 不在表中的代码错误;code synchronization error;

CS 状态 TX0:0b10101010。 预计为0b10101010

FS 状态 TX0: 0b01010101。 预计为0b01010101

无法为器件 RX 建立链路:1;警报:0x7070f00000000L

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

AFE 配置完成

**

AFE 启动完成

**

#DONE 正在执行... AFE79xx/bringup/AWS_step6_AFEbringup.py

#结束时间2023-03-16 12:25:15.228000

#Execution time = 38.5690000057秒

##==================== 错误:18,警告:0=========== #

此致、

Zeljko.

步骤0脚本

##########               Board initialization procedure               ##########

mainWindow.clearSession()
base_directory = "C:\\Users\\laboadmin\\Documents\\Texas Instruments\\Afe79xxLatte\\projects\\AFE79xx\\bringup\\"
mainWindow.runFile(base_directory + r"setup.py")
mainWindow.runFile(base_directory + r"devInit.py")


info('')
info('************************************************************')
info('          Mandatory AFE initialization complete')
info('************************************************************')
info('')

步骤1脚本

##########                     General settings:                     ##########

# VLBI Tx frequency plan details:
custom_clk 							= 2											# Pick AFE scenario.
separate_runtime 					= 1											# Pick bringup staging scenario.
enableAnalogRepeater 				= False										# Enable/disable AFE in analog loopback configuration (DACs transmitting from ADCs).
XbandEnable							= False#True								# Enable/disable DAC sampling rate in X band.
dualLanePerSignal					= False#True								# Pick 2 lanes (True) or 4 lanes (False) to transmit signal via JESD lines.
enableAdcDacSync					= True										# Enable sync signal between ADCs and DACs and FPGA by disabling LVDS sync that fixes GPIO pins.


ncoFreqModes 						= ["1KHz", "FCW"]
Fnco_tx1 							= 2245.0
Fnco_rx1							= 500.0
syncLoopBack						= bool(1-enableAnalogRepeater)
jesdLoopbackEn 						= bool(enableAnalogRepeater)
enableLVDSsync						= bool(1-enableAdcDacSync)
fbJesdTxSyncMux						= 3 if enableLVDSsync else 1
if enableAnalogRepeater:
	separate_runtime = 0


if custom_clk == 0:
	# TI template configuration at different clock reference
	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']
	jesdSystemMode					= [3, 3]
elif (custom_clk == 1):
	# Desired configuration with proper data rates, sampling rates, and bandwidths
	f0 								= 163.68
	Nrx								= 18
	Nddc							= 6
	Ntx 							= 4
	NFRef							= 1
	NfpgaRefClk						= 1
	NinputClk						= 1
	LMFSHdRx              			= ['22210', '22210', '22210', '22210']
	LMFSHdFb						= ['22210', '22210']
	LMFSHdTx						= ['22210', '22210', '22210', '22210']
	jesdSystemMode					= [3, 3]
elif custom_clk == 2:
	# Symmetric JESD configuration
	f0 								= 163.68
	Nrx								= 12
	Nddc							= 6
	NFRef							= 1
	NfpgaRefClk						= 1
	NinputClk						= 1
	LMFSHdFb						= ['22210', '22210']
	Ntx 							= 5 if XbandEnable else 3
	Nlanes 							= '2' if dualLanePerSignal else '4'
	Nconv 							= Nlanes
	LMFSHdTx 						= [Nlanes+Nconv+'210']*4
	LMFSHdRx              			= LMFSHdTx
	jesdSystemMode					= [3, 3]
	
Nduc								= Nddc*Ntx
info('Tx & Rx LMFSHd settings: '+LMFSHdTx[0])


info('')
info('------------------------------------------------------------')
info('User configuration:')
if enableAnalogRepeater:
	info('     Analog repeater') 
else:
	info('     Digital repeater')
if XbandEnable:
	info('     DAC sampling in X band enabled') 
else:
	info('     DAC sampling in X band disabled')
if enableAdcDacSync:
	info('     LVDS sync disabled - ADC and DAC sync enabled') 
else:
	info('     LVDS sync enabled - ADC and DAC sync disabled')
if custom_clk:
	info('     External clock reference used: '+str(f0)+'MHz')
else:
	info('     Internal AFE clock reference used: '+str(f0)+'MHz')
info('------------------------------------------------------------')


info('')
info('************************************************************')
info('          User parametrization complete')
info('************************************************************')
info('')

步骤2脚本

# 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
info('ADC sampling rate: '+str(sysParams.FadcRx)+'MHz')
sysParams.rxEnable 					= [1, 1, 1, 1]
sysParams.externalClockRx 			= 0
sysParams.halfRateModeRx 			= [0, 0]
sysParams.ddcFactorRx 				= [Nddc, Nddc, Nddc, Nddc]
info('ADC down-conversion factors: '+str(sysParams.ddcFactorRx))
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]]
info('ADC NCOs: '+str(sysParams.rxNco0[0][0])+'MHz, '+str(sysParams.rxNco0[1][0])+'MHz, '+str(sysParams.rxNco0[2][0])+'MHz, '+str(sysParams.rxNco0[3][0])+'MHz')
sysParams.rxNco1 					= [ [Fnco_rx1, Fnco_rx1], 
										[870.0, 870.0], 
										[637.5, 637.5], 
										[637.5, 637.5]]

# FB settings
sysParams.FadcFb					= sysParams.FadcRx
info('FB ADC sampling rate: '+str(sysParams.FadcFb)+'MHz')
sysParams.fbEnable 					= [0, 0]
sysParams.halfRateModeFb 			= [0, 0]
sysParams.ddcFactorFb 				= [Nddc, Nddc]
info('FB ADC down-conversion factors: '+str(sysParams.ddcFactorFb))
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]
info('FB ADC NCOs: '+str(sysParams.fbNco0[0])+'MHz, '+str(sysParams.fbNco1[0])+'MHz')

# 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
info('DAC sampling rate: '+str(sysParams.Fdac)+'MHz')
sysParams.txEnable 					= [1, 1, 1, 1]
sysParams.externalClockTx			= 0
sysParams.halfRateModeTx 			= [0, 0]
sysParams.ducFactorTx 				= [Nduc, Nduc, Nduc, Nduc]
info('DAC up-conversion factors: '+str(sysParams.ducFactorTx))
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]]
info('DAC NCOs: '+str(sysParams.txNco0[0][0])+'MHz, '+str(sysParams.txNco0[1][0])+'MHz, '+str(sysParams.txNco0[2][0])+'MHz, '+str(sysParams.txNco0[3][0])+'MHz')


info('')
info('************************************************************')
info('          Analog front end setup complete')
info('************************************************************')
info('')

步骤3脚本

##########               JESD204 settings AFE 79XX EVM               ##########

sysParams.topLevelSystemMode		= 'StaticTDDMode'
sysParams.jesdSystemMode			= jesdSystemMode
sysParams.serdesFirmware			= 1
sysParams.jesdABLvdsSync			= enableLVDSsync
sysParams.jesdCDLvdsSync			= enableLVDSsync
sysParams.syncLoopBack				= syncLoopBack
sysParams.jesdLoopbackEn			= jesdLoopbackEn
	
	
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			= [fbJesdTxSyncMux, fbJesdTxSyncMux]
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]
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]


##########                         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']}


info('')
info('************************************************************')
info('          JESD setup complete')
info('************************************************************')
info('')

步骤4脚本

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

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

if separate_runtime == 1:
	setupParams.skipLmk				= False
	AFE.initializeConfig()
	lmkParams.sysrefFreq			= AFE.systemStatus.sysrefFreq
	lmkParams.lmkPulseSysrefMode 	= 0
	AFE.LMK.lmkConfig()
	# 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
	setupParams.skipLmk				= True
	
	
info('')
info('************************************************************')
info('          LMK setup complete')
info('************************************************************')
info('')

步骤6脚本

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


info('')
info('************************************************************')
info('          AFE bringup complete')
info('************************************************************')
info('')

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

    您好!Željko

     

    可能导致这些错误的一个因素是 AFE 和 FPGA 之间的 JESD 参数不匹配。 您能否确认 AFE 和 FPGA 具有 F、K 和扰频参数相同? 此外、还可以考虑通道多路复用器和通道反转。 从 AFE EVM 到 FPGA 开发套件、SERDES 通道极性可以反转。 在 FPGA 侧或 AFE 侧应注意通道极性反转。

     

    如果出现 JESD 错误,可以在命令行中尝试 AFE.adcDacSync()命令。 此命令将尝试重新建立 JESD 链路。

    此致、

    David Chaparro

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

    尊敬的 David:

    感谢您的回复。 实际上、在两侧(AFE 和 FPGA) K 为16、F 为2、扰频打开(设置为1)。 我们还在 deviceBringup 失败时尝试了 AFE.adcDacSync(),但由于出现了相同的警报和错误,因此无效。 我们在 FPGA 端没有检查通道多路复用器、反相和极性、不过我在随附的 AFE 脚本中指定了该值。 将会对其进行研究并报告结果。

    此致、

    Željko μ A

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

    尊敬的 Zeljko:

    在您连接了 通道多路复用器 和反转的脚本中、均设置为默认值、这将指示 AFE 和 FPGA 通道彼此路由、而不会进行极性反转。 我认为主要问题将是 SERDES 通道极性、因为在连接到开发套件时、通常会将一些通道反相。  

    此致、

    David Chaparro

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

    尊敬的 David:

    我刚得到了我们的 FPGA 设计人员的确认、所有必要的通道反相和极性均已由 FPGA 处理、并且考虑了 AFE 布线(来自 AFE 原理图)。

    我刚刚意识到、在 Latte 代码中、还有两个属性设置为零、即 adcDataMuxEn 和 dacDataMuxEn。 如果我要更改通道多路复用和反转、我还需要先启用这些参数吗?

    此外、我看到对于 Tx 和 Rx、都有2个参数:laneMux 和 dataMux。 您能解释一下二者之间的区别吗?

    此致、

    Željko μ A

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

    尊敬的 Zeljko:

    dataMux 参数使您能够将抽取块后的 Rx 数据多路复用到两个 JESD 块。 另一方面、laneMux 允许您将 JESD 数据多路复用到不同的 SERDES 通道。 如需更多信息、请参阅《AFE79xx 配置指南》。  

    我在设置过程中测试了您的脚本、并成功建立了一个链接、其中 DCLK2是 AFE 的参考。 因此、问题应该不是 AFE 配置的问题。  

    可能存在的一个问题是发送给 AFE 的 SYSREF 信号。 你有来自 SDCLK9的 SYSREF 吗? 如果是、您可以确认"lmk.head.page.DCLK8_SDCLK9_controls.Analog_Dig_delay.sdclk_mux"被设置为"1"并测量电路板上的 SYSREF 频率输出、以验证它是否是正确的频率?  

    为了帮助调试问题是否与 SYSREF 相关、您可以通过将"ysParams.useSpiSysref'参数设置为1"、将 AFE 配置为使用内部 SYSREF。 您可以在设置中试一下吗?


    此致、

    David Chaparro

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

    尊敬的 David:

    感谢您的回复和说明。

    您能告诉我何时进行测试、您的设置中是否存在任何 FPGA、它是另一个器件、还是环回配置? 如果有 FPGA、在这种情况下是否可以共享 VHDL 文件?

    昨天我测量了 SDCLK9信号(SDCLKOUT9、更加准确地说是)并且它处于5.115MHz、即163.68除以32 (163.68MHz 是我的外部参考时钟)。 此外、您建议检查的参数 lmk.head.page.dCLK8_SDCLK9_controls.Analog_Dig_delay.sdclk_mux 默认设置为0、因此我必须手动将其更改为1。

    然而,问题仍然存在。

    BTW、如果我启用 sysParams.useSpiSysref、内部 SYSREF 的值将是多少? 122.88MHz 或用户定义的(例如163.68MHz)?

    此致、

    Željko μ A

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

    尊敬的 Zeljko:

    我仍然建议您尝试使用内部 SYSREF。 如果问题与 SYSREF 的时序有关、我们可以使用内部 SYSREF 来调试这一点。 当使用内部 SYSREF 时、AFE 将在 AFE 启动过程中所需的时刻提供脉冲。  

    在测试脚本时、我使用了 TSW14J58、这是 TI 的数据采集卡之一。 已安装的固件不可共享。 如果您使用的是 TI JESD204 IP、我可以尝试一件事是为 AFE79xxEVM 和 Kintex 7开发套件创建参考设计、并与您分享。 但这需要您访问 TI JESD204 IP、 https://www.ti.com/tool/TI-JESD204-IP。  

    我还感兴趣的一点是 ADC 链路是否也存在类似的问题。 ADC JESD 链路是否正常接通并运行?

    此致、

    David Chaparro

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

    尊敬的 David:

    感谢您的回复。

    所以,我做了一个测试,其中内部 SYSREF 是启用的( sysParams.useSpiSysref = 1),这是我运行 AFE.deviceBringup ()命令后得到的错误日志:

    #正在执行.. AFE79xx/bringup/AWS_step6_AFEbringup.py

    #开始时间2023-04-04 10:15:29.346000

    外部 Sysref 频率应是一个整数因子:5.115MHz

    2T2R1F 编号:0

    有效配置:true

    laneRateRx:6547.2.

    laneRateFb:6547.2.

    laneRateTx:6547.2.

    2T2R1F 编号:1.

    有效配置:true

    laneRateRx:6547.2.

    laneRateFb:6547.2.

    laneRateTx:6547.2.

    已配置 LMK 和 FPGA。

    donot_open_Atharv_full -器件寄存器复位。

    芯片类型:0xA

    芯片号:0x78

    芯片版本:0x11

    AFE 复位完成

    熔丝组负载自动加载成功完成

    无自动加载错误

    熔丝组负载自动加载成功完成

    无自动加载错误

    //固件版本= 11000

    //PG 版本= 1.

    //发布日期[dd/mm/yy]= 10/7/19

    patchSize=11697

    //修补程序版本= 165

    //PG 版本= 0

    //发布日期[dd/mm/yy]= 27/11/21

    AFE MCU 唤醒完成并加载补丁。

    PLL 被锁定

    AFE PLL 已配置。

    已配置 AFE 串行器/解串器。

    配置了 AFE 数字链。

    已配置 AFE TX 模拟。

    已配置 AFE RX 模拟。

    已配置 AFE FB 模拟。

    配置了 AFE JESD。

    已配置 AFE JESD

    已配置 AFE AGC。

    已配置 AFE GPIO。

    aOC self.systemParams.executeLinkUpSequenceSeparelites=False

    Sysref 按预期读取

    AOC deviceBringUp()在 selectCh()之前

    aOC selectCh() rxFbTx=2 ch_no=0 band=0 tapOff=0

    aOC selectChSilicon (),在 getJesdAlarms 之前

    getJesdAlarms 之后的 aOC selectChSilicon ()

    aOC selectChSilison()结束

    AOC 0

    ###################### 设备 DAC JESD-RX 0链路状态#######

    通道0:1的 SERDES-FIFO 错误

    通道0:1的帧同步错误(意外的 k28.5)

    通道1:1的 SERDES-FIFO 错误

    通道1:1的帧同步错误(意外的 k28.5)

    通道2:1的 SERDES-FIFO 错误

    通道2:1的帧同步错误(意外的 k28.5)

    通道3:1的 SERDES-FIFO 错误

    通道3:1的帧同步错误(意外的 k28.5)

    lane0 Error=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

    lane1 Error=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

    Lane2 Errors=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

    lane3 Error=0b11001111;GOT 错误:8b/10b 分解错误;8b/10b 不在表中的代码错误;代码同步错误;弹性缓冲区匹配错误。 第一个 NO-/K/与"match _Ctrl"和"match _data"编程值不匹配;帧对齐错误;多帧对齐错误;

    CS State TX0: 0b00101000。 预计为0b10101010

    FS 状态 TX0: 0b01010101。 预计为0b01010101

    无法建立设备 RX 的链接:0;警报:0xcfcfcfcfcfcff000f000L

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

    ###################### 设备 DAC JESD-RX 1链路状态##############

    lane0 Error=0b0111;got error:8b/10b disparty error;8b/10b 不在表内的代码错误;code synchronization error;

    lane1 Error=0b0111;got errors: 8b/10b disparty 错误;8b/10b 不在表中的代码错误;代码同步错误;

    Lane2 Error=0b0111;GOT errors: 8b/10b disparty 错误;8b/10b 不在表中的代码错误;代码同步错误;

    lane3 Error=0b0111;got error:8b/10b disparty error;8b/10b 不在表中的代码错误;code synchronization error;

    CS 状态 TX0:0b10101010。 预计为0b10101010

    FS 状态 TX0: 0b00000000。 预计为0b01010101

    无法为器件 RX 建立链路:1;警报:0x7070700000000L

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

    AFE 配置完成

    **

    AFE 启动完成

    **

    #DONE 正在执行... AFE79xx/bringup/AWS_step6_AFEbringup.py

    #结束时间2023-04-04 10:16:08.158000

    #Execution time = 38.8120000362 s

    ##==================== 错误:18,警告:0=========== #

    这组错误似乎与之前相同。

    关于 ADC 操作,从 FPGA 端一直到调用 AFE.deviceBringup ()的步骤6 (不包括),在 FPGA 中重置 JESD 功能后,我们看到有一些来自 ADC 端的东西进入 (FPGA 端有一个数据计数器、用于对来自 ADC 的传入数据块进行计数)。 在我的设置中、ADC 的模拟输入端有一个800MHz 正弦波信号。 不过、我们不确定是否在 FPGA 中看到过这样的情况。从所有8个通道读取 ADC 数据(每个通道1024个样本)的 FIFO 缓冲区显示通道0-5上的随机数据、而通道6和7上似乎存在噪声很大的类似斜坡的信号 (不相同、一个在增加、另一个在减少)。 这两个可能是来自 ADC 的正弦波的 I 和 Q、其中1024个样本的间隔太短、无法看到正弦波字符、因此可以观察到线性近似。

    如果在此阶段我从 AFE JESD Tx (在 ADC 侧)向 FPGA 发送测试斜坡图形、则可以在 FPGA 中看到斜坡数据、即两组具有相同斜坡值的4个通道。 但是,如果我不是发送斜坡数据,而是运行 AFE.deviceBringup (),日志中的错误就会出现(如上所示),而在 FPGA 中,我们看到所有突然传入的数据都不再出现(数据计数器停止递增), 我们看到、所有通道(在 FPGA FIFO 缓冲器中)中、来自 ADC 的所有数据在数据计数停止的位置都为零。 使数据计数器解除锁定的唯一方法是复位 FPGA 端的 JESD 接口。 请注意、在整个启动过程中、我们未在 Latte 中看到任何与 ADC 和 JESD Tx 相关的错误(仅发生在上面日志中的错误)。

    最后、关于 Kintex 7开发板的参考设计、如果可以实现的话、我们将不胜感激、因为它可以充当我们设计与工作设计之间的桥梁、使调试变得非常简单。  我刚刚申请了 TI JESD204 IP 的访问权限。

    此致、

    Zeljko.

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

    尊敬的 Zeljko:

    对于 Kintex 7开发套件、我们的实验室中有一个 KC705。 此板只有4个连接到 FMC 连接器的收发器通道、因此我无法为所有4个通道创建设计。 我能做的是创建仅具有4个通道的参考设计、并禁用 AFE 上的一半通道。 然后、您可以将其用作设计的起点。  

    这种方法是否仍适用于您?

    此致、

    David Chaparro

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

    尊敬的 David:

    只是为了检查一下、在我们当前的设计中、我们使用的是 Xilinx Kintex 7 XC7K410T、该板是否与 KC705上所做的设计兼容?

    关于收发器、只要我们至少可以有2个 Tx 和2个 Rx、那么总共4个通道就应该没问题。

    此致、

    Željko μ A

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

    尊敬的 David:

    这里有一个小问题-我的原始帖子中的这些错误是否也是由于 GPIO 外引脚映射不良而以某种方式出现的?  

    我们使用 AFE7950EVM 和 ZC706电路板进行了单独的设置(显然、我们有一个来自其他项目的备用资源)、因此我们可以直接使用 TI 参考设计。 最初、当我们在参考设计中引入163.68 MHz 时钟时、我们出现了类似(不相同)的错误(我们逐步改变 FPGA 的参考设计、以允许使用不同的时钟) 然后、我意识到、我的原始 Latte 脚本与参考设计中的 Latte 脚本具有不同的 GPIO 映射。

    我的原始 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']}

    参考设计中的 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']}

    您可以看到、DAC 同步信号映射到了不同的引脚。

    现在、当我尝试使用上面原始帖子中的脚本更新的 GPIO 映射时、我仍然遇到相同的错误、但我想知道这可能是因为这里需要不同的第三个 GPIO 映射版本。 事实上、在 GPIO 映射方面、是否有办法知道 FPGA 和 AFE 应如何保持一致?

    您能评论一下这个问题吗?或者我在这里的推理是完全不一致的吗?

    此致、

    Željko μ A

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

    尊敬的 Zeljko:

    您要显示的 GPIO 映射差异是针对 DAC 同步信号的。 只要您在 FPGA 侧指定了正确的引脚、这应该不会是问题。 在我们的参考设计中、我们将 DAC 同步映射到 AFE 上的引脚 H7、并确保 FPGA 在其对应的引脚上预计同步信号。 您能否验证在 FPGA 侧、您是否希望 DAC 同步连接到 AFE 上的"H9"。  

    关于 KC705的参考设计、该 FPGA 与您计划使用的 FPGA 类似、您应该可以将它用作参考。 可以使用以下链接下载该参考设计的文件。

    链接: https://tidrive.ext.ti.com/u/_Z9fR24fXznvn19A/a4e05359-ab99-4b95-a3bf-8e0f0d8c333c?l 

    访问代码: 9DygP2D、

    此致、

    David Chaparro