ADRV9026
Recommended for New Designs
The ADRV9026 is a highly integrated, radio frequency (RF) agile transceiver offering four independently controlled transmitters, dedicated observation...
Datasheet
ADRV9026 on Analog.com
ADRV9010
Recommended for New Designs
The ADRV9010 is a highly integrated, radio frequency (RF) agile transceiver that offers four independently controlled transmitters, dedicated observation...
Datasheet
ADRV9010 on Analog.com
In the above sequence, please make sure that MCS passes. The MCS phase would require SYSREF’s to be sent from the clock chip or BBIC. The user can use the API function MultichipSyncStatusGet to retrieve the status. For a good case, this value should be set to 0x17.
The user can refer to adi_board_adrv9025_JesdTxBringup and adi_board_adrv9025_JesdBringup for detailed JESD bring up procedure for the Tx (deframer link). The overall detailed sequence including the MCS is in the file adi_adrv9025_daughter_board.c. The user can refer to the ‘LINK INITIALIZATION AND DEBUGGING’ section of the user guide for additional details on link bring up and debugging options for 204C links.
The user can check for any signal integrity issues after confirming that the init sequence looks fine. A PRBS test or an eye monitor test can be used for this. The user can refer to the section ‘FIRST TIME SYSTEM BRING UP—CHECKING LINK INTEGRITY’ in the ADRV9026 user guide. This section includes a reference test script for setting up the part for PRBS test as well as a SPO test to check the eye width inside the chip. Additional details are provided below –
##################################SAMPLE PYTHON PRBS SCRIPT########################################################
DfrmPrbsCfg=Types.adi_adrv9010_DfrmPrbsCfg_t()
DfrmPrbsCfg.deframerSel=Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0
DfrmPrbsCfg.polyOrder=Types.adi_adrv9010_DeframerPrbsOrder_e.ADI_ADRV9010_PRBS31
DfrmPrbsCfg.checkerLocation=Types.adi_adrv9010_DeframerPrbsCheckLoc_e.ADI_ADRV9010_PRBSCHECK_LANEDATA
adrv9010.DataInterface.DfrmPrbsCheckerStateSet(DfrmPrbsCfg)
DfrmPrbsErrCounters = Types.adi_adrv9025_DfrmPrbsErrCounters_t()
DfrmPrbsErrCounters.sampleSource = Types.adi_adrv9010_DeframerPrbsCheckLoc_e.ADI_ADRV9010_PRBSCHECK_LANEDATA
time.sleep(0.001)
#Setup FPGA and DUT PRBS Generator/Checker for PRBS7
print "Transmit PRBS 7 from FPGA"
prbs_sel = 5 # prbs 31 and 1 for PRBS 7#
arg = 1
while arg < len(sys.argv):
if sys.argv[arg] == "-pn":
if sys.srgv[arg+1] == "7":
prbs_sel = 1
elif sys.argv[arg+1] == "9":
prbs_sel = 2
elif sys.argv[arg+1] == "15":
prbs_sel = 3
elif sys.argv[arg+1] == "23":
prbs_sel = 4
elif sys.argv[arg+1] == "31":
prbs_sel = 5
else:
print "PRBS polynomial must be 7, 9, 15, 23, or 31"
exit(1)
arg = arg + 2
elif sys.argv[arg] == "-h" or sys.argv[arg] == "help":
print "Usage: -pn <polynomial>"
print " -pn <polynomial> : polynomial = 7 (default), 9, 15, 23, 31"
print " -h, help : this help message"
exit(0)
# Turn on PRBS
print "Starting PRBS"
for x in range(8):
writefpga((0x43400100 + x*0x100),0x00000004)
writefpga((0x43400148 + x*0x100),0x20800080)
writefpga((0x43400140 + x*0x100),0x0003007C)
writefpga((0x43400110 + x*0x100),0x02015233)
writefpga((0x43400120 + x*0x100),prbs_sel * 0x01000000)
writefpga((0x43400100 + x*0x100),0x00000000)
val = 0
#I do not know if this is needed
#while (val & 0x1) == 0:
#val = readfpga(0x43400104 + x*0x100)
#link.platform.board.Fpga.Prbs.PrbsSerializerEnable(0x0F,0x1)
adrv9010.DataInterface.DfrmPrbsCountReset()
print "Error Counters Cleared"
print "--------------PRBS Error Count Readout (after error cntr clear)"
adrv9010.DataInterface.DfrmPrbsErrCountGet(DfrmPrbsErrCounters)
print 'SERDIN_A PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[0]
print 'SERDIN_B PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[1]
print 'SERDIN_C PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[2]
print 'SERDIN_D PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[3]
print 'SERDIN_A PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[0]
print 'SERDIN_B PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[1]
print 'SERDIN_C PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[2]
print 'SERDIN_D PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[3]
time.sleep(1)
# Inject prbs error if desired:
injectError = 1
if injectError:
for x in range(8):
temp = readfpga(0x43400120 + x*0x100)
writefpga((0x43400120 + x*0x100), temp | 0x10000000)
print "--------------PRBS Error Count Readout (error injected)"
link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsErrCountGet(DfrmPrbsErrCounters)
print 'SERDIN_A PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[0]
print 'SERDIN_B PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[1]
print 'SERDIN_C PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[2]
print 'SERDIN_D PRBS Err Cnt: ',DfrmPrbsErrCounters.laneErrors[3]
print 'SERDIN_A PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[0]
print 'SERDIN_B PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[1]
print 'SERDIN_C PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[2]
print 'SERDIN_D PRBS Err Cnt: ',DfrmPrbsErrCounters.errorStatus[3]
###################################END OF SCRIPT#########################################################
If the user is not able to overcome signal integrity issues, ADI recommends changing the highBoost parameter in the profile. A value of 0 is recommended for low insertion loss (<11dB) lanes whereas a value of 1 is recommended for high insertion loss lanes (>11dB).
As aforementioned, for 25Gbps, ADI recommends to have the insertion loss over the SERDES lanes to be in the range of 8-15dB over the entire range of operating temperature. For insertion loss ranges beyond 8-15dB please contact ADI for specific recommendations. The user is expected to send the insertion loss for the different lanes that they are planning to use. An idea of the insertion loss variation over temp for each lane is needed so as to get optimized recommendations from ADI.
I used all functions above in adi_board_adrv9025_JesdTxBringup() Function for my ADRV9026 driver.
I used JESD204B and tx_sync and rx_sync were '1' and JESD link was up and I had Receiver and transmitter in correctly way.
After 3 months and now when I run adi_board_adrv9025_JesdTxBringup() function tx_sync = '0' and deframer don't look. when I use adi_adrv9025_DeframerStatus_t() function I receive 0x13 output.
* Status for JESD204B:
* deframerStatus | Bit Name | Description
* ----------------|--------------------------|--------------------------------------------------
* [7] | Valid checksum | 1 if the checksum calculated by the ADRV9025 matched the one sent in the ILAS data.
* [6] | EOF Event | This bit captures the internal status of the framer End of Frame event. Value =1 if framing error during ILAS
* [5] | EOMF Event | This bit captures the internal status of the framer End of Multi-Frame event. Value =1 if framing error during ILAS
* [4] | FS Lost | This bit captures the internal status of the framer Frame Symbol event. Value =1 if framing error during ILAS or user data (invalid replacement characters)
* [3] | Reserved | Reserved
* [2] | User Data Valid | =1 when in user data (deframer link is up and sending valid DAC data)
* [1] | SYSREF Received | Deframer has received the external SYSREF signal
* [0] | Syncb level | Current level of Syncb signal internal to deframer (=1 means link is up)
*
and Tx JESD Link don't look but Rx link is look.
I run ADRV9026 driver in same board and It works properly and I receive 0x87 output from adi_adrv9025_DeframerStatus_t() function
Can you help me for debug this problem in ADRV9026 chip?
Hi Ramarao,
could you please tell me more information that I can fix my bug?
I set chipscope in FPGA Project and I checked SYNCOUT1 signal from Deframer 0.
After I call adi_board_adrv9025_JesdTxBringup() and after adi_adrv9025_DfrmLinkStateSet() function SYNCOUT1 signal is '0'.
does ADRV9026 IC have Hardware problem or we can fix it in software way?
Scripts to do the PRBS scripts for Deframer of Madura
################################################################################# #GUI Version: 0.0.0.891 #DLL Version: 0.0.0.813 #Cmd Server Version: 2.0.0.9 #FPGA Version: 0xD9000007 #ARM Version: 0.0.0.471(ADI_ADRV9025_ARMBUILD_TESTOBJ) #StreamVersion: 0.0.0.71 ################################################################################# #Import Reference to the DLL import System import clr import time from System import Array clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll") #clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x86_FULL\\adrvtrx_dll.dll") from adrv9010_dll import AdiEvaluationSystem from adrv9010_dll import Types from adrv9010_dll import Ad9528Types def spiRead(address): data = adrv9010.Hal.SpiByteRead(address, 0) print "SPI Read Address " + hex(address) + ": " + hex(data[1]) def spiWrite(address, data): adrv9010.Hal.SpiByteWrite(address, data) print "SPI Write Address " + hex(address) + ": " + hex(data) #Create an Instance of the Class link = AdiEvaluationSystem.Instance connect = False if (link.IsConnected() == False): connect = True link.platform.board.Client.Connect("192.168.1.10", 55556) print "Connecting" if (link.IsConnected()): adrv9010 = link.Adrv9010Get(1) print "Connected" ##### YOUR CODE GOES HERE ##### ####################################### # step 1 :Configure the PRBS checker on FPGA ####################################### channel_mask = 0xF # D1:Lane0 D2:Lane1 D3:Lane2 D4:Lane3 polyorder = 1 # 0:normal operation, 1:PRBS7, 2:PRBS9, 3:PRBS15, 4:PRBS23, 5:PRBS31 link.platform.board.Fpga.Prbs.PrbsSerializerEnable(channel_mask,polyorder) ####################################### #step 2: Check deframer link status, link will be down ####################################### dfrmStatus = Types.adi_adrv9010_DeframerStatus_t() link.platform.board.Adrv9010Device.DataInterface.DeframerStatusGet(Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0,dfrmStatus) print "deframer status = ", hex(dfrmStatus.status) ####################################### #step 3 : Configure the PRBS checker on Madura ####################################### DFRMPRBS_cfg = Types.adi_adrv9010_DfrmPrbsCfg_t() DFRMPRBS_cfg.deframerSel = Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0 DFRMPRBS_cfg.polyOrder = Types.adi_adrv9010_DeframerPrbsOrder_e.ADI_ADRV9010_PRBS31 # correction PRBS7 : PRBS7 , PRBS9:PRBS15 , PRBS15 : PRBS31 DFRMPRBS_cfg.checkerLocation = Types.adi_adrv9010_DeframerPrbsCheckLoc_e.ADI_ADRV9010_PRBSCHECK_LANEDATA link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCheckerStateSet(DFRMPRBS_cfg) ####################################### #step4: Read the error status and counters ####################################### link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCountReset() errCnt = Types.adi_adrv9025_DfrmPrbsErrCounters_t() link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsErrCountGet(errCnt) print "PRBS sample source =", errCnt.sampleSource print errCnt.getNumLanes() #error ststus flags D0 = Lane inverted, D1 = invalid data flag, D2 = sample/lane error flag for i in range(0,errCnt.getNumLanes(),1): print "lane"+str(i)+'\t'+"error status = "+ hex(errCnt.errorStatus[i])+'\t' +"error count =" + str(errCnt.laneErrors[i]) if (connect): link.platform.board.Client.Disconnect() print "Disconnected" else: print "Not Connected" if (connect): link.platform.board.Client.Disconnect() print "Disconnected"
################################################################################# #GUI Version: 0.0.0.891 #DLL Version: 0.0.0.813 #Cmd Server Version: 2.0.0.9 #FPGA Version: 0xD9000007 #ARM Version: 0.0.0.471(ADI_ADRV9025_ARMBUILD_TESTOBJ) #StreamVersion: 0.0.0.71 ################################################################################# #Import Reference to the DLL import System import clr import time from System import Array clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll") #clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x86_FULL\\adrvtrx_dll.dll") from adrv9010_dll import AdiEvaluationSystem from adrv9010_dll import Types from adrv9010_dll import Ad9528Types def spiRead(address): data = adrv9010.Hal.SpiByteRead(address, 0) print "SPI Read Address " + hex(address) + ": " + hex(data[1]) def spiWrite(address, data): adrv9010.Hal.SpiByteWrite(address, data) print "SPI Write Address " + hex(address) + ": " + hex(data) #Create an Instance of the Class link = AdiEvaluationSystem.Instance connect = False if (link.IsConnected() == False): connect = True link.platform.board.Client.Connect("192.168.1.10", 55556) print "Connecting" if (link.IsConnected()): adrv9010 = link.Adrv9010Get(1) print "Connected" ##### YOUR CODE GOES HERE ##### ####################################### # step 1 :Configure the PRBS checker on FPGA ####################################### channel_mask = 0x3 # D1:Lane0 D2:Lane1 D3:Lane2 D4:Lane3 polyorder = 1 # 0:normal operation, 1:PRBS7, 2:PRBS9, 3:PRBS15, 4:PRBS23, 5:PRBS31 link.platform.board.Fpga.Prbs.PrbsSerializerEnable(channel_mask,polyorder) ####################################### #step 2: Check deframer link status, link will be down ####################################### dfrmStatus = Types.adi_adrv9010_DeframerStatus_t() link.platform.board.Adrv9010Device.DataInterface.DeframerStatusGet(Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0,dfrmStatus) print "deframer status = ", hex(dfrmStatus.status) ####################################### #step 3 : Configure the PRBS checker on Madura ####################################### DFRMPRBS_cfg = Types.adi_adrv9010_DfrmPrbsCfg_t() DFRMPRBS_cfg.deframerSel = Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0 DFRMPRBS_cfg.polyOrder = Types.adi_adrv9010_DeframerPrbsOrder_e.ADI_ADRV9010_PRBS7 # correction PRBS7 : PRBS7 , PRBS9:PRBS15 , PRBS15 : PRBS31 DFRMPRBS_cfg.checkerLocation = Types.adi_adrv9010_DeframerPrbsCheckLoc_e.ADI_ADRV9010_PRBSCHECK_LANEDATA #link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCheckerStateSet(DFRMPRBS_cfg) link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCheckerStateGet(DFRMPRBS_cfg) print "DFRMPRBS_cfg.deframerSel", DFRMPRBS_cfg.deframerSel print "DFRMPRBS_cfg.deframerSel", int(DFRMPRBS_cfg.deframerSel) ####################################### #step4: Read the error status and counters ####################################### link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCountReset() errCnt = Types.adi_adrv9025_DfrmPrbsErrCounters_t() link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsErrCountGet(errCnt) print "PRBS sample source =", errCnt.sampleSource print errCnt.getNumLanes() #error ststus flags D0 = Lane inverted, D1 = invalid data flag, D2 = sample/lane error flag for i in range(0,errCnt.getNumLanes(),1): print "lane"+str(i)+'\t'+"error status = "+ hex(errCnt.errorStatus[i])+'\t' +"error count =" + str(errCnt.laneErrors[i]) if (connect): link.platform.board.Client.Disconnect() print "Disconnected" else: print "Not Connected" if (connect): link.platform.board.Client.Disconnect() print "Disconnected"
Deframer status of 0x13 means:
FS lost bit is high which means framing error during ILAS or user data. Can you check this part?
But my worry is how this can happen after 3 months? May be you try increasing the FPGA serializer amplitude and check if the error goes away.
Scripts to do the PRBS scripts for Deframer of Madura
################################################################################# #GUI Version: 0.0.0.891 #DLL Version: 0.0.0.813 #Cmd Server Version: 2.0.0.9 #FPGA Version: 0xD9000007 #ARM Version: 0.0.0.471(ADI_ADRV9025_ARMBUILD_TESTOBJ) #StreamVersion: 0.0.0.71 ################################################################################# #Import Reference to the DLL import System import clr import time from System import Array clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll") #clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x86_FULL\\adrvtrx_dll.dll") from adrv9010_dll import AdiEvaluationSystem from adrv9010_dll import Types from adrv9010_dll import Ad9528Types def spiRead(address): data = adrv9010.Hal.SpiByteRead(address, 0) print "SPI Read Address " + hex(address) + ": " + hex(data[1]) def spiWrite(address, data): adrv9010.Hal.SpiByteWrite(address, data) print "SPI Write Address " + hex(address) + ": " + hex(data) #Create an Instance of the Class link = AdiEvaluationSystem.Instance connect = False if (link.IsConnected() == False): connect = True link.platform.board.Client.Connect("192.168.1.10", 55556) print "Connecting" if (link.IsConnected()): adrv9010 = link.Adrv9010Get(1) print "Connected" ##### YOUR CODE GOES HERE ##### ####################################### # step 1 :Configure the PRBS checker on FPGA ####################################### channel_mask = 0xF # D1:Lane0 D2:Lane1 D3:Lane2 D4:Lane3 polyorder = 1 # 0:normal operation, 1:PRBS7, 2:PRBS9, 3:PRBS15, 4:PRBS23, 5:PRBS31 link.platform.board.Fpga.Prbs.PrbsSerializerEnable(channel_mask,polyorder) ####################################### #step 2: Check deframer link status, link will be down ####################################### dfrmStatus = Types.adi_adrv9010_DeframerStatus_t() link.platform.board.Adrv9010Device.DataInterface.DeframerStatusGet(Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0,dfrmStatus) print "deframer status = ", hex(dfrmStatus.status) ####################################### #step 3 : Configure the PRBS checker on Madura ####################################### DFRMPRBS_cfg = Types.adi_adrv9010_DfrmPrbsCfg_t() DFRMPRBS_cfg.deframerSel = Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0 DFRMPRBS_cfg.polyOrder = Types.adi_adrv9010_DeframerPrbsOrder_e.ADI_ADRV9010_PRBS31 # correction PRBS7 : PRBS7 , PRBS9:PRBS15 , PRBS15 : PRBS31 DFRMPRBS_cfg.checkerLocation = Types.adi_adrv9010_DeframerPrbsCheckLoc_e.ADI_ADRV9010_PRBSCHECK_LANEDATA link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCheckerStateSet(DFRMPRBS_cfg) ####################################### #step4: Read the error status and counters ####################################### link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCountReset() errCnt = Types.adi_adrv9025_DfrmPrbsErrCounters_t() link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsErrCountGet(errCnt) print "PRBS sample source =", errCnt.sampleSource print errCnt.getNumLanes() #error ststus flags D0 = Lane inverted, D1 = invalid data flag, D2 = sample/lane error flag for i in range(0,errCnt.getNumLanes(),1): print "lane"+str(i)+'\t'+"error status = "+ hex(errCnt.errorStatus[i])+'\t' +"error count =" + str(errCnt.laneErrors[i]) if (connect): link.platform.board.Client.Disconnect() print "Disconnected" else: print "Not Connected" if (connect): link.platform.board.Client.Disconnect() print "Disconnected"
################################################################################# #GUI Version: 0.0.0.891 #DLL Version: 0.0.0.813 #Cmd Server Version: 2.0.0.9 #FPGA Version: 0xD9000007 #ARM Version: 0.0.0.471(ADI_ADRV9025_ARMBUILD_TESTOBJ) #StreamVersion: 0.0.0.71 ################################################################################# #Import Reference to the DLL import System import clr import time from System import Array clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll") #clr.AddReferenceToFileAndPath("C:\\Program Files (x86)\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x86_FULL\\adrvtrx_dll.dll") from adrv9010_dll import AdiEvaluationSystem from adrv9010_dll import Types from adrv9010_dll import Ad9528Types def spiRead(address): data = adrv9010.Hal.SpiByteRead(address, 0) print "SPI Read Address " + hex(address) + ": " + hex(data[1]) def spiWrite(address, data): adrv9010.Hal.SpiByteWrite(address, data) print "SPI Write Address " + hex(address) + ": " + hex(data) #Create an Instance of the Class link = AdiEvaluationSystem.Instance connect = False if (link.IsConnected() == False): connect = True link.platform.board.Client.Connect("192.168.1.10", 55556) print "Connecting" if (link.IsConnected()): adrv9010 = link.Adrv9010Get(1) print "Connected" ##### YOUR CODE GOES HERE ##### ####################################### # step 1 :Configure the PRBS checker on FPGA ####################################### channel_mask = 0x3 # D1:Lane0 D2:Lane1 D3:Lane2 D4:Lane3 polyorder = 1 # 0:normal operation, 1:PRBS7, 2:PRBS9, 3:PRBS15, 4:PRBS23, 5:PRBS31 link.platform.board.Fpga.Prbs.PrbsSerializerEnable(channel_mask,polyorder) ####################################### #step 2: Check deframer link status, link will be down ####################################### dfrmStatus = Types.adi_adrv9010_DeframerStatus_t() link.platform.board.Adrv9010Device.DataInterface.DeframerStatusGet(Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0,dfrmStatus) print "deframer status = ", hex(dfrmStatus.status) ####################################### #step 3 : Configure the PRBS checker on Madura ####################################### DFRMPRBS_cfg = Types.adi_adrv9010_DfrmPrbsCfg_t() DFRMPRBS_cfg.deframerSel = Types.adi_adrv9010_DeframerSel_e.ADI_ADRV9010_DEFRAMER_0 DFRMPRBS_cfg.polyOrder = Types.adi_adrv9010_DeframerPrbsOrder_e.ADI_ADRV9010_PRBS7 # correction PRBS7 : PRBS7 , PRBS9:PRBS15 , PRBS15 : PRBS31 DFRMPRBS_cfg.checkerLocation = Types.adi_adrv9010_DeframerPrbsCheckLoc_e.ADI_ADRV9010_PRBSCHECK_LANEDATA #link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCheckerStateSet(DFRMPRBS_cfg) link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCheckerStateGet(DFRMPRBS_cfg) print "DFRMPRBS_cfg.deframerSel", DFRMPRBS_cfg.deframerSel print "DFRMPRBS_cfg.deframerSel", int(DFRMPRBS_cfg.deframerSel) ####################################### #step4: Read the error status and counters ####################################### link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsCountReset() errCnt = Types.adi_adrv9025_DfrmPrbsErrCounters_t() link.platform.board.Adrv9010Device.DataInterface.DfrmPrbsErrCountGet(errCnt) print "PRBS sample source =", errCnt.sampleSource print errCnt.getNumLanes() #error ststus flags D0 = Lane inverted, D1 = invalid data flag, D2 = sample/lane error flag for i in range(0,errCnt.getNumLanes(),1): print "lane"+str(i)+'\t'+"error status = "+ hex(errCnt.errorStatus[i])+'\t' +"error count =" + str(errCnt.laneErrors[i]) if (connect): link.platform.board.Client.Disconnect() print "Disconnected" else: print "Not Connected" if (connect): link.platform.board.Client.Disconnect() print "Disconnected"
Deframer status of 0x13 means:
FS lost bit is high which means framing error during ILAS or user data. Can you check this part?
But my worry is how this can happen after 3 months? May be you try increasing the FPGA serializer amplitude and check if the error goes away.