Post Go back to editing

AD9083: How to configure correctly multichip JESD lanes on the FPGA

Thread Summary

The user encountered JESD204 parameter mismatches when configuring 4 AD9083 ADCs with a single JESD quad and topology on a Zynq SOC (zu19eg) using hdl_2021_r1. The issue was resolved by modifying the tpl core to accept 128 channels while keeping CPACK and DMA at 32 channels for better timing. The user noted that setting 64 converters with 2 lanes did not produce the warning, suggesting the tpl core's limitation.
AI Generated Content
Category: Software
Product Number: AD9083
Software Version: vivado r21_1

Hello

I am trying to set 4 ADCs (AD9083) to work with a single JESD quad and topology.

each AD9083 has 32 converters (16 channels of i,q) and use a single JESD lane. 

The system works fine with a single lane but when scaling to 4 lanes it fails to realize it should work in multi-chip mode and I get this warning:

[   18.381818] cf_axi_adc 84a00000.ad_ip_jesd204_tpl_adc: ADI AIM (10.03.) at 0x84A00000 mapped to 0x00000000521933dc, probed ADC AD9083 as MASTER
[   18.394794] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition initialized -> probed
[   18.406805] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition probed -> idle
[   18.418201] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition idle -> device_init
[   18.430033] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition device_init -> link_init
[   18.442298] cf_axi_adc 84a00000.ad_ip_jesd204_tpl_adc: profile0:link_num0 param L mismatch 4!=1*1
[   18.451167] cf_axi_adc 84a00000.ad_ip_jesd204_tpl_adc: profile0:link_num0 param F mismatch 16!=64
[   18.460040] cf_axi_adc 84a00000.ad_ip_jesd204_tpl_adc: JESD param mismatch between TPL and Link configuration !
[   18.470132] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition link_init -> link_supported
[   18.482803] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition link_supported -> link_pre_setup
[   18.496062] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition link_pre_setup -> clk_sync_stage1
[   18.509111] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition clk_sync_stage1 -> clk_sync_stage2
[   18.522250] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition clk_sync_stage2 -> clk_sync_stage3
[   18.535380] jesd204: /amba_pl@0/axi_jesd204_rx@84aa0000,jesd204:0,parent=84aa0000.axi_jesd204_rx: Possible instantiation for multiple chips; HDL lanes 4, Link[0] lanes 1
[   18.550515] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition clk_sync_stage3 -> link_setup
[   18.563219] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition link_setup -> opt_setup_stage1
[   18.576003] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition opt_setup_stage1 -> opt_setup_stage2
[   18.589313] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition opt_setup_stage2 -> opt_setup_stage3
[   18.602626] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition opt_setup_stage3 -> opt_setup_stage4
[   18.615936] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition opt_setup_stage4 -> opt_setup_stage5
[   18.638212] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition opt_setup_stage5 -> clocks_enable
[   18.654275] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition clocks_enable -> link_enable
[   18.678425] ad9083 spi2.9: JESD RX (JTX) state_204b DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
[   18.689184] ad9083 spi2.8: JESD RX (JTX) state_204b DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
[   18.699948] ad9083 spi2.5: JESD RX (JTX) state_204b DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
[   18.710710] ad9083 spi2.4: JESD RX (JTX) state_204b DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
[   18.721243] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition link_enable -> link_running
[   18.733775] jesd204: /amba_pl@0/axi_quad_spi@80010000/ad9083@4,jesd204:3,parent=spi2.4: JESD204[0:0] transition link_running -> opt_post_running_stage

the dts file I am using:

