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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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
        }