Пример #1
0
        public BitwiseMultiwayDemux(int iSize, int cControlBits)
        {
            Size    = iSize;
            Input   = new WireSet(Size);
            Control = new WireSet(cControlBits);
            Outputs = new WireSet[(int)Math.Pow(2, cControlBits)];

            for (int i = 0; i < Outputs.Length; i++)
            {
                Outputs[i] = new WireSet(Size);
            }

            Queue <WireSet> temp1 = new Queue <WireSet>();
            Queue <WireSet> temp2 = new Queue <WireSet>();

            temp1.Enqueue(Input);
            int level = cControlBits - 1;

            while (level != -1)
            {
                if (temp1.Count == 0)
                {
                    while (temp2.Count != 0)
                    {
                        bitwiseDemux = new BitwiseDemux(iSize);
                        bitwiseDemux.ConnectControl(Control[level]);

                        bitwiseDemux.ConnectInput(temp2.Dequeue());
                        temp1.Enqueue(bitwiseDemux.Output1);
                        temp1.Enqueue(bitwiseDemux.Output2);
                    }
                }
                else if (temp2.Count == 0)
                {
                    while (temp1.Count != 0)
                    {
                        bitwiseDemux = new BitwiseDemux(iSize);
                        bitwiseDemux.ConnectControl(Control[level]);

                        bitwiseDemux.ConnectInput(temp1.Dequeue());
                        temp2.Enqueue(bitwiseDemux.Output1);
                        temp2.Enqueue(bitwiseDemux.Output2);
                    }
                }
                level--;
            }

            int j = 0;

            while (temp1.Count != 0)
            {
                Outputs[j].ConnectInput(temp1.Dequeue());
                j++;
            }
            while (temp2.Count != 0)
            {
                Outputs[j].ConnectInput(temp2.Dequeue());
                j++;
            }
        }
Пример #2
0
        public override bool TestGate()
        {
            for (int k = 1; k >= 0; k--)
            {
                Control.Value = k;
                for (int i = 0; i < Math.Pow(2, Size); i++)
                {
                    BitwiseDemux mgDemux = new BitwiseDemux(Size);
                    WireSet      ws      = new WireSet(Size);
                    ws.SetValue(i);
                    mgDemux.ConnectInput(ws);
                    mgDemux.ConnectControl(Control);

                    for (int j = Size - 1; j >= 0; j--)
                    {
                        if (k == 0)
                        {
                            if (mgDemux.Output1[j].Value != ws[j].Value || mgDemux.Output2[j].Value != 0)
                            {
                                return(false);
                            }
                        }
                        else if (mgDemux.Output1[j].Value != ws[j].Value ||
                                 mgDemux.Output2[j].Value != 0)
                        {
                            return(false);
                        }
                    }
                }
            }
            return(true);
        }