Post Go back to editing

QPLL RX buffer under/overflow flow error

Category: Hardware
Product Number: AD9082

Dear, 

 We have an AD9082 FMCA EBZ evaluation board driven by a Xilinx ZCU102 FPGA board.

I tried to modify the HDL reference and the petalinux device tree to get the DAC/ADC working at 9.6GHz/4.8GHz, decimation of 4 and interpolation of 8. 

I used MxFE JESD204x Mode Selector Tool to identify the JESD modes and decimation and interpolation. Here  are the modes:

  • TX: JESD Mode Number 17  txBW 960.0  Total Int 8  Coarse Int 8  Fine Int 1  Dual Link False  JESD Deframer JESD204B  L 8  M 4  F 1  S 1  K 32  N 16  NP 16  LaneRate 12.0
  • RX: JESD Mode Number 18  rxBW 976.8  Total Dec 4  Coarse Dec 4  Fine Dec 1  Dual Link False  JESD Framer JESD204B  Async False  L 8  M 4  F 1  S 1  K 32  NP 16  LaneRate 12.0

The HDL reference design is generated by the command below. 

make JESD_MODE=8B10B

RX_LANE_RATE=12\

TX_LANE_RATE=12\

RX_JESD_M=4    \

RX_JESD_L=8    \

RX_JESD_S=1    \

RX_JESD_NP=16  \

TX_JESD_M=4    \

TX_JESD_L=8    \

TX_JESD_S=1    \

TX_JESD_NP=16

However, when the Petaliunx boots up I get the following error multiple times and the ADC doesn't work. 

[ 12.514189] axi_adxcvr 84a60000.axi-adxcvr-rx: adxcvr_clk_enable: QPLL RX buffer underflow error, status: 0x61
[ 12.524180] axi_adxcvr 84a60000.axi-adxcvr-rx: adxcvr_clk_enable: QPLL RX buffer overflow error, status: 0x61

I would be grateful if you help me to resolve this issue.

Below, you can see the whole modified device tree, where I configured the DEV_REFCLK= 200MHz, DEV_SYSREF = FPGA_SYSREF= 1,171,875 Hz, CORE_CLK_Tx = CORE_CLK_RX = FPGA_REFCLK1 = FPGA_REFCLK2 = 300MHz.

#include "zynqmp-zcu102-rev10-ad9081.dts"

&axi_ad9081_adxcvr_rx {
adi,sys-clk-select = <XCVR_QPLL>;
//adi,out-clk-select = <XCVR_REFCLK_DIV2>;
adi,out-clk-select = <XCVR_REFCLK>;
};


&axi_ad9081_adxcvr_tx {
adi,sys-clk-select = <XCVR_QPLL>;
//adi,out-clk-select = <XCVR_REFCLK_DIV2>;
adi,out-clk-select = <XCVR_REFCLK>;
};

/delete-node/ &ad9081_dac2;
/delete-node/ &ad9081_dac3;

