大家好、
在收到您的大量意见后、我们终于成功使 AFE EVM 与我们的 FPGA (Kintex 7系列)进行通信。
但是、在执行此操作时、我们遇到了一些有关 JESD 协议的问题。 实际上、Latte 给出的误差如下所示:
###################### 设备 DAC JESD-RX 0链路状态#######
通道0:1的 SERDES-FIFO 错误
通道1:1的 SERDES-FIFO 错误
通道2:1的 SERDES-FIFO 错误
通道3:1的 SERDES-FIFO 错误
逗号对齐锁定区域0:错误;请检查发送器是否正在发送数据且眼图良好。
逗号对齐锁定区域1:错误;请检查发送器是否正在发送数据且眼图良好。
逗号对齐锁定区域2:错误;请检查发送器是否正在发送数据和眼图是否正常。
逗号对齐锁定区域3:错误;请检查发送器是否正在发送数据且眼图良好。
CS State TX0: 0b00000000。 预计为0b10101010
FS 状态 TX0: 0b00000000。 预计为0b01010101
无法为器件 RX:0建立链路;警报:0xF000
########################################################
###################### 设备 DAC JESD-RX 1链路状态##############
通道0:1的 SERDES-FIFO 错误
通道1:1的 SERDES-FIFO 错误
通道2:1的 SERDES-FIFO 错误
通道3:1的 SERDES-FIFO 错误
逗号对齐锁定区域0:错误;请检查发送器是否正在发送数据且眼图良好。
逗号对齐锁定区域1:错误;请检查发送器是否正在发送数据且眼图良好。
逗号对齐锁定区域2:错误;请检查发送器是否正在发送数据和眼图是否正常。
逗号对齐锁定区域3:错误;请检查发送器是否正在发送数据且眼图良好。
CS State TX0: 0b00000000。 预计为0b10101010
FS 状态 TX0: 0b00000000。 预计为0b01010101
无法为器件 RX 建立链路:1;警报:0xF000
########################################################
#DONE 正在执行... AFE79xx/bringup/AWS_VLBI_test_script_working.py
#结束时间2023-02-24 13:50:04.073000
#执行时间= 31.3729999065秒
##==================== 错误:18,警告:0=========== #
此外、即使存在该误差、当 FPGA 尝试向 AFE DAC 发送 BOC 类型信号时、频谱分析仪上仍然有一些信号:

不过、观测频谱会波动、并且几乎只是由于 JESD 接口中的误差而产生一些赝像。
在 FPGA 端、我们使用与 Latte 脚本44210相同的 LMFSHd 参数、其中 K 参数设置为16。
我们使用的 Latte 代码如下所示:
########## Board bringup procedure ##########
#mainWindow.clearSession()
#base_directory = "C:\\Users\\a0217443\\Documents\\Texas Instruments\\Latte\\projects\\AFE79xx\\bringup\\"
#mainWindow.runFile(base_directory + r"setup.py")
#mainWindow.runFile(base_directory + r"devInit.py")
########## General settings: ##########
# VLBI Tx frequency plan details:
custom_clk = 3
ncoFreqModes = ["1KHz", "FCW"]
Fnco_tx1 = 2245.0
Fnco_rx1 = 500.0
if (custom_clk == 1):
f0 = 163.68
Nrx = 18
Nddc = 6
Ntx = 4
NFRef = 1
NfpgaRefClk = 1
NinputClk = 1
LMFSHdRx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']#
LMFSHdFb = ['22210', '22210']
LMFSHdTx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']#
syncLoopBack = False
jesdLoopbackEn = True
elif custom_clk == 0:
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']
syncLoopBack = False
jesdLoopbackEn = True
elif custom_clk == 2:
f0 = 163.68
Nrx = 12
Nddc = 6
Ntx = 3#6
NFRef = 1
NfpgaRefClk = 1
NinputClk = 1
LMFSHdRx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']
LMFSHdFb = ['22210', '22210']
LMFSHdTx = ['22210', '22210', '22210', '22210']#['44210', '44210', '44210', '44210']
syncLoopBack = False
jesdLoopbackEn = True
elif custom_clk == 3:
f0 = 163.68
Nrx = 12
Nddc = 6
Ntx = 3#6
NFRef = 1
NfpgaRefClk = 1
NinputClk = 1
LMFSHdRx = ['44210', '44210', '44210', '44210']
LMFSHdFb = ['22210', '22210']
LMFSHdTx = ['44210', '44210', '44210', '44210']
syncLoopBack = True
jesdLoopbackEn = False
Nduc = Nddc*Ntx
# 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
sysParams.rxEnable = [1, 1, 1, 1]
sysParams.externalClockRx = 0
sysParams.halfRateModeRx = [0, 0]
sysParams.ddcFactorRx = [Nddc, Nddc, Nddc, Nddc]
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]]
sysParams.rxNco1 = [ [Fnco_rx1, Fnco_rx1],
[870.0, 870.0],
[637.5, 637.5],
[637.5, 637.5]]
# FB settings
sysParams.FadcFb = sysParams.FadcRx
sysParams.fbEnable = [0, 0]
sysParams.halfRateModeFb = [0, 0]
sysParams.ddcFactorFb = [Nddc, Nddc]
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]
# 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
sysParams.txEnable = [1, 1, 1, 1]
sysParams.externalClockTx = 0
sysParams.halfRateModeTx = [0, 0]
sysParams.ducFactorTx = [Nduc, Nduc, Nduc, Nduc]
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]]
########## 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
#AFE.LMK.lmkConfig()
########## JESD204 settings AFE 79XX EVM ##########
sysParams.topLevelSystemMode = 'StaticTDDMode'
sysParams.jesdSystemMode = [3, 3]
sysParams.serdesFirmware = 1
sysParams.jesdABLvdsSync = 1
sysParams.jesdCDLvdsSync = 1
sysParams.syncLoopBack = syncLoopBack
sysParams.jesdLoopbackEn = jesdLoopbackEn
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]
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 = [0, 0]
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]
########## 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']}
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
AFE.deviceBringup()
AFE.TOP.overrideTdd(15,3,15)
# 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
AFE.saveCAfeParamsFile()
# C273 (GTXCLK_P, yellow) is now at 163.68 MHz (sine-wave-looking signal, with noticed background noise, however, enough for FPGA to get a PLL lock)
# C259 (FPGA_CLK2P/FPGA_REFCLK2_P, red) is now at 163.68 MHz (sine-wave-looking signal, with noticed background noise, however, enough for FPGA to get a PLL lock)
# R353 (CAR_SYSREF_P/FPGA_SYSREF_P, green) is now at ?? MHz (Hard to really tell)
请注意、切换到环回模式(jesdLoopbackEn = 1且 syncLoopBack = 0)时、我们可以在频谱分析仪中清楚地看到模拟信号发生器发送的相同信号(传入 AFE ADC)。
如果您能提供任何有关此错误的来源和解决方法的意见、我们将不胜感激。

