public void TestJESDSingleCase() { AdiCommandServerClient Link = AdiCommandServerClient.Instance; Link.hw.Connect(TestSetupConfig.ipAddr, TestSetupConfig.port); Link.Mykonos.resetDevice(); //Configure Rx & Orx DataPath Settings // 2 Rx Channels enabled equates to 4 Converters Represented JESD M = 4 //Use Lanes 0 & 1 for Rx1&Rx2 Channels // 1 Observer Channel from ORX1 Input equates to 2 Converters JESD M = 2 //Use Lanes 3 & 4 for ORx Channel //Use K = 32 //Calculate F Mykonos.RXCHANNEL rxChannels = Mykonos.RXCHANNEL.RX1_RX2; byte framerM = 4; byte serializerLanesEnabled = 0x03; byte framerK = 32; byte framerF = (byte)(2 * (int)framerM / ConvertMaskToCount(serializerLanesEnabled)); byte Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; byte obsRxframerM = 2; byte obsRxserializerLanesEnabled = 0x0; byte obsRxframerK = 32; byte obsRxframerF = (byte)(2 * (int)obsRxframerM / ConvertMaskToCount(obsRxserializerLanesEnabled)); Mykonos.TXCHANNEL txChannels = Mykonos.TXCHANNEL.TX1_TX2; byte deframerM = 4; byte desLanesEnabled = 0x0F; byte deframerK = 32; byte deframerF = (byte)(2 * (int)deframerM / ConvertMaskToCount(desLanesEnabled)); //Update Test settings structure with JESD Test JESD Settings JESDTestInit(deframerM, deframerK, desLanesEnabled, framerM, framerK, serializerLanesEnabled, obsRxframerM, obsRxframerK, obsRxserializerLanesEnabled); //Call Test Initialisation with Minimum Initialisation for JESD Links TestSetup.JESDTestSetupInit(settings, rxChannels, txChannels, Obsrxchannels); DateTime timeStamp = DateTime.Now; string text = "Tx M: " + deframerM + ", Tx K: " + deframerK + ", Tx lanes: " + string.Format("{0:X}", desLanesEnabled) + ", Tx F: " + deframerF + ", Rx M: " + framerM + ", Rx K: " + framerK + ", Rx lanes: " + string.Format("{0:X}", serializerLanesEnabled) + ", Rx F: " + framerF + ", ORx M: " + obsRxframerM + ", ORx K: " + obsRxframerK + ", ORx lanes: " + string.Format("{0:X}", obsRxserializerLanesEnabled) + ", ORx F: " + obsRxframerF + " " + timeStamp.ToString(); using (System.IO.StreamWriter file = new System.IO.StreamWriter(resFilePath, true)) { file.WriteLine(text); } //Enable Full JESD Links in the System mykonosUnitTest.Helper.EnableRxFramerLink_JESD(resFilePath); mykonosUnitTest.Helper.EnableORxFramerLink_JESD(resFilePath); mykonosUnitTest.Helper.EnableTxLink_JESD(resFilePath); }
public static void JesdConfigRx1CaptureTest([Values(Mykonos.RXCHANNEL.RX1, Mykonos.RXCHANNEL.RX2)] Mykonos.RXCHANNEL channel, [Values(JESDAlphaTests.MYK_DATAPATH_MODE.RX1TX1OBS1)] MYK_DATAPATH_MODE DataPath, [Values(MYK_JESD_LANE_CFG.RL1OBSL2TL2, MYK_JESD_LANE_CFG.RL1OBSL2TL4, MYK_JESD_LANE_CFG.RL2OBSL2TL2, MYK_JESD_LANE_CFG.RL2OBSL2TL4)] MYK_JESD_LANE_CFG LaneCfg, [Values(12, 32)] byte framerK, [Values(12, 32)] byte obsRxframerK, [Values(20, 32)] byte deframerK) { //Define Test Signal Parameters int amp_dbm1 = -20; int OffSet1 = 10; int IQExptVal1 = 20000; //Based on Test Parameters Determin Jesd Settings ConfigJesdParams(DataPath, LaneCfg, framerK, obsRxframerK, deframerK); //Configure Chip and Data Paths with Test Specific JESD Settings TestSetup.TestSetupInit(settings); //Enable System, Apply Signal, Analysis Captured Data TxLoopbackRxCapture(channel, amp_dbm1, OffSet1, IQExptVal1); }
public void TestJESDDeframerCrossbar([Values(0xE4, 0x1B, 0xB1, 0x4E)] Byte deframerCrossbar, [Values(0xC, 0x3, 0xF)] Byte desLanesEnabled) { Console.WriteLine(settings.txProfileData.IqRate_kHz); //Invalid test conditions, iqrate too high. Temp workaround if ((desLanesEnabled != 0xF) && (TxProfile.Contains("245.76"))) { Assert.Pass(); } AdiCommandServerClient Link = AdiCommandServerClient.Instance; Link.hw.Connect(TestSetupConfig.ipAddr, TestSetupConfig.port); Link.Mykonos.resetDevice(); //Configure Rx & Orx DataPath Settings // 2 Rx Channels enabled equates to 4 Converters Represented JESD M = 4 //Use Lanes 0 & 1 for Rx1&Rx2 Channels // 1 Observer Channel from ORX1 Input equates to 2 Converters JESD M = 2 //Use Lanes 3 & 4 for ORx Channel //Use K = 32 //Calculate F Mykonos.RXCHANNEL rxChannels = Mykonos.RXCHANNEL.RX1_RX2; byte framerM = 4; byte serializerLanesEnabled = 0x03; byte framerK = 32; byte framerF = (byte)(2 * (int)framerM / ConvertMaskToCount(serializerLanesEnabled)); byte Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; byte obsRxframerM = 2; byte obsRxserializerLanesEnabled = 0xC; byte obsRxframerK = 32; byte obsRxframerF = (byte)(2 * (int)obsRxframerM / ConvertMaskToCount(obsRxserializerLanesEnabled)); Mykonos.TXCHANNEL txChannels = Mykonos.TXCHANNEL.TX1_TX2; byte deframerM = 4; // byte desLanesEnabled = 0x04; byte deframerK = 32; byte deframerF = (byte)(2 * (int)deframerM / ConvertMaskToCount(desLanesEnabled)); //Update Test settings structure with JESD Test JESD Settings JESDTestInit(deframerM, deframerK, desLanesEnabled, framerM, framerK, serializerLanesEnabled, obsRxframerM, obsRxframerK, obsRxserializerLanesEnabled); Console.WriteLine("desLanesEnabled: " + desLanesEnabled); Console.WriteLine("desLanesEnabled: " + settings.txProfileData.IqRate_kHz); //Vary the Deframer Crossbar Setting settings.mykTxDeFrmrCfg.deserializerLaneCrossbar = deframerCrossbar; //Call Test Initialisation with Minimum Initialisation for JESD Links TestSetup.JESDTestSetupInit(settings, rxChannels, txChannels, Obsrxchannels); //Enable Full JESD Links in the System mykonosUnitTest.Helper.EnableRxFramerLink_JESD(resFilePath); mykonosUnitTest.Helper.EnableORxFramerLink_JESD(resFilePath); mykonosUnitTest.Helper.EnableTxLink_JESD(resFilePath); Console.Write(deframerCrossbar.ToString("X")); byte temp = 0; byte deframerCrossbarNew = 0x00; byte deframerCrossbarRb = 0xFF; if (desLanesEnabled == 0xC) { temp = (byte)(deframerCrossbar >> 4); deframerCrossbarNew = temp; Console.Write(deframerCrossbarNew.ToString("X")); } else if (desLanesEnabled == 0x3) { deframerCrossbarNew = (byte)(deframerCrossbar & 0xF); Console.Write(deframerCrossbarNew.ToString("X")); } else { deframerCrossbarNew = deframerCrossbar; Console.Write(deframerCrossbarNew.ToString("X")); } if ((deframerM == 4) && (ConvertMaskToCount(desLanesEnabled) == 2)) { temp = (byte)((deframerCrossbarNew & 0xC0) | ((deframerCrossbarNew & 0xC) << 2) | ((deframerCrossbarNew & 0x30) >> 2) | (deframerCrossbarNew & 0x3)); deframerCrossbarNew = temp; Console.Write(deframerCrossbarNew.ToString("X")); } deframerCrossbarRb = Link.spiRead(0x83); Console.Write(deframerCrossbarRb.ToString("X")); Assert.AreEqual((deframerCrossbarNew), deframerCrossbarRb); }
public void TestJESDAlfaParam([Values(JESDAlphaTests.MYK_DATAPATH_MODE.RX2TX2OBS1, MYK_DATAPATH_MODE.RX1TX2OBS1, MYK_DATAPATH_MODE.RX2TX1OBS1, MYK_DATAPATH_MODE.RX1TX1OBS1)] MYK_DATAPATH_MODE DataPath, [Values(MYK_JESD_LANE_CFG.RL1OBSL0TL2, MYK_JESD_LANE_CFG.RL1OBSL0TL4, MYK_JESD_LANE_CFG.RL1OBSL2TL2, MYK_JESD_LANE_CFG.RL1OBSL2TL4, MYK_JESD_LANE_CFG.RL2OBSL0TL2, MYK_JESD_LANE_CFG.RL2OBSL0TL4, MYK_JESD_LANE_CFG.RL2OBSL2TL2, MYK_JESD_LANE_CFG.RL2OBSL2TL4)] MYK_JESD_LANE_CFG LaneCfg, [Values(16, 32)] byte framerK, [Values(16, 32)] byte obsRxframerK, [Values(20, 32)] byte deframerK) { AdiCommandServerClient Link = AdiCommandServerClient.Instance; Link.hw.Connect(TestSetupConfig.ipAddr, TestSetupConfig.port); Link.Mykonos.resetDevice(); Mykonos.RXCHANNEL rxChannels = Mykonos.RXCHANNEL.RX1_RX2; Mykonos.TXCHANNEL txChannels = Mykonos.TXCHANNEL.TX1_TX2; byte Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; byte deframerM = 0; byte desLanesEnabled = 0; byte framerM = 0; byte serializerLanesEnabled = 0; byte obsRxframerM = 0; byte obsRxserializerLanesEnabled = 0; byte invalidTest = 0; switch (DataPath) { case MYK_DATAPATH_MODE.RX2TX2OBS1: //Data Path Configuration rxChannels = Mykonos.RXCHANNEL.RX1_RX2; framerM = 4; txChannels = Mykonos.TXCHANNEL.TX1_TX2; deframerM = 4; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsRxframerM = 2; //Lane Config switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL2: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0x0; break; default: invalidTest = 1; break; } break; case MYK_DATAPATH_MODE.RX1TX2OBS1: //Data Path Configuration rxChannels = Mykonos.RXCHANNEL.RX1; framerM = 2; txChannels = Mykonos.TXCHANNEL.TX1_TX2; deframerM = 4; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsRxframerM = 2; //Lane Config switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL1OBSL2TL4: serializerLanesEnabled = 0x01; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL1OBSL0TL4: serializerLanesEnabled = 0x01; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0x0; break; default: invalidTest = 1; break; } break; case MYK_DATAPATH_MODE.RX2TX1OBS1: rxChannels = Mykonos.RXCHANNEL.RX1_RX2; framerM = 4; txChannels = Mykonos.TXCHANNEL.TX1; deframerM = 2; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsRxframerM = 2; switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL2OBSL2TL2: serializerLanesEnabled = 0x03; desLanesEnabled = 0x03; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL2: serializerLanesEnabled = 0x03; desLanesEnabled = 0x03; obsRxserializerLanesEnabled = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0x0; break; default: invalidTest = 1; break; } break; case MYK_DATAPATH_MODE.RX1TX1OBS1: rxChannels = Mykonos.RXCHANNEL.RX1; framerM = 2; txChannels = Mykonos.TXCHANNEL.TX1; deframerM = 2; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsRxframerM = 2; switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL1OBSL2TL2: serializerLanesEnabled = 0x01; desLanesEnabled = 0x03; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL1OBSL0TL2: serializerLanesEnabled = 0x01; desLanesEnabled = 0x03; obsRxserializerLanesEnabled = 0x0; break; case MYK_JESD_LANE_CFG.RL1OBSL2TL4: serializerLanesEnabled = 0x01; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL1OBSL0TL4: serializerLanesEnabled = 0x01; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL2: serializerLanesEnabled = 0x03; desLanesEnabled = 0x03; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL2: serializerLanesEnabled = 0x03; desLanesEnabled = 0x03; obsRxserializerLanesEnabled = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL4: serializerLanesEnabled = 0x03; desLanesEnabled = 0x0F; obsRxserializerLanesEnabled = 0x0; break; default: invalidTest = 1; break; } break; default: break; } if (invalidTest != 1) { byte deframerF = (byte)(2 * (int)deframerM / ConvertMaskToCount(desLanesEnabled)); byte framerF = (byte)(2 * (int)framerM / ConvertMaskToCount(serializerLanesEnabled)); byte obsRxframerF = (byte)(2 * (int)obsRxframerM / ConvertMaskToCount(obsRxserializerLanesEnabled)); DateTime timeStamp = DateTime.Now; string text = "Tx M: " + deframerM + ", Tx K: " + deframerK + ", Tx lanes: " + string.Format("{0:X}", desLanesEnabled) + ", Tx F: " + deframerF + ", Rx M: " + framerM + ", Rx K: " + framerK + ", Rx lanes: " + string.Format("{0:X}", serializerLanesEnabled) + ", Rx F: " + framerF + ", ORx M: " + obsRxframerM + ", ORx K: " + obsRxframerK + ", ORx lanes: " + string.Format("{0:X}", obsRxserializerLanesEnabled) + ", ORx F: " + obsRxframerF + " " + timeStamp.ToString(); using (System.IO.StreamWriter file = new System.IO.StreamWriter(resFilePathAlpha, true)) { file.WriteLine(text); } //Initialize(rxChannels, txChannels, Obsrxchannels, deframerM, deframerK, desLanesEnabled, framerM, framerK, serializerLanesEnabled, obsRxframerM, obsRxframerK, obsRxserializerLanesEnabled); JESDTestInit(deframerM, deframerK, desLanesEnabled, framerM, framerK, serializerLanesEnabled, obsRxframerM, obsRxframerK, obsRxserializerLanesEnabled); Console.WriteLine("Rx Profile: " + settings.mykSettings.rxProfileName); Console.WriteLine("Tx Profile: " + settings.mykSettings.txProfileName); Console.WriteLine("ORx Profile: " + settings.mykSettings.orxProfileName); TestSetup.JESDTestSetupInit(settings, rxChannels, txChannels, Obsrxchannels); mykonosUnitTest.Helper.EnableRxFramerLink_JESD(resFilePathAlpha); mykonosUnitTest.Helper.EnableORxFramerLink_JESD(resFilePathAlpha); mykonosUnitTest.Helper.EnableTxLink_JESD(resFilePathAlpha); } }
public static byte ConfigJesdParams(MYK_DATAPATH_MODE DataPath, MYK_JESD_LANE_CFG LaneCfg, [Values(12, 32)] byte framerK, [Values(12, 32)] byte obsRxframerK, [Values(20, 32)] byte deframerK) { Mykonos.RXCHANNEL rxChannels = Mykonos.RXCHANNEL.RX1_RX2; Mykonos.TXCHANNEL txChannels = Mykonos.TXCHANNEL.TX1_TX2; byte Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; byte deframerM = 0; byte desLaneEn = 0; byte framerM = 0; byte serLaneEn = 0; byte obsFramerM = 0; byte obsSerLaneEn = 0; byte invalidTest = 0; switch (DataPath) { case MYK_DATAPATH_MODE.RX2TX2OBS1: //Data Path Configuration rxChannels = Mykonos.RXCHANNEL.RX1_RX2; framerM = 4; txChannels = Mykonos.TXCHANNEL.TX1_TX2; deframerM = 4; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsFramerM = 2; //Lane Config switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL2: serLaneEn = 0x03; desLaneEn = 0x03; obsSerLaneEn = 0x0; break; default: invalidTest = 1; break; } break; case MYK_DATAPATH_MODE.RX1TX2OBS1: //Data Path Configuration rxChannels = Mykonos.RXCHANNEL.RX1; framerM = 2; txChannels = Mykonos.TXCHANNEL.TX1_TX2; deframerM = 4; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsFramerM = 2; //Lane Config switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL1OBSL2TL4: serLaneEn = 0x01; desLaneEn = 0x0F; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL1OBSL0TL4: serLaneEn = 0x01; desLaneEn = 0x0F; obsSerLaneEn = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0x0; break; default: invalidTest = 1; break; } break; case MYK_DATAPATH_MODE.RX2TX1OBS1: rxChannels = Mykonos.RXCHANNEL.RX1_RX2; framerM = 4; txChannels = Mykonos.TXCHANNEL.TX1; deframerM = 2; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsFramerM = 2; switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL2OBSL2TL2: serLaneEn = 0x03; desLaneEn = 0x03; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL2: serLaneEn = 0x03; desLaneEn = 0x03; obsSerLaneEn = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0x0; break; default: invalidTest = 1; break; } break; case MYK_DATAPATH_MODE.RX1TX1OBS1: rxChannels = Mykonos.RXCHANNEL.RX1; framerM = 2; txChannels = Mykonos.TXCHANNEL.TX1; deframerM = 2; Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1; obsFramerM = 2; switch (LaneCfg) { case MYK_JESD_LANE_CFG.RL1OBSL2TL2: serLaneEn = 0x01; desLaneEn = 0x03; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL1OBSL0TL2: serLaneEn = 0x01; desLaneEn = 0x03; obsSerLaneEn = 0x0; break; case MYK_JESD_LANE_CFG.RL1OBSL2TL4: serLaneEn = 0x01; desLaneEn = 0x0F; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL1OBSL0TL4: serLaneEn = 0x01; desLaneEn = 0x0F; obsSerLaneEn = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL2: serLaneEn = 0x03; desLaneEn = 0x03; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL2: serLaneEn = 0x03; desLaneEn = 0x03; obsSerLaneEn = 0x0; break; case MYK_JESD_LANE_CFG.RL2OBSL2TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0xC; break; case MYK_JESD_LANE_CFG.RL2OBSL0TL4: serLaneEn = 0x03; desLaneEn = 0x0F; obsSerLaneEn = 0x0; break; default: invalidTest = 1; break; } break; default: break; } if (invalidTest != 1) { byte deframerF = (byte)((2 * (int)deframerM) / (int)ConvertMaskToCount(desLaneEn)); byte framerF = (byte)(2 * (int)framerM / ConvertMaskToCount(serLaneEn)); byte obsFramerF = (byte)(2 * (int)obsFramerM / ConvertMaskToCount(obsSerLaneEn)); settings.mykSettings.rxChannel = rxChannels; settings.mykSettings.txChannel = txChannels; settings.mykSettings.orxChannel = (Mykonos.OBSRXCHANNEL_ENABLE)Obsrxchannels; settings.mykTxDeFrmrCfg.M = deframerM; settings.mykTxDeFrmrCfg.K = deframerK; settings.mykTxDeFrmrCfg.deserializerLanesEnabled = desLaneEn; settings.mykRxFrmrCfg.M = framerM; settings.mykRxFrmrCfg.K = framerK; settings.mykRxFrmrCfg.serializerLanesEnabled = serLaneEn; settings.mykObsRxFrmrCfg.M = obsFramerM; settings.mykObsRxFrmrCfg.K = obsRxframerK; settings.mykObsRxFrmrCfg.serializerLanesEnabled = obsSerLaneEn; return(0); } return(1); }
public static void TxLoopbackRxCapture([Values(Mykonos.RXCHANNEL.RX1, Mykonos.RXCHANNEL.RX2)] Mykonos.RXCHANNEL channel, [Values(-20)] int amp_dbm, [Values(10)] int OffSet, [Values(20000)] int IQExptVal) { //Retrieve Profile Information, samplingFreq_Hz, ProfileBW, LO Frequency Information double[] rxprofileInfo = new double[3]; rxprofileInfo[0] = settings.rxProfileData.IqRate_kHz; rxprofileInfo[1] = settings.rxPllLoFreq_Hz; rxprofileInfo[2] = settings.rxProfileData.PrimarySigBw_Hz; double[] txprofileInfo = new double[3]; txprofileInfo[0] = settings.txProfileData.IqRate_kHz; txprofileInfo[1] = settings.txPllLoFreq_Hz; txprofileInfo[2] = settings.txProfileData.PrimarySigBw_Hz; double samplingFreq_Hz = rxprofileInfo[0] * 1000; double profileBW_MHz = rxprofileInfo[2] / 1000000; Console.WriteLine("Rx Sampling Freq (Hz): " + samplingFreq_Hz); Console.WriteLine("Rx Profile Bandwdith (MHz): " + profileBW_MHz); double freqLo_kHz = rxprofileInfo[1] / 1000; Console.WriteLine("Rx LO Frequency (kHz): " + freqLo_kHz); //Define DataCapture Parameters const int NUM_SAMPLES = 8192; short[] rxDataArray = new short[NUM_SAMPLES * 2]; double[,] timeDomainData = new double[NUM_SAMPLES / 2, 3]; double[,] DomainData = new double[(2 * OffSet), 2]; //Enable Mykonos Rx Datapath AdiCommandServerClient Link = AdiCommandServerClient.Instance; Link.hw.Connect(TestSetupConfig.ipAddr, TestSetupConfig.port); Link.Mykonos.radioOn(); Link.Disconnect(); Helper.GenerateTxTone(Mykonos.TXCHANNEL.TX1_TX2, txprofileInfo, OffSet * 100000, amp_dbm); System.Threading.Thread.Sleep(500); rxDataArray = Helper.MykonosRxCapture(channel, NUM_SAMPLES); //Frequency Domain Data Processing AdiMath.FftAnalysis analysisData = new AdiMath.FftAnalysis(); double samplingFreq_MHz = samplingFreq_Hz / 1000000; byte sampleBitWidth = 16; double[] data = AdiMath.complexfftAndScale(rxDataArray, samplingFreq_MHz, sampleBitWidth, true, out analysisData); //Define the 2D array to store frequency bins corresponding to fft data double[,] fftFreqAmp = new double[data.Length, 2]; double binSize = (samplingFreq_MHz / NUM_SAMPLES); double minFreq = samplingFreq_MHz / 2 * (-1); for (int i = 0; i < data.Length; i++) { fftFreqAmp[i, 0] = minFreq + (binSize * 2 * i); fftFreqAmp[i, 1] = data[i]; } //Time Domain Data Processing int numSamplesDiv2 = (int)NUM_SAMPLES / 2; for (int i = 0; i < numSamplesDiv2; i++) { timeDomainData[i, 0] = i; timeDomainData[i, 1] = rxDataArray[2 * i]; timeDomainData[i, 2] = rxDataArray[2 * i + 1]; } var IMin = System.Linq.Enumerable.Range(0, numSamplesDiv2).Select(i => timeDomainData[i, 1]).Min(); var IMax = System.Linq.Enumerable.Range(0, numSamplesDiv2).Select(i => timeDomainData[i, 1]).Max(); var QMin = System.Linq.Enumerable.Range(0, numSamplesDiv2).Select(i => timeDomainData[i, 2]).Min(); var QMax = System.Linq.Enumerable.Range(0, numSamplesDiv2).Select(i => timeDomainData[i, 2]).Max(); Console.WriteLine("I Max, Min:" + IMax.ToString() + "," + IMin.ToString()); Console.WriteLine("Q Max, Min:" + QMax.ToString() + "," + QMin.ToString()); NUnit.Framework.Assert.Greater(IMin, ((-1) * (IQExptVal + ((IQExptVal * 10) / 100)))); NUnit.Framework.Assert.Less(IMin, (IQExptVal * (-1))); NUnit.Framework.Assert.Less(IMax, ((IQExptVal + ((IQExptVal * 10) / 100)))); NUnit.Framework.Assert.Greater(IMax, IQExptVal); NUnit.Framework.Assert.Greater(QMin, ((-1) * (IQExptVal + ((IQExptVal * 10) / 100)))); NUnit.Framework.Assert.Less(QMin, (IQExptVal * (-1))); NUnit.Framework.Assert.Less(QMax, ((IQExptVal + ((IQExptVal * 10) / 100)))); NUnit.Framework.Assert.Greater(QMax, IQExptVal); #if WR_RES_TO_PDF string path = JesdRfTests.ResPath + "Rx_JESD_FFT_TimeDomain_Plots"; if (channel == Mykonos.RXCHANNEL.RX1) { path = path + "RX1"; } else { path = path + "RX2"; } string[] timeLabels = new string[] { "Time Domain Response of " + channel.ToString(), "Sample Number", "ADC Codes", "I data", "Q data" }; string[] fftLabels = new string[] { "Frequency Domain Response of " + channel.ToString(), "Frequency (MHz)", "Amplitude (dBFS)", "FFT DATA" }; // Should be >=4 long. var doc1 = new Document(); iTextSharp.text.Image[] container = new iTextSharp.text.Image[2]; container[0] = Helper.MakeChartObject(timeDomainData, timeLabels, path); container[1] = Helper.MakeChartObject(fftFreqAmp, fftLabels, path); string[] pcbInfo; pcbInfo = Helper.PcbInfo(); Helper.AddAllChartsToPdf(container, path + ".pdf", pcbInfo); // open result pdf System.Diagnostics.Process.Start(path + ".pdf"); #endif }