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.

[参考译文] ADS54J60:ADS54J60

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1054266/ads54j60-ads54j60

器件型号:ADS54J60

您好,  

我使用的是 ADS54J60 EVM 板+ Kintex 7板(480t1156)、配置如下:

参考时钟:245.76 MHz,线路速率:6.144,sysref:3MHz (计数= 768) ,8通道  

正在使用序列:

LMK_Config_Onboard _983p04_MSPS -用于 LMK 配置  

ADC 硬复位  

ADS54J60_LMF_8224

我使用的是从 Xilinx 的 JESD IP 生成的示例设计、其中包含   ADS54J60_LMF_8224中提到的 ADC 配置所需的参数

根据使用这些配置的实验  

我可以看到

SYNC 引脚 --> 低电平

qpll0 lock --> 1,以及

EVM 上的 LED2为高电平。  

请确认我的配置是否有任何问题。

谢谢,此致,  

Nikitha  

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

    您好、Nikitha、

    我正在检查这个问题、很快就会回来。

    此致、Amy

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

    您好、Nikitha、

    一切看起来都很好、但我确实注意到您的 SERDES 速率和 sysref 已关闭。 SERDES 速率应为4.9152 Gbps。 下面是最大 sysref 频率的计算:

    最大 sysref 频率=通道速率/[10 * K * F * N]、其中:

    K =一个多帧中的帧数

    f =每帧#个八位位组

    N =正整数

    我假设您的 K=16、由于这是 LMF8224模式、F=2。 我选择 N=3以获得15.36MHz 的最大频率。 您可以将其除以正整数(例如、使用5)以获得3.072MHz。

    此致、Amy

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

    您好、Amy、

    感谢您的快速回复。  

    使用上述输入、通过更改 LMK 寄存器可以看到3MHz 的 Sysref。 但我看不到任何 ADC 数据,它中的0仍然是零。  

    根据该设计、我们遵循"TI204C-IP-Release-v1.10-late" 来映射 ADS54J60。  此设计具有 ADC 的 IQ 映射,不确定   ADS54J60是否同样适用。  

    您能不能向我推荐与 ADS54j60映射相关的任何内容。  

    这些是观察到的信号  

    Rx_lane 数据有效位始终为零  

    2.ILA_disp_err_count[0][3:0]-"1111"

    3.ILA_INVALID_EOD_ERR_COUNT[0][3:0]-"1111"  

    您是否对要监控的特定信号有任何指导。  

    提前感谢。  

    谢谢,此致,  

    Nikitha  

    e2e.ti.com/.../1373.iladata.csve2e.ti.com/.../5140.Table.xlsx

    `default_nettype none
    `timescale 1ps/1ps
    
    module refdesign_rx
    #(
    	parameter IP_PROTOCOL = 810,
    	parameter NUM_RX_LANES = 8,
    	parameter RX_LN_DATA_WIDTH = 64,
    	parameter ADC_RES = 16
    	)
    (
    // Free running clock required by the transceiver
    	input wire	mgt_freerun_clock,
    
    // Application/System Clock for the Rx
    	input wire	rx_sys_clock,
    
    // Application/System Synchronous Reset for the Rx
    	input wire	rx_sync_reset,
    
    	input wire rx_all_lanes_locked,
    	input wire rx_release_all_lanes,
    
    // Lane data outputs. There is one output data
    // bus per lane
    	input wire	[RX_LN_DATA_WIDTH-1:0] rx_lane_data [NUM_RX_LANES-1:0],
    
    // Data valid signal. This applies simultaneously
    // to all lanes
    	input wire	rx_lane_data_valid,
    
    // Rx Lane Buffer overflow indicator
    	input wire	[NUM_RX_LANES-1:0] rx_lane_buffer_overflow,
    
    // SYNCn signal
    	input wire	rx_sync_n,
    
    	input wire	[111:0] rx_lane_configuration_data [NUM_RX_LANES-1:0],
    	input wire	[RX_LN_DATA_WIDTH/8-1:0] rx_lane_start_of_frame [NUM_RX_LANES-1:0],
    	input wire	[RX_LN_DATA_WIDTH/8-1:0] rx_lane_start_of_multiframe [NUM_RX_LANES-1:0],
    
    // The following are the lane sideband signals
    // in 64b/66b mode
    
    	input wire	[NUM_RX_LANES-1:0] rx_lane_start_of_mblock,
    	input wire	[NUM_RX_LANES-1:0] rx_lane_start_of_emblock,
    	input wire	[NUM_RX_LANES-1:0] rx_lane_crc_error,
    
    // The following signals are the error related
    // counts for the 8b/10b protocol
    	input wire	[3:0] rx_lane_invalid_somf_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_invalid_eomf_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_invalid_eof_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_notintable_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_disp_err_count [NUM_RX_LANES-1:0],
    
    // The following signals are the error related
    // counts for the 64b/66b protocol
    	input wire	[3:0] rx_lane_invalid_header_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_invalid_eomb_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_invalid_eoemb_err_count [NUM_RX_LANES-1:0],
    	input wire	[3:0] rx_lane_crc_mismatch_err_count [NUM_RX_LANES-1:0],
    
    // Rx Sysref control and status signals
    	input wire	rx_sysref,
    	input wire	[3:0] rx_sysref_realign_count,
    	input wire	rx_clr_sysref_realign_count,
    	input wire	rx_lmfc_pulse,
    	input wire	rx_lemc_pulse
    );
    
    /////////////////////////////////////////////
    // Instantiate the IP
    /////////////////////////////////////////////
    
    // Instantiate a VIO for reflecting the ILAS
    // config octets for each lane. This is valid
    // only for 8b/10b mode
    
    if (IP_PROTOCOL == 810)
    
    begin
    
    vio_ilas vio_ilas_inst (
    	.clk (mgt_freerun_clock),
    	.probe_in0 (rx_lane_configuration_data[0]),
    	.probe_in1 (rx_lane_configuration_data[1]),
    	.probe_in2 (rx_lane_configuration_data[2]),
    	.probe_in3 (rx_lane_configuration_data[3]),
    	.probe_in4 (rx_lane_configuration_data[4]),
    	.probe_in5 (rx_lane_configuration_data[5]),
    	.probe_in6 (rx_lane_configuration_data[6]),
    	.probe_in7 (rx_lane_configuration_data[7])
    	);
    
    end
    
    // Xilinx ILA module for capturing the Rx lanes and
    // their sideband signals
    // NOTE: This supports a max of 8 lanes
    ila_link_rx 
    #(
    	.LINK_PROTOCOL (IP_PROTOCOL),
    	.NUM_LANES (NUM_RX_LANES),
    	.RX_BYTES_PER_LANE (RX_LN_DATA_WIDTH/8)
    	)
    ila_link_rx_inst (
    	.sys_clock (rx_sys_clock),
    	.rx_lane_data (rx_lane_data),
    	.rx_lane_data_valid (rx_lane_data_valid),
    	.rx_lane_start_of_frame (rx_lane_start_of_frame),
    	.rx_lane_start_of_multiframe (rx_lane_start_of_multiframe),
    	.rx_lane_start_of_mblock (rx_lane_start_of_mblock),
    	.rx_lane_start_of_emblock (rx_lane_start_of_emblock),
    	.rx_lane_crc_error (rx_lane_crc_error),
    	.rx_lane_buffer_overflow (rx_lane_buffer_overflow),
    	.rx_lane_invalid_somf_err_count (rx_lane_invalid_somf_err_count),
    	.rx_lane_invalid_eomf_err_count (rx_lane_invalid_eomf_err_count),
    	.rx_lane_invalid_eof_err_count (rx_lane_invalid_eof_err_count),
    	.rx_lane_notintable_err_count (rx_lane_notintable_err_count),
    	.rx_lane_disp_err_count (rx_lane_disp_err_count),
    	.rx_lane_invalid_header_err_count (rx_lane_invalid_header_err_count),
    	.rx_lane_invalid_eomb_err_count (rx_lane_invalid_eomb_err_count),
    	.rx_lane_invalid_eoemb_err_count (rx_lane_invalid_eoemb_err_count),
    	.rx_lane_crc_mismatch_err_count (rx_lane_crc_mismatch_err_count),
    	.rx_sync_n (rx_sync_n),
    	.rx_sysref (rx_sysref),
    	.rx_sysref_realign_count (rx_sysref_realign_count),
    	.rx_lmfc_pulse (rx_lmfc_pulse),
    	.rx_lemc_pulse (rx_lemc_pulse)
    );
    
    // The following logic maps the output of the Rx
    // Transport Layer to an ILA (for signal analysis)
    
    // Logic for mapping Rx samples to channel data
    // In this reference design, the data output is as
    // follows:
    // Channel 1 outputs 16 bit I stream on Lane 0
    // Channel 1 outputs 16 bit Q stream on Lane 1
    // Channel 2 outputs 16 bit I stream on Lane 2
    // Channel 2 outputs 16 bit Q stream on Lane 3
    // Channel 3 outputs 16 bit I stream on Lane 4
    // Channel 3 outputs 16 bit Q stream on Lane 5
    // Channel 4 outputs 16 bit I stream on Lane 6
    // Channel 4 outputs 16 bit Q stream on Lane 7
    
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch1_I_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch1_Q_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch2_I_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch2_Q_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch3_I_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch3_Q_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch4_I_samples[3:0];
    (*dont_touch = "true"*) wire [ADC_RES-1:0] ch4_Q_samples[3:0];
    
    genvar i;
    generate for (i=0; i<4; i=i+1)
    begin : sample_gen
    
    assign ch1_I_samples[i] = rx_lane_data[0][63-16*i -: ADC_RES];
    assign ch1_Q_samples[i] = rx_lane_data[1][63-16*i -: ADC_RES];
    assign ch2_I_samples[i] = rx_lane_data[2][63-16*i -: ADC_RES];
    assign ch2_Q_samples[i] = rx_lane_data[3][63-16*i -: ADC_RES];
    assign ch3_I_samples[i] = rx_lane_data[4][63-16*i -: ADC_RES];
    assign ch3_Q_samples[i] = rx_lane_data[5][63-16*i -: ADC_RES];
    assign ch4_I_samples[i] = rx_lane_data[6][63-16*i -: ADC_RES];
    assign ch4_Q_samples[i] = rx_lane_data[7][63-16*i -: ADC_RES];
    
    end
    endgenerate
    
    ila_samples ila_samples_inst (
    	.clk (rx_sys_clock),
    
    	.probe0 (ch1_I_samples[0]),
    	.probe1 (ch1_I_samples[1]),
    	.probe2 (ch1_I_samples[2]),
    	.probe3 (ch1_I_samples[3]),
    	.probe4 (ch1_Q_samples[0]),
    	.probe5 (ch1_Q_samples[1]),
    	.probe6 (ch1_Q_samples[2]),
    	.probe7 (ch1_Q_samples[3]),
    
    	.probe8 (ch2_I_samples[0]),
    	.probe9 (ch2_I_samples[1]),
    	.probe10 (ch2_I_samples[2]),
    	.probe11 (ch2_I_samples[3]),
    	.probe12 (ch2_Q_samples[0]),
    	.probe13 (ch2_Q_samples[1]),
    	.probe14 (ch2_Q_samples[2]),
    	.probe15 (ch2_Q_samples[3]),
    
    	.probe16 (ch3_I_samples[0]),
    	.probe17 (ch3_I_samples[1]),
    	.probe18 (ch3_I_samples[2]),
    	.probe19 (ch3_I_samples[3]),
    	.probe20 (ch3_Q_samples[0]),
    	.probe21 (ch3_Q_samples[1]),
    	.probe22 (ch3_Q_samples[2]),
    	.probe23 (ch3_Q_samples[3]),
    
    	.probe24 (ch4_I_samples[0]),
    	.probe25 (ch4_I_samples[1]),
    	.probe26 (ch4_I_samples[2]),
    	.probe27 (ch4_I_samples[3]),
    	.probe28 (ch4_Q_samples[0]),
    	.probe29 (ch4_Q_samples[1]),
    	.probe30 (ch4_Q_samples[2]),
    	.probe31 (ch4_Q_samples[3]),
    
    	.probe32 (rx_lane_data_valid));
    
    endmodule
    `default_nettype wire
    

    e2e.ti.com/.../1373.iladata.csv

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

    您好、Nikitha、

    refdesign_Rx 模块提供了如何将通道数据映射到样本的示例、因此您需要针对 ADC 的 LMFS 配置编写自己的代码。 TI JESD IP 用户指南的第6.5节对此进行了说明。

    但是、如果 Rx_lane 数据有效信号始终为"0"、则表示 FPGA 中的 Rx IP 尚未与 ADC 建立有效链路。 请确保收发器配置为正确的通道速率、并且所有具有有效通道的四通道都指示已锁定的 PLL。 您需要执行以下操作:

    1>在 Vivado 中编辑收发器 xci、以确保其与电路板上的通道和参考时钟设置相匹配

    2>编辑 GTX_8b10b_rxtx 文件(用于实例化收发器模块)以确保正确映射端口。 如果您的收发器修改了收发器的实体、则需要执行此操作

    3>如果上述操作正确完成、您应该会看到 QPLL 锁定为"11"、因为有8个通道、因此我假设至少有两个四通道。

    请确保上述功能正常、之后您可以释放 IP 的重置以检查它是否建立了链接:

    1> ADC_Rx_SYNC_n 信号应变为"1"、这意味着 Rx 侧的所有通道都已成功检测到相应 Tx 通道发送的必要字符序列。

    2> IP 的 Rx_All_Lanes_locked 输出应变为"1"、表示所有通道均已锁定、Rx IP 已准备好开始导出通道数据。

    3>在执行上述步骤后、您可以专注于将通道数据映射到样本。

    此致、

    阿迈德

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

    您好,Ameet,

    感谢您的回答。  

    请找到随附 的 PPT、其中包括

      1.在收发器 xci 中所做的修改。  

      2. LMK 和 ADC 配置文件  

      VIO 和 ILA 数据

     e2e.ti.com/.../Observations-on-ADS54J60.pptx

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

    您好、Nikitha、

    请帮助我理解您在幻灯片4上添加的评论。 FPGA 有两个参考时钟:

    1> GT 参考时钟:应为122.88MHz (基于您的 xci)

    2> FPGA 参考时钟(JESD IP 中的 SYS_CLOCK):可以是等于或大于61.44MHz 的任何频率

    注释表示频率为147.46MHz。 这将导致线路速率(5.8984Gbps)与 ADC 发送的数据不匹配(4.9152Gbps)。 如果我对某些内容有误解、请告诉我。

    为了使链路正常工作、ADC 和 FPGA 必须以相同的线路速率进行协商。 如果您看到 SYNC_n 信号始终为"0"、则意味着 FPGA 尚未锁定到数据流的控制字符中(对于一个或多个通道)。  

    此致、

    阿迈德