Post Go back to editing

JESD204B TX problem

Thread Summary

The user is experiencing issues with the JESD204B link between AD9371 and a Kintex Ultrascale FPGA, specifically error 0x61 (Deframer error). The link remains in CGS, preventing ILAS from functioning correctly. The final answer suggests checking the AD9371 chip configuration in the trx0_ad9371 node and the transceiver configuration in the util_xcvr IP, as these might be misconfigured for the user's setup. The user has also confirmed that the LMFC rate is 4.680 MHz and the lane rate is 5990.400 MHz.
AI Generated Content
Category: Hardware
Product Number: FPGA

Hello, 

We are having some trouble with the tx path using a JESD204B link with AD9371 and FPGA (error 0x61). We have been probing a bit on the FPGA with ILA-cores and have found that the ILAS_config_data, ILAS_config_rd, and ILAS_config_addr is behaving weird during the error - no data is being set. 

So, what determines how up_wreq and up_cfg_is_writeable behaves? ie. when is it allowed to set the data?

I have posted below some code and waveforms:

  always @(posedge up_clk) begin
    if (up_reset == 1'b1) begin
      up_cfg_ilas_data_did <= 'h00;
      up_cfg_ilas_data_bid <= 'h00;
      up_cfg_ilas_data_scr <= 'h00;
      up_cfg_ilas_data_f <= 'h00;
      up_cfg_ilas_data_k <= 'h00;
      up_cfg_ilas_data_m <= 'h00;
      up_cfg_ilas_data_n <= 'h00;
      up_cfg_ilas_data_cs <= 'h00;
      up_cfg_ilas_data_np <= 'h00;
      up_cfg_ilas_data_subclassv <= 'h00;
      up_cfg_ilas_data_s <= 'h00;
      up_cfg_ilas_data_jesdv <= 'h00;
      up_cfg_ilas_data_cf <= 'h00;
      up_cfg_ilas_data_hd <= 'h00;
      up_cfg_ilas_data_l <= 'h00;
      for (i = 0; i < NUM_LANES; i = i + 1) begin
        up_cfg_ilas_data_lid[i] <= 'h00;
        up_cfg_ilas_data_fchk[i] <= 'h00;
      end
    end else if (up_wreq == 1'b1 && up_cfg_is_writeable == 1'b1) begin
      for (i = 0; i < NUM_LANES; i = i + 1) begin
        if (up_waddr[10:2] == ('h310 / 16) + i*2) begin
          case (up_waddr[1:0])
            2'h0: begin
              up_cfg_ilas_data_bid <= up_wdata[27:24];
              up_cfg_ilas_data_did <= up_wdata[23:16];
            end
            2'h1: begin
              up_cfg_ilas_data_k <= up_wdata[28:24];
              up_cfg_ilas_data_f <= up_wdata[23:16];
              up_cfg_ilas_data_scr <= up_wdata[15];
              up_cfg_ilas_data_l <= up_wdata[12:8];
              up_cfg_ilas_data_lid[i] <= up_wdata[4:0];
            end
            2'h2: begin
              up_cfg_ilas_data_jesdv <= up_wdata[31:29];
              up_cfg_ilas_data_s <= up_wdata[28:24];
              up_cfg_ilas_data_subclassv <= up_wdata[23:21];
              up_cfg_ilas_data_np <= up_wdata[20:16];
              up_cfg_ilas_data_cs <= up_wdata[15:14];
              up_cfg_ilas_data_n <= up_wdata[12:8];
              up_cfg_ilas_data_m <= up_wdata[7:0];
            end
            2'h3: begin
              up_cfg_ilas_data_fchk[i] <= up_wdata[31:24];
              up_cfg_ilas_data_hd <= up_wdata[7];
              up_cfg_ilas_data_cf <= up_wdata[4:0];
            end
          endcase
        end
      end
    end

Here is a waveform of a successful init: 

Here is a failing init:

Thanks in advance