&spi1 {
status = "okay";

hmc7044: hmc7044@0 {
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <1>;
compatible = "adi,hmc7044";
reg = <0>;
spi-max-frequency = <1000000>;

jesd204-device;
#jesd204-cells = <2>;
jesd204-sysref-provider;
adi,jesd204-max-sysref-frequency-hz = <2000000>; /* 2 MHz */
adi,pll1-clkin-frequencies = <100000000 100000000 0 0>;
adi,vcxo-frequency = <100000000>;
adi,pll1-loop-bandwidth-hz = <200>;
adi,pll2-output-frequency = <3000000000>;
adi,sysref-timer-divider = <1024>;
adi,pulse-generator-mode = <0>;
adi,clkin0-buffer-mode = <0x07>;
adi,clkin1-buffer-mode = <0x07>;
adi,oscin-buffer-mode = <0x15>;
adi,gpi-controls = <0x00 0x00 0x00 0x00>;
adi,gpo-controls = <0x37 0x33 0x00 0x00>;
clock-output-names =
"hmc7044_out0", "hmc7044_out1", "hmc7044_out2",
"hmc7044_out3", "hmc7044_out4", "hmc7044_out5",
"hmc7044_out6", "hmc7044_out7", "hmc7044_out8",
"hmc7044_out9", "hmc7044_out10", "hmc7044_out11",
"hmc7044_out12", "hmc7044_out13";


hmc7044_c0: channel@0 {
reg = <0>;
adi,extended-name = "CORE_CLK_RX";
adi,divider = <10>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;

};

hmc7044_c2: channel@2 {
reg = <2>;
adi,extended-name = "DEV_REFCLK";
adi,divider = <15>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
};

hmc7044_c3: channel@3 {
reg = <3>;
adi,extended-name = "DEV_SYSREF";
adi,divider = <2560>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
adi,jesd204-sysref-chan;
};

hmc7044_c6: channel@6 {
reg = <6>;
adi,extended-name = "CORE_CLK_TX";
adi,divider = <10>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
};

hmc7044_c8: channel@8 {
reg = <8>;
adi,extended-name = "FPGA_REFCLK1";
adi,divider = <10>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
};

hmc7044_c10: channel@10 {
reg = <10>;
adi,extended-name = "CORE_CLK_RX_ALT";
adi,divider = <10>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
};

hmc7044_c12: channel@12 {
reg = <12>;
adi,extended-name = "FPGA_REFCLK2";
adi,divider = <10>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
};

//********************
hmc7044_c13: channel@13 {
reg = <13>;
adi,extended-name = "FPGA_SYSREF";
adi,divider = <2560>;
adi,driver-mode = <HMC7044_DRIVER_MODE_LVDS>;
adi,jesd204-sysref-chan;
};
};
};

&fmc_spi {

trx0_ad9081: ad9081@0 {
compatible = "adi,ad9082";
reg = <0>;
spi-max-frequency = <5000000>;

/* Clocks */
clocks = <&hmc7044 2>;
clock-names = "dev_clk";

clock-output-names = "rx_sampl_clk", "tx_sampl_clk";
#clock-cells = <1>;

jesd204-device;
#jesd204-cells = <2>;
jesd204-top-device = <0>; /* This is the TOP device */
jesd204-link-ids = <FRAMER_LINK0_RX DEFRAMER_LINK0_TX>;

jesd204-inputs =
<&axi_ad9081_core_rx 0 FRAMER_LINK0_RX>,
<&axi_ad9081_core_tx 0 DEFRAMER_LINK0_TX>;

adi,tx-dacs {
#size-cells = <0>;
#address-cells = <1>;

adi,dac-frequency-hz = /bits/ 64 <9600000000>;

adi,main-data-paths {
#address-cells = <1>;
#size-cells = <0>;
adi,interpolation = <8>;

ad9081_dac0: dac@0 {
reg = <0>;
adi,crossbar-select = <&ad9081_tx_fddc_chan0>;
adi,nco-frequency-shift-hz = /bits/ 64 <1000000000>; /* 1000 MHz */
};
ad9081_dac1: dac@1 {
reg = <1>;
adi,crossbar-select = <&ad9081_tx_fddc_chan1>;
adi,nco-frequency-shift-hz = /bits/ 64 <1100000000>; /* 1100 MHz */
};
};


adi,channelizer-paths {
#address-cells = <1>;
#size-cells = <0>;

adi,interpolation = <1>;

ad9081_tx_fddc_chan0: channel@0 {
reg = <0>;
adi,gain = <2048>; /* 2048 * 10^(gain_dB/20) */
adi,nco-frequency-shift-hz = /bits/ 64 <0>;

};
ad9081_tx_fddc_chan1: channel@1 {
reg = <1>;
adi,gain = <2048>; /* 2048 * 10^(gain_dB/20) */
adi,nco-frequency-shift-hz = /bits/ 64 <0>;

};
};

adi,jesd-links {

ad9081_tx_jesd_l0: link@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
adi,logical-lane-mapping = /bits/ 8 <0 2 7 6 1 5 4 3>;

adi,link-mode = <17>; /* JESD Quick Configuration Mode */

adi,subclass = <1>; /* JESD SUBCLASS 0,1,2 */
adi,version = <1>; /* JESD VERSION 0=204A,1=204B,2=204C */
adi,dual-link = <0>; /* JESD Dual Link Mode */

adi,converters-per-device = <4>; /* JESD M */
adi,octets-per-frame = <1>; /* JESD F */

adi,frames-per-multiframe = <32>; /* JESD K */
adi,converter-resolution = <16>; /* JESD N */
adi,bits-per-sample = <16>; /* JESD NP' */
adi,control-bits-per-sample = <0>; /* JESD CS */
adi,lanes-per-device = <8>; /* JESD L */
adi,samples-per-converter-per-frame = <1>; /* JESD S */
adi,high-density = <1>; /* JESD HD */

adi,tpl-phase-adjust = <6>;
};
};
};

adi,rx-adcs {
#size-cells = <0>;
#address-cells = <1>;
adi,adc-frequency-hz = /bits/ 64 <4800000000>;

adi,main-data-paths {
#address-cells = <1>;
#size-cells = <0>;

ad9081_adc0: adc@0 {
reg = <0>;
adi,decimation = <4>;
adi,nco-frequency-shift-hz = /bits/ 64 <1000000000>;
adi,nco-mixer-mode = <AD9081_ADC_NCO_VIF>;
//adi,crossbar-select = <&ad9081_rx_fddc_chan0>, <&ad9081_rx_fddc_chan2>; /* Static for now */
};
ad9081_adc1: adc@1 {
reg = <1>;
adi,decimation = <4>;
adi,nco-frequency-shift-hz = /bits/ 64 <(1000000000)>;
adi,nco-mixer-mode = <AD9081_ADC_NCO_VIF>;
//adi,crossbar-select = <&ad9081_rx_fddc_chan1>, <&ad9081_rx_fddc_chan3>; /* Static for now */
};

};

adi,channelizer-paths {
#address-cells = <1>;
#size-cells = <0>;


ad9081_rx_fddc_chan0: channel@0 {
reg = <0>;
adi,decimation = <1>;
adi,gain = <2048>; /* 2048 * 10^(gain_dB/20) */
adi,nco-frequency-shift-hz = /bits/ 64 <0>;

};
ad9081_rx_fddc_chan1: channel@1 {
reg = <1>;
adi,decimation = <1>;
adi,gain = <2048>; /* 2048 * 10^(gain_dB/20) */
adi,nco-frequency-shift-hz = /bits/ 64 <0>;

};
};

adi,jesd-links {
#size-cells = <0>;
#address-cells = <1>;

ad9081_rx_jesd_l0: link@0 {
reg = <0>;
adi,converter-select =
<&ad9081_rx_fddc_chan0 FDDC_I>, <&ad9081_rx_fddc_chan0 FDDC_Q>,
<&ad9081_rx_fddc_chan1 FDDC_I>, <&ad9081_rx_fddc_chan1 FDDC_Q>;

adi,logical-lane-mapping = /bits/ 8 <2 0 7 6 5 4 3 1>;
adi,link-mode = <18>; /* JESD Quick Configuration Mode */

adi,subclass = <1>; /* JESD SUBCLASS 0,1,2 */
adi,version = <1>; /* JESD VERSION 0=204A,1=204B,2=204C */
adi,dual-link = <0>; /* JESD Dual Link Mode */

adi,converters-per-device = <4>; /* JESD M */
adi,octets-per-frame = <1>; /* JESD F */

adi,frames-per-multiframe = <32>; /* JESD K */
adi,converter-resolution = <16>; /* JESD N */
adi,bits-per-sample = <16>; /* JESD NP' */
adi,control-bits-per-sample = <0>; /* JESD CS */
adi,lanes-per-device = <8>; /* JESD L */
adi,samples-per-converter-per-frame = <1>; /* JESD S */
adi,high-density = <1>; /* JESD HD */
};
};
};
};
};



Wrapped the devicetree code in a block of code
[edited by: iulia at 8:27 AM (GMT -4) on 27 Jun 2023]