/ {

	// axi_dmac@9c400000 
	&axi_ad9083_rx_dma {
			compatible = "adi,axi-dmac-1.00.a";
			#dma-cells = <1>;
			#clock-cells = <0>;
	};
	
	// ad_ip_jesd204_tpl_adc@84a00000
	&rx_ad9083_tpl_core_adc_tpl_core {
			compatible = "adi,axi-ad9083-rx-1.0";
			dmas = <&axi_ad9083_rx_dma 0>;
			dma-names = "rx";
			spibus-connected = <&adc3_ad9083>;
	
			jesd204-device;
			#jesd204-cells = <2>;
			jesd204-inputs = <&axi_ad9083_rx_jesd_rx_axi 0 0>;
	};
	
	// axi_jesd204_rx@84aa0000
	&axi_ad9083_rx_jesd_rx_axi {
			compatible = "adi,axi-jesd204-rx-1.0";
			clocks = <&zynqmp_clk 71>, <&ad9528 0>, <&axi_ad9083_rx_xcvr 0>, <&rx_fixed_link_clk>;
			clock-names = "s_axi_aclk", "device_clk", "lane_clk", "link_clk";

			#clock-cells = <0>;
			clock-output-names = "jesd_rx_lane_clk";

			jesd204-device;
			#jesd204-cells = <2>;
			jesd204-inputs = <&axi_ad9083_rx_xcvr 0 0>;
	};

	// axi_adxcvr@84a60000
	&axi_ad9083_rx_xcvr {
	        compatible = "adi,axi-adxcvr-1.0";
			clocks = <&zynqmp_clk 71>, <&ad9528 4>;
			clock-names = "s_axi_aclk", "conv";
	
			#clock-cells = <1>;
			clock-output-names = "rx_gt_clk", "rx_out_clk";

			adi,sys-clk-select = <3>; // XCVR_QPLL
			adi,out-clk-select = <4>; // XCVR_REFCLK_DIV2
			adi,use-lpm-enable;

			jesd204-device;
			#jesd204-cells = <2>;
			jesd204-inputs = <&ad9528 0 0>;
	};

	// axi_sysid@85000000
	&axi_sysid_0 {
			compatible = "adi,axi-sysid-1.00.a";
	};
	
	&axi_quad_spi_0 {
	    status = "okay";
	    
	    //spidev@2{
	    //    compatible = "rohm,dh2228fv";
	    //    reg = <2>;
	    //    spi-max-frequency = <1000000>;
	    //    status = "okay";
	    //};
	    

	    adc0_ad9083: ad9083@4 {
	        compatible = "adi,ad9083";
	        reg = <4>;
	        
	        jesd204-device;
	        #jesd204-cells = <2>;
	        jesd204-top-device = <0>;
	        jesd204-link-ids = <0>;
	        jesd204-inputs = <&adc1_ad9083 0 0>;
	 

	        /* JESD204 parameters */
	 
	        adi,octets-per-frame = <64>;
	        adi,frames-per-multiframe = <32>;
	        adi,converter-resolution = <16>;
	        adi,bits-per-sample = <16>;
	        adi,converters-per-device = <32>;
	        adi,control-bits-per-sample = <0>;
	        adi,lanes-per-device = <1>;
	        adi,subclass = <0>;
	        
	        /* software reset, resistor is not mounted */
	            /* reset-gpios = <&gpio 111 0>; */
	            pwdn-gpios = <&gpio 110 0>;
	    };

	    adc1_ad9083: ad9083@5 {
	        compatible = "adi,ad9083";
	        reg = <5>;
	        
	        jesd204-device;
	        #jesd204-cells = <2>;
	        jesd204-inputs = <&adc2_ad9083 0 0>;
	 
	        /* JESD204 parameters */
	 
	        adi,octets-per-frame = <64>;
	        adi,frames-per-multiframe = <32>;
	        adi,converter-resolution = <16>;
	        adi,bits-per-sample = <16>;
	        adi,converters-per-device = <32>;
	        adi,control-bits-per-sample = <0>;
	        adi,lanes-per-device = <1>;
	        adi,subclass = <0>;
	        
	        /* software reset, resistor is not mounted */
	            /* reset-gpios = <&gpio 111 0>; */
	            pwdn-gpios = <&gpio 110 0>;
	    };


	    adc2_ad9083: ad9083@8 {
	        compatible = "adi,ad9083";
	        reg = <8>;
	        
	        jesd204-device;
	        #jesd204-cells = <2>;
	        jesd204-inputs = <&adc3_ad9083 0 0>;
	 


	        /* JESD204 parameters */
	 
	        adi,octets-per-frame = <64>;
	        adi,frames-per-multiframe = <32>;
	        adi,converter-resolution = <16>;
	        adi,bits-per-sample = <16>;
	        adi,converters-per-device = <32>;
	        adi,control-bits-per-sample = <0>;
	        adi,lanes-per-device = <1>;
	        adi,subclass = <0>;
	        
	        /* software reset, resistor is not mounted */
	            /* reset-gpios = <&gpio 111 0>; */
	            pwdn-gpios = <&gpio 110 0>;
	    };


	    adc3_ad9083: ad9083@9 {
	        compatible = "adi,ad9083";
	        reg = <9>;
	        
	        jesd204-device;
	        #jesd204-cells = <2>;
	        jesd204-inputs = <&rx_ad9083_tpl_core_adc_tpl_core 0 0>;
	 


	        /* JESD204 parameters */
	 
	        adi,octets-per-frame = <64>;
	        adi,frames-per-multiframe = <32>;
	        adi,converter-resolution = <16>;
	        adi,bits-per-sample = <16>;
	        adi,converters-per-device = <32>;
	        adi,control-bits-per-sample = <0>;
	        adi,lanes-per-device = <1>;
	        adi,subclass = <0>;
	        
	        /* software reset, resistor is not mounted */
	            /* reset-gpios = <&gpio 111 0>; */
	            pwdn-gpios = <&gpio 110 0>;
	    };

	};
	
	

The parameter sets for FPGA:

It is possible that the tpl core is limited in number of converters it can handle, but the but width is was I am expecting to get.

Will appreciate any advice  

Thanks

Edit Notes

Edited title for clarity
[edited by: iulia at 9:52 AM (GMT -4) on 19 Jul 2024]
Parents Reply Children
No Data