您好,
我将 DAC38RF89的 JESD204B 配置 为允许。
它 用作每2个 DAC 的 I-Q 对。 我 使用 DACA、 Q 使用 DACB。
我将 I-Q 数据发送到 DUC 输入、例如输入频率为500MHz、NCOFREQUENCY 为1.2GHz。 当我使用光谱仪观察时、有两条对称的光谱线、分别为1.7GHz 和700MHz。
我想知道原因?以及 在多次复位?后、DUC 后的输出频率如何正确
此致、
福克斯
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.
您好,
我将 DAC38RF89的 JESD204B 配置 为允许。
它 用作每2个 DAC 的 I-Q 对。 我 使用 DACA、 Q 使用 DACB。
我将 I-Q 数据发送到 DUC 输入、例如输入频率为500MHz、NCOFREQUENCY 为1.2GHz。 当我使用光谱仪观察时、有两条对称的光谱线、分别为1.7GHz 和700MHz。
我想知道原因?以及 在多次复位?后、DUC 后的输出频率如何正确
此致、
福克斯
您好!
您可能只需要重置 NCO。 有关详细信息、请参阅以下链接
您好!
我向 FPGA 的 ILA 观测接口添加了 IQ 信号并导出了 csv 数据。 高速数据转换器软件会分析 csv 数据、以证明 I-way 数据和 Q-way 数据是完美的正交数据。 我仍然怀疑 nco1和 nco2相位之间的差异导致了这个问题。奇怪的是、问题有时出现、有时消失而不修改任何配置。与 NCO 同步相关的寄存器已经被修改了几次。 FPGA 生成的 IQ 数据的相位也得到保证。 仍然无法保证不会发生错误。 也许我们还可以了解其他一些原因吗?
福克斯
`define DA38RF89 //`define SERDES_PLL_SOURCED_BY_PLL //--for 41121 and 82121 tx2: //--CLOCK PHASES=01,INTERP=00001,CLKJESD_DIV=0001,CLKJESD_OUT_DIV=0001; //--L_M1=00011,F_M1=00,M_M1=00,S_M1=00001,HD=1,N_M1/N'_M1=01111 //--RESET config, //--reset SPI registers;turn on the alarm pin;turn on the dividers; //cause fuse autoload;set ONE_DAC_ONLY and ONE_LINK_ONLY; //puts DAC1 and DAC2 into intilization state `define ADDR_000 7'h00 //`define DATA_000 16'h7060 `define DATA_000 16'h7800 //--vendor ID and Chip Version register,check if AUTOLOAD_DONE is asserted `define ADDR_FFF 7'h7f `define DATA_FFF 16'h8009 //--page set register, set general configuration registers `define ADDR_001 7'h09 `define DATA_001 16'h0000 //--IO_CONFIG //--SYSREF align to R1 and R3 count---READ ONLY `define ADDR_002 7'h78 `define DATA_002 16'h0000 //--SYSREF phase count 1 and 2--------READ ONLY `define ADDR_003 7'h79 `define DATA_003 16'h0000 //--SYSREF phase count 3 and 4--------READ ONLY `define ADDR_004 7'h7a `define DATA_004 16'h0000 //--disable 4-pin SPI;disable analog test `define ADDR_005 7'h01 `define DATA_005 16'h3000 //--temperature sensor and pll loop voltage, read only `define ADDR_006 7'h06 `define DATA_006 16'h0000 //-------Miscellaneous Configuration Registers--------// //--page set register, set DIG_MISC `define ADDR_007 7'h09 `define DATA_007 16'h0004 //--clock configuration register //sysref is used to sync clock divider or not,should be disabled after intial syncing----------IMPORTANT //div4 clock;dummy data generation enable;quarter rate clock; `define ADDR_008 7'h0a `define DATA_008 16'h7c03 //`define DATA_008 16'hfc03 //--sleep config //many sleep enable `define ADDR_009 7'h0b `define DATA_009 16'h0000 //--divided output clock configuration //clk_tx is not connected; `define ADDR_00A 7'h0c //`define DATA_00A 16'h2001 //CAUTION:select external reference(sysref?) `define DATA_00A 16'ha002 //--DAC fullscale current register //10mA + 2mA*[15:12] `define ADDR_00B 7'h0d `define DATA_00B 16'hF000 //--internal SYSREF generator register //LCM:least common multiple,page126,9.2.4 `define ADDR_00C 7'h10 //`define DATA_00C 16'h0001 `define DATA_00C 16'h0000 //--counter for internal SYSREF generator //LCMGEN_DIV `define ADDR_00D 7'h11 `define DATA_00D 16'h0000 //--SPI SYSREF for internal SYSREF generator //LCMGEN_DIV `define ADDR_00E 7'h12 `define DATA_00E 16'h0000 //--digital test signals register //select the signal which comes out of the ALARM pin `define ADDR_00F 7'h1B `define DATA_00F 16'h0200 //--sleep pin control register //control the routing of SLEEP pin to different blocks `define ADDR_010 7'h23 `define DATA_010 16'hffff //--SYSREF capture circuit control register //sysref phase window //sysref align delay //sysref status enable //sysref align sysnc //sysref align bypass `define ADDR_011 7'h24 `define DATA_011 16'hd800 `define DATA_011_DIST 16'hd800 //--clock input and PLL configuration //extclk diff or se select //pll reset //pll N divider is synced by SYSREF or not //DACCLK_P/N is used as reference to PLL or directly as DAC clock //PLL cp sleep //PLL N divider = 1 //PLL lock detector sensitivity `define ADDR_012 7'h31 //PLL_ENA=1 `define DATA_012 16'h0400 //PLL configuration 1 register //VCO feedback divider---M divider = 4,total divider = 16;4.8GHz/16 = 300MHz refin //not used in external CLK mode //VCO amplitude `define ADDR_013 7'h32 `define DATA_013 16'h0308 //PLL configuration 2 register //PLL vco select--select VCO1 //vco freq range---need further attention //charge pump current,0x6 fro M=4 `define ADDR_014 7'h33 `define DATA_014 16'h2A18 //LVDS output configuration register //LVDS output current; //SYNC0~ powerdown; //charge pump current `define ADDR_015 7'h34 `define DATA_015 16'h0000 //CAUTION! [8]=SYNC0 LVDS powerdown //Fuse Farm clock divider register `define ADDR_016 7'h35 `define DATA_016 16'h0018 //SERDES clock configuration register //SERDES_CLK_SEL = DACCLK pad //SERDES_REFCLK_DIV = 0,divider = 1; //PREDIVIDER = 1; //serdes_refclk = 300MHz for DACCLK pad,600MHz for PLL //16'h0000 for 300MHz DACCLK pad,300MHz/1(SERDES_REFCLK_PREDIV)/1(SERDES_REFCLK_DIV)=300MHz //16'hF802 for 600MHz PLL clk,4.8GHz/8=600MHz `define ADDR_017 7'h3B `ifdef SERDES_PLL_SOURCED_BY_PLL `define DATA_017 16'hb800 `else `define DATA_017 16'h0000 `endif //SERDES clock configuration register //ENDIVCLK = 1; //CLKBYPASS = 0; //LB=00;SLEEPPLL=0; //VRANGE=0,for output > 2.17GHz //MPY=8'h51,multiplier = 10, refclk 200MHz × 10 = 3GHz,for refclk from PAD //MPY=8'h28,multiplier = 5, refclk 600MHz × 5 = 3GHz,for refclk from PLL `define ADDR_018 7'h3C `ifdef SERDES_PLL_SOURCED_BY_PLL `define DATA_018 16'h8029 `else `define DATA_018 16'h8051 `endif //SERDES configuration 1 register //TESTPATT = 000; //enable serdes offset compensation //equalizer hold;serdes equalizer //CDR settings `define ADDR_019 7'h3D `define DATA_019 16'h0088 //SERDES configuration 2 register //loss detection enable; //comma alignment enable; //RATE = 00,PLL_OUT = 0.25Lane_rate = 3GHz //BUS_WIDTH = 16bit; //sleeprx = 0; `define ADDR_01A 7'h3E //`define DATA_01A 16'h0905 `define DATA_01A 16'h0909 //SERDES polarity control register `define ADDR_01B 7'h3F `define DATA_01B 16'h0000 //JESD204B SYNCB OUTPUT register `define ADDR_01C 7'h76 `define DATA_01C 16'h0000 //ALARM SD LOSDET `define ADDR_01D 7'h04 `define DATA_01D 16'h0000 //JESD204B SYNCB OUTPUT register `define ADDR_01E 7'h76 `define DATA_01E 16'h0000 //JESD204B SYNCB OUTPUT register `define ADDR_01F 7'h76 `define DATA_01F 16'h0000 //-------multi-DUC1 Configuration Registers--------// //--page set register, set multi-DUC1 `define ADDR_200 7'h09 `define DATA_200 16'h0001 //--multi-DUC configuration(PAP,interpolation) `define ADDR_201 7'h0A //`define DATA_021 16'h0040 //CAUTION! alarm can zero the data out of JESD block `define DATA_201 16'h6110 //--multi-DUC configuration(Mixers) //--NCOAB_ENA=1 `define ADDR_202 7'h0C `define DATA_202 16'h2622 //--JESD FIFO control `define ADDR_203 7'h0D `define DATA_203 16'h0000 //--alarm mask 1 register `define ADDR_204 7'h0E `define DATA_204 16'h00ff //--alarm mask 2 register `define ADDR_205 7'h0f `define DATA_205 16'hffff //--alarm mask 3 register //LCMGEN_DIV `define ADDR_206 7'h10 `define DATA_206 16'hffff //--alarm mask 4 register `define ADDR_207 7'h11 `define DATA_207 16'hffff //--JESD Lane skew(read-only) `define ADDR_208 7'h12 `define DATA_208 16'h0000 //--CMIX configuration //--coarse mixer disabled `define ADDR_209 7'h17 `define DATA_209 16'h0000 //--SYSREF capture circuit control register //output delay,outsum_sel //--bit0 and bit2 are set `define ADDR_20A 7'h19 `define DATA_20A 16'h0005 //--sysref use for clock divider--set [6:4] to 3'b000 for startup sequence in datasheet P124 `define ADDR_20B 7'h24 `define DATA_20B 16'h0000 //serdes clock control //CLKJESD_DIV,CLKJESD_OUT_DIV,values from table 38 `define ADDR_20C 7'h25 `define DATA_20C 16'h1100 //sync source control 1 register `define ADDR_20D 7'h27 `define DATA_20D 16'h4848 //sync source control 2 register `define ADDR_20E 7'h28 `define DATA_20E 16'h0330 `define ADDR_20F 7'h29 `define DATA_20F 16'h0000 `define ADDR_210 7'h2A `define DATA_210 16'h0000 `define ADDR_211 7'h2B `define DATA_211 16'h0000 `define ADDR_212 7'h2C `define DATA_212 16'h0000 `define ADDR_213 7'h2D `define DATA_213 16'h1FFF `define ADDR_214 7'h2E `define DATA_214 16'h1FFF //DAC SPI configuration register `define ADDR_215 7'h2F `define DATA_215 16'h0000 //DAC SPI constant register `define ADDR_216 7'h30 `define DATA_216 16'h0000 //Gain for path AB register `define ADDR_217 7'h32 `define DATA_217 16'h8800 //Gain for path CD register `define ADDR_218 7'h33 `define DATA_218 16'h0400 //JESD error counter(read-only) `define ADDR_219 7'h41 `define DATA_219 16'h0000 //JESD subclass register `define ADDR_21A 7'h48 `define DATA_21A 16'h31c3 //JESD lane enable register //enable the lanes; //reperting D21.5/K28.5/ILAS verify for test purpose `define ADDR_21B 7'h4A `define DATA_21B 16'h0f01 //JESD RBD buffer and frame octets(F) register //F is set to 1 here for LMFSH=82121 `define ADDR_21C 7'h4B `define DATA_21C 16'h1300 //JESD K and L parameters //K is set to 20 and L is set to 4 here `define ADDR_21D 7'h4c `define DATA_21D 16'h1303 //JESD M and S parameters //M is set to 1 and S is set to 2 here `define ADDR_21E 7'h4d `define DATA_21E 16'h0001 //JESD N,HD and SCR parameters //N' is set to 16,HD is set to 0,N is set to 16 here `define ADDR_21F 7'h4e `define DATA_21F 16'h0F4F //JESD character match and other register `define ADDR_220 7'h4f `define DATA_220 16'h1c60 //JESD link configuration data register `define ADDR_221 7'h50 `define DATA_221 16'h0000 //JESD sync request register `define ADDR_222 7'h51 `define DATA_222 16'h00FF //JESD error output register `define ADDR_223 7'h52 `define DATA_223 16'h00FF //JESD ILA check 1 register //ILA_M = 1 and ILA_F = 3 `define ADDR_224 7'h53 `define DATA_224 16'h0100 //JESD ILA check 2 register //ILA_HD = 0,ILA_L = 4,ILA_K=20,ILA_S=8 `define ADDR_225 7'h54 `define DATA_225 16'h8e60 //JESD sysref mode register----[2:0]==3'b000 for start up sequence in datasheet P124 `define ADDR_226 7'h5C `define DATA_226 16'h0000 //--NCO freq path AB reg1 `define ADDR_227 7'h1E `define DATA_227 16'h0000 //--NCO freq path AB reg2 `define ADDR_228 7'h1F `define DATA_228 16'h0000 //--NCO freq path AB reg3 ------fs/4 `define ADDR_229 7'h20 `define DATA_229 16'h4000 //--NCO freq path CD reg1 `define ADDR_22A 7'h21 `define DATA_22A 16'h0000 //--NCO freq path CD reg2 `define ADDR_22B 7'h22 `define DATA_22B 16'h0000 //--NCO freq path CD reg3 ------fs/4 `define ADDR_22C 7'h23 `define DATA_22C 16'h0000 //--NCO phase path AB(autosync) ------0 degree `define ADDR_22D 7'h1C `define DATA_22D 16'h0000 //--NCO phase path CD(autosync) `define ADDR_22E 7'h1D `define DATA_22E 16'h0000 //--CROSSBAR 1,lane mapping `define ADDR_22F 7'h5F `define DATA_22F 16'h0123 //--CROSSBAR 2,lane mapping `define ADDR_230 7'h60 `define DATA_230 16'h4567 //-------multi-DUC2 Configuration Registers--------// //--page set register, set multi-DUC2 `define ADDR_300 7'h09 `define DATA_300 16'h0002 //--multi-DUC configuration(PAP,interpolation) `define ADDR_301 7'h0A //`define DATA_021 16'h0040 //CAUTION! alarm can zero the data out of JESD block `define DATA_301 16'h6110 //--multi-DUC configuration(Mixers) //--NCOAB_ENA=1 `define ADDR_302 7'h0C `define DATA_302 16'h2622 //--JESD FIFO control `define ADDR_303 7'h0D `define DATA_303 16'h0000 //--alarm mask 1 register `define ADDR_304 7'h0E `define DATA_304 16'h00ff //--alarm mask 2 register `define ADDR_305 7'h0f `define DATA_305 16'hffff //--alarm mask 3 register //LCMGEN_DIV `define ADDR_306 7'h10 `define DATA_306 16'hffff //--alarm mask 4 register `define ADDR_307 7'h11 `define DATA_307 16'hffff //--JESD Lane skew(read-only) `define ADDR_308 7'h12 `define DATA_308 16'h0000 //--CMIX configuration //--coarse mixer disabled `define ADDR_309 7'h17 `define DATA_309 16'h0000 //--SYSREF capture circuit control register //output delay,outsum_sel //--bit0 and bit2 are set `define ADDR_30A 7'h19 `define DATA_30A 16'h0000 //--sysref use for clock divider--set [6:4] to 3'b000 for startup sequence in datasheet P124 `define ADDR_30B 7'h24 `define DATA_30B 16'h0000 //serdes clock control //CLKJESD_DIV,CLKJESD_OUT_DIV,values from table 38 `define ADDR_30C 7'h25 `define DATA_30C 16'h1100 //sync source control 1 register `define ADDR_30D 7'h27 `define DATA_30D 16'h4848 //sync source control 2 register `define ADDR_30E 7'h28 `define DATA_30E 16'h0330 `define ADDR_30F 7'h29 `define DATA_30F 16'h0000 `define ADDR_310 7'h2A `define DATA_310 16'h0000 `define ADDR_311 7'h2B `define DATA_311 16'h0000 `define ADDR_312 7'h2C `define DATA_312 16'h0000 `define ADDR_313 7'h2D `define DATA_313 16'h1FFF `define ADDR_314 7'h2E `define DATA_314 16'h1FFF //DAC SPI configuration register `define ADDR_315 7'h2F `define DATA_315 16'h0000 //DAC SPI constant register `define ADDR_316 7'h30 `define DATA_316 16'h0000 //Gain for path AB register `define ADDR_317 7'h32 `define DATA_317 16'h8800 //Gain for path CD register `define ADDR_318 7'h33 `define DATA_318 16'h0400 //JESD error counter(read-only) `define ADDR_319 7'h41 `define DATA_319 16'h0000 //JESD subclass register `define ADDR_31A 7'h48 `define DATA_31A 16'h31c3 //JESD lane enable register //enable the lanes; //reperting D21.5/K28.5/ILAS verify for test purpose `define ADDR_31B 7'h4A `define DATA_31B 16'hF001 //JESD RBD buffer and frame octets(F) register //F is set to 2 here for LMFSH=82380 `define ADDR_31C 7'h4B `define DATA_31C 16'h1300 //JESD K and L parameters //K is set to 20 and L is set to 3 here `define ADDR_31D 7'h4c `define DATA_31D 16'h1303 //JESD M and S parameters //M is set to 1 and S is set to 2 here `define ADDR_31E 7'h4d `define DATA_31E 16'h0001 //JESD N,HD and SCR parameters //N' is set to 16,HD is set to 0,N is set to 16 here `define ADDR_31F 7'h4e `define DATA_31F 16'h0F4F //JESD character match and other register `define ADDR_320 7'h4f `define DATA_320 16'h1c60 //JESD link configuration data register `define ADDR_321 7'h50 `define DATA_321 16'h0000 //JESD sync request register `define ADDR_322 7'h51 `define DATA_322 16'h00FF //JESD error output register `define ADDR_323 7'h52 `define DATA_323 16'h00FF //JESD ILA check 1 register //ILA_M = 1 and ILA_F = 3 `define ADDR_324 7'h53 `define DATA_324 16'h0100 //JESD ILA check 2 register //ILA_HD = 0,ILA_L = 4,ILA_K=20,ILA_S=8 `define ADDR_325 7'h54 `define DATA_325 16'h8e60 //JESD sysref mode register----[2:0]==3'b000 for start up sequence in datasheet P124 `define ADDR_326 7'h5C `define DATA_326 16'h0000 //--NCO freq path AB reg1 `define ADDR_327 7'h1E `define DATA_327 16'h0000 //--NCO freq path AB reg2 `define ADDR_328 7'h1F `define DATA_328 16'h0000 //--NCO freq path AB reg3 ------fs/4 `define ADDR_329 7'h20 `define DATA_329 16'h4000 //--NCO freq path CD reg1 `define ADDR_32A 7'h21 `define DATA_32A 16'h0000 //--NCO freq path CD reg2 `define ADDR_32B 7'h22 `define DATA_32B 16'h0000 //--NCO freq path CD reg3 ------fs/4 `define ADDR_32C 7'h23 `define DATA_32C 16'h0000 //--NCO phase path AB(autosync) ------90 degree `define ADDR_32D 7'h1C `define DATA_32D 16'h4000 //--NCO phase path CD(autosync) `define ADDR_32E 7'h1D `define DATA_32E 16'h0000 //--CROSSBAR 1,lane mapping `define ADDR_32F 7'h5F `define DATA_32F 16'h4567 //--CROSSBAR 2,lane mapping `define ADDR_330 7'h60 `define DATA_330 16'h0123 //---lmk_sync should be asserted here to generate at least 2 SYSREF //-----startup sequence in Page124 //--1ST:reset encoder block //--SET page4 `define ADDR_03E 7'h09 `define DATA_03E 16'h0004 //--1ST:reset encoder block //--SET page4 register 0x0A[15] to 1 `define ADDR_03F 7'h0A `define DATA_03F 16'hfc03 //--SET page4 register 0x0A[15] to 0 `define ADDR_040 7'h0A `define DATA_040 16'h7c03 //--2ND:put JESD204B core in reset //--SET page0 register 0x00[1:0] to 2'b11 `define ADDR_041 7'h09 `define DATA_041 16'h0000 //SET page0 register 0x00[1:0] to 2'b11 `define ADDR_042 7'h00 `define DATA_042 16'h7803 //--3RD:sync CDRV and JESD204B blocks //--SET page1/2 register 0x24[6:4] to 3'b010,use all SYSREF `define ADDR_043 7'h09 `define DATA_043 16'h0003 //--SET page1/2 register 0x24[6:4] to 3'b010,use only the next SYSREF `define ADDR_044 7'h24 //`define DATA_044 16'h0020 //use only the next SYSREF `define DATA_044 16'h0010 //use all SYSREF //---lmk_sync should be asserted here to generate at least 2 SYSREF //--SET page1/2 register 0x5c[2:0] to 3'b001,use all SYSREF `define ADDR_045 7'h5c `define DATA_045 16'h0011 //use only the next SYSREF //`define DATA_045 16'h0001 //use all sysref //---lmk_sync should be asserted here to generate at least 2 SYSREF //---4TH : take JESD core out of reset //--SET page0 register 0x00[1:0] to 2'b00 `define ADDR_046 7'h09 `define DATA_046 16'h0000 //SET page0 register 0x00[1:0] to 2'b11 `define ADDR_047 7'h00 `define DATA_047 16'h7800 //---lmk_sync should be asserted here to generate at least 2 SYSREF //---independent clear miscelloneous mask //---miscellaneous configuration region //--page set register, set master page `define ADDR_048 7'h09 `define DATA_048 16'h0000 //clear serdes loss of signal alarms `define ADDR_049 7'h04 `define DATA_049 16'h0000 //clear SYSREF alignment circuit alarms `define ADDR_04A 7'h05 `define DATA_04A 16'h0000 //clear lane single detect alarm MASK `define ADDR_04B 7'h02 `define DATA_04B 16'h0000 //clear clock alarm MASK `define ADDR_04C 7'h03 `define DATA_04C 16'h0000 //---independent clear multi-DUC mask //---multi-DUC configuration region //--page set register, set multi-DUC page `define ADDR_04D 7'h09 `define DATA_04D 16'h0003 //JESD alarm for lane0 `define ADDR_04E 7'h64 `define DATA_04E 16'h0000 //JESD alarm for lane1 `define ADDR_04F 7'h65 `define DATA_04F 16'h0000 //JESD alarm for lane2 `define ADDR_050 7'h66 `define DATA_050 16'h0000 //JESD alarm for lane3 `define ADDR_051 7'h67 `define DATA_051 16'h0000 //JESD alarm for lane4 `define ADDR_052 7'h68 `define DATA_052 16'h0000 //JESD alarm for lane5 `define ADDR_053 7'h69 `define DATA_053 16'h0000 //JESD alarm for lane6 `define ADDR_054 7'h6A `define DATA_054 16'h0000 //JESD alarm for lane7 `define ADDR_055 7'h6B `define DATA_055 16'h0000 //SYSREF and PAP alarms `define ADDR_056 7'h6C `define DATA_056 16'h0000 //clock divider alarms 1 register `define ADDR_057 7'h6D `define DATA_057 16'h0000 //------independent,get sysref status //--page set register, set DIG_MISC `define ADDR_100 7'h09 `define DATA_100 16'h0004 //--set SYSR_ALIGN_SYNC to clear status `define ADDR_101 7'h24 `define DATA_101 16'hd802 `define DATA_101_DIST 16'hd802 //--page set register, set general configuration registers `define ADDR_102 7'h09 `define DATA_102 16'h000 //--ALM_SYSREF_DET `define ADDR_103 7'h05 `define DATA_103 16'h000 //--SYSREF_ALIGN_R `define ADDR_104 7'h78 `define DATA_104 16'h000 //--SYSREF12_CNT `define ADDR_105 7'h79 `define DATA_105 16'h000 //--SYSREF34_CNT `define ADDR_106 7'h7A `define DATA_106 16'h000 //--ALM_SD_DET,W0C `define ADDR_107 7'h04 `define DATA_107 16'h000 //--generate SPI sync `define ADDR_108 7'h09 `define DATA_108 16'h0003 //--generate SPI sync `define ADDR_109 7'h28 `define DATA_109 16'h0332 //--generate SPI sync `define ADDR_10A 7'h28 `define DATA_10A 16'h0330