private static void InitializeMuxGates(CompleteBinaryTree <MuxGate> muxGates) { for (int i = 0; i < muxGates.ItemsCount; i++) { muxGates[i] = new MuxGate(); } }
private static void InitializeDemuxGates(CompleteBinaryTree <Demux> demuxGates) { for (int i = 0; i < demuxGates.ItemsCount; i++) { demuxGates[i] = new Demux(); } }
private void ConnectInput(CompleteBinaryTree <Demux> demuxGates) { Demux demuxGate = demuxGates.Root; demuxGate.Input.ConnectInput(Input); demuxGate.ConnectControl(Control[ControlBits - 1]); }
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; } }
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; } }
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; }
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; }
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++; } }
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++; } }