工具与软件:
你(们)好
在我们的应用中、需要动态配置 NCO AFE7921。
由于 FPGA 资源的限制、最大带宽只能达到100m、但应用的频率范围是3.7G-4G、因此我们想要快速动态地配置 NCO、AFE7921是否可以提供此功能?
如何通过 API 使用该功能?
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.
您好、HSia、
我们尝试使用 API 更改 NCO、我们还尝试另一个 NCO、我们希望将 TX NCO 和 RX NCO 更改为3840000KHz。
我们将 centerFreqRd 更改为3840000KHz


我们根据公式计算得出:0x1C71C7、转换为十进制系统为1864135。
我们将混频器值替换到 API 函数 updateTxNco()中。

这次该日志未报告错误、但 FPGA 无法拾取 AD 的本底噪声。
您能给我们一些关于调试此问题的提示吗?
尊敬的 Aman:
配置如下所示、默认 NCO 为3840MHz、我们希望动态地将 NCO 配置为2,700,340340037537503930
'''
Validation : AFE79xx Library Version
v1.67, v1.74
Case RX TX FB CLK Notes
---- ----------------- ----------------- ----------------- ----------- ------------
1 245.76Msps, 24410 491.52Msps, 44210 491.52Msps, 22210 FADC=2949.12M DAC in interleaved mode
SerDes=9830.4Mbps SerDes=9830.4Mbps SerDes=9830.4Mbps FDAC=8847.36M
PLL0, NCO=3500M PLL0, NCO=3500M NCO=3500M REF=491.52M
2 245.76Msps, 24410 491.52Msps, 44210 491.52Msps, 22210 FADC=2949.12M DAC in straight mode
SerDes=9830.4Mbps SerDes=9830.4Mbps SerDes=9830.4Mbps FDAC=8847.36M
PLL0, NCO=3500M PLL0, NCO=3500M NCO=3500M REF=491.52M
'''
setupParams.skipFpga = 1
sysParams = AFE.systemParams
setupParams.fpgaRefClk = 245.76
AFE.systemStatus.loadTrims = 1
sysParams.FRef = 245.76
sysParams.FadcRx = 2949.12
sysParams.FadcFb = 2949.12
sysParams.Fdac = 2949.12*3
sysParams.enableDacInterleavedMode = True #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.topLevelSystemMode = 'StaticTDDMode'
sysParams.RRFMode = 0 #4T4R2F FDD mode
sysParams.jesdSystemMode = [3,3]
#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 =['48410', '48410', '48410', '48410']
# 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 = ["22210","22210"]
sysParams.LMFSHdTx = ["48410","48410","48410","48410"]
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]
# 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,1,2,3,4,5,6,7]
# 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 = [4, 4]
sysParams.rxJesdTxScr = [True,True,True,True]
sysParams.fbJesdTxScr = [False,False]
sysParams.jesdRxScr = [True,True,True,True]
sysParams.rxJesdTxK = [32,32,32,32]
sysParams.fbJesdTxK = [32,32]
sysParams.jesdRxK = [16,16,16,16]
sysParams.ncoFreqMode = "1KHz"
sysParams.txNco0 = [[3500,3500], #Band0, Band1 for TxA for NCO0
[3840,3840], #Band0, Band1 for TxB for NCO0
[3840,3840], #Band0, Band1 for TxC for NCO0
[3500,3500]] #Band0, Band1 for TxD for NCO0
sysParams.rxNco0 = [[3840,2600], #Band0, Band1 for RxA for NCO0
[3500,2600], #Band0, Band1 for RxB for NCO0
[3500,2600], #Band0, Band1 for RxC for NCO0
[3840,2600]] #Band0, Band1 for RxD for NCO0
sysParams.fbNco0 = [2200,2200] #FBA, FBC for NCO0
sysParams.fbNco1 = [2200,2200] #FBA, FBC for NCO1
sysParams.fbNco2 = [2200,2200] #FBA, FBC for NCO2
sysParams.fbNco3 = [2200,2200] #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 = [24,24,24,24] # DDC decimation factor for RX A, B, C and D
sysParams.ddcFactorFb = [6,6]
sysParams.ducFactorTx = [72,72,72,72]
AFE.systemStatus.loadTrims =1
## The following parameters sets up the LMK04828 clocking schemes
lmkParams.pllEn = True#False
lmkParams.inputClk = 1474.56#737.28
lmkParams.sysrefFreq = 2949.12/1024
lmkParams.lmkFrefClk = True
## The following parameters sets up the register and macro dumps
logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\AFE7921_cband_3840.txt")
logDumpInst.logFormat = 0x0f
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 = True
sysParams.jesdCDLvdsSync = True
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_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']}
#AFE.systemParams.papParams[0]['enable'] = True
#AFE.systemParams.papParams[1]['enable'] = True
#AFE.systemParams.papParams[2]['enable'] = True
#AFE.systemParams.papParams[3]['enable'] = True
## Initiates LMK04828 and AFE79xx Bring-up
AFE.deviceBringup()
AFE.TOP.overrideTdd(15,3,15)
尊敬的陈先生:
谢谢! 我们将使用您的特定配置来查看。
我第一眼注意到的是-你正在使用 sysParams.ncoFreqMode ="1KHz"-我相信这意味着 下面的混频器参数应该以 kHz (3840000)为单位、而非在这个"频率字"(0x1C71C7)中。

我看到、在你的代码中、你是根据公式2^32 * mixerFreq/Fdac 计算 mixerFreq 的

(在这里要注意的是、FadcRx = 8847.36实际上是 Fdac、而不是 FadcRx。 FadcRx 的值为2949.12、如配置文件中所示。 只是在变量名称导致以后出现其他错误时提及)

由于您使用的是1KHz 模式而不是 FCW 模式、请尝试如下调用:
updateTxNco(afeId,chNo,3800000,0)
请告诉我这样的函数是否适合您。
谢谢!
Aman