Example #1
0
 private static void InitializeMuxGates(CompleteBinaryTree <MuxGate> muxGates)
 {
     for (int i = 0; i < muxGates.ItemsCount; i++)
     {
         muxGates[i] = new MuxGate();
     }
 }
Example #2
0
 private static void InitializeDemuxGates(CompleteBinaryTree <Demux> demuxGates)
 {
     for (int i = 0; i < demuxGates.ItemsCount; i++)
     {
         demuxGates[i] = new Demux();
     }
 }
Example #3
0
        private void ConnectInput(CompleteBinaryTree <Demux> demuxGates)
        {
            Demux demuxGate = demuxGates.Root;

            demuxGate.Input.ConnectInput(Input);
            demuxGate.ConnectControl(Control[ControlBits - 1]);
        }
Example #4
0
        private void ConnectOutputs(CompleteBinaryTree <Demux> demuxGates)
        {
            int iOutput = 0;

            foreach (var itemIndexPair in demuxGates.GetDepthEnumerator(demuxGates.Height))
            {
                Demux demuxGate = itemIndexPair.Item;
                Outputs[iOutput].ConnectInput(demuxGate.Output1);
                Outputs[iOutput + 1].ConnectInput(demuxGate.Output2);

                iOutput += 2;
            }
        }
Example #5
0
        private void ConnectInputs(CompleteBinaryTree <MuxGate> muxGates)
        {
            int iInput = 0;

            foreach (var itemIndexPair in muxGates.GetDepthEnumerator(muxGates.Height))
            {
                MuxGate muxGate = itemIndexPair.Item;
                muxGate.ConnectInput1(Inputs[iInput]);
                muxGate.ConnectInput2(Inputs[iInput + 1]);
                muxGate.ConnectControl(Control[0]);

                iInput += 2;
            }
        }
Example #6
0
        public MultiwayMuxGate(int cControlBits)
        {
            ControlBits = cControlBits;
            var muxGates = new CompleteBinaryTree <MuxGate>(ControlBits - 1);

            Control = new WireSet(ControlBits);
            Inputs  = new Wire[muxGates.ItemsCount + 1];
            InitializeInputs();

            InitializeMuxGates(muxGates);
            ConnectInputs(muxGates);
            BuildMuxGatesTree(muxGates);

            Output = muxGates.Root.Output;

            m_muxGates = muxGates;
        }
Example #7
0
        public MultiwayDemuxGate(int cControlBits)
        {
            ControlBits = cControlBits;
            var demuxGates = new CompleteBinaryTree <Demux>(ControlBits - 1);

            Control = new WireSet(ControlBits);
            Input   = new Wire();
            Outputs = new Wire[demuxGates.ItemsCount + 1];
            InitializeOutputs();

            InitializeDemuxGates(demuxGates);
            ConnectInput(demuxGates);
            ConnectOutputs(demuxGates);
            BuildDeuxGatesTree(demuxGates);

            m_demuxGates = demuxGates;
        }
Example #8
0
        private void BuildMuxGatesTree(CompleteBinaryTree <MuxGate> muxGates)
        {
            int iControl = 1;

            for (int depth = muxGates.Height - 1; depth >= 0; depth--)
            {
                foreach (var itemIndexPair in muxGates.GetDepthEnumerator(depth))
                {
                    int     index = itemIndexPair.Index;
                    MuxGate gate  = itemIndexPair.Item;
                    gate.ConnectInput1(muxGates.LeftChild(index).Output);
                    gate.ConnectInput2(muxGates.RightChild(index).Output);
                    gate.ConnectControl(Control[iControl]);
                }

                iControl++;
            }
        }
Example #9
0
        private void BuildDeuxGatesTree(CompleteBinaryTree <Demux> demuxGates)
        {
            int iControl = 0;

            for (int depth = demuxGates.Height - 1; depth >= 0; depth--)
            {
                foreach (var itemIndexPair in demuxGates.GetDepthEnumerator(depth))
                {
                    int   index = itemIndexPair.Index;
                    Demux demux = itemIndexPair.Item;
                    Demux left  = demuxGates.LeftChild(index);
                    Demux right = demuxGates.RightChild(index);

                    left.Input.ConnectInput(demux.Output1);
                    left.ConnectControl(Control[iControl]);
                    right.Input.ConnectInput(demux.Output2);
                    right.ConnectControl(Control[iControl]);
                }

                iControl++;
            }
        }