Tool/software:
Hello,
My configuration procedure and setup is the same as my prior forum post: https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1452860/afe7950-4t4r2f-8b10b-2-4576-gbps-config-not-synchronizing :
JESD204B, 8b10b SERDES
4 Rx
2 Fb
4 Tx
ADC Fs = 2949.12, Decimate by 48
ADCFb Fs = 2949.12, Decimate by 24
DAC Fs = 11796.48, Interpolate by 96
SERDES rate = 2457.6
Use the AFE7950EVM on-board oscillator/PLL
Updates to jesd_link_params.vh to match configuration and ZCU102 SERDES mapping
Upon attempt to bring up design per TI204c-Setup.docx, I follow this order of operations:
- Power on ZCU102
- Power on AFE7950EVM
- Open Latte
- Run setup.py
- Run devInit.py
- Run 4T4R2F_2p4576.py
- Program FPGA
- Release master_reset_n -> 1
- Release tx_reset -> 0
- Run ConfigAfe.py
- Release rx_reset -> 0
I am able to get the JESD link to synchronize in both directions only sometimes, and I usually am required to issue one or more Latte JESD resync commands (TI_IP_AfeJesdReSync.py) and use the vio module to reset the FPGA one or more times.
My setup is with the AFE7950EVM connected to J4 of the Xilinx ZCU102 development board. Source baseline code is the TI reference design: C:\Users\jhobart_reliable\Downloads\TI_AFE7950\TI204C-IP-Release-v1.12-LATEST\reference_designs\zcu102_8b10b with TI204C-IP-Release-v1.12-LATEST\TI-204c-CoreIP\Vivado_2022_and_Newer\rtl\TI_204c_IP.svp with the following modified parameters:
MGTREFCLK=184.32 MHz
sys_pll outputs 184.32 MHz sys_clk and 30.72 MHz mgt_freerun_clk
MGT rate 2.4576 Gbps
I have modified jesd_link_params.vh to match the zcu102 to afe7950evm interface with F, K values to match my configuration.
My jesd_link_params.vh, constraints, and script files are attached. Please let me know whether I need to consider additional factors when de-asserting reset in this design.
After TI_IP_ConfigAfe.py:###########Device DAC JESD-RX 0 Link Status###########
lane0 Errors=0b1111; Got errors: 8b/10b disparty error; 8b/10b not-in-table code error; code synchronization error; elastic buffer match error. The first no-/K/ does not match 'match_ctrl' and 'match_data' programmed values;
lane1 Errors=0b1111; Got errors: 8b/10b disparty error; 8b/10b not-in-table code error; code synchronization error; elastic buffer match error. The first no-/K/ does not match 'match_ctrl' and 'match_data' programmed values;
lane2 Errors=0b1111; Got errors: 8b/10b disparty error; 8b/10b not-in-table code error; code synchronization error; elastic buffer match error. The first no-/K/ does not match 'match_ctrl' and 'match_data' programmed values;
lane3 Errors=0b1111; Got errors: 8b/10b disparty error; 8b/10b not-in-table code error; code synchronization error; elastic buffer match error. The first no-/K/ does not match 'match_ctrl' and 'match_data' programmed values;
CS State TX0: 0b10001001 . It is expected to be 0b10101010
FS State TX0: 0b00000000 . It is expected to be 0b01010101
resync did not help, so I put the FPGA back into reset (master_reset_n=0, tx/rx_sync_reset=1) and ran the config again:
###########Device DAC JESD-RX 0 Link Status###########
CS State TX0: 0b10101010 . It is expected to be 0b10101010
FS State TX0: 0b01010101 . It is expected to be 0b01010101
Could get the link up for device RX: 0
###################################
###########Device DAC JESD-RX 1 Link Status###########
CS State TX0: 0b10101010 . It is expected to be 0b10101010
FS State TX0: 0b01010101 . It is expected to be 0b01010101
Could get the link up for device RX: 1
###################################
Then I set the rx_sync_reset to '0', but rx_lmfc_to_buffer_release_delay[9:0] does not change values, and rx_lane_data_valid is always low. I toggled rx_sync_reset several more times, and eventually saw rx_lane_data_valid start toggling.
Note: Once the link is established in both directions, the JESD link remains stable.
Any ideas will be appreciated. I'm going to focus on the slow mgt_freerun_clock and see whether having a slower clock means that I need to handle reset differently.