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]