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++; } }
public override bool TestGate() { BitwiseDemux bwdm; Demux m_gLocalDemux; Wire w_local = new Wire(); for (int l = 0; l < 2; l++) { w_local.Value = l; for (int j = 0; j < Math.Pow(2, Size); j++) { bwdm = new BitwiseDemux(Size); bwdm.Input.ConnectInput(InitTestVariables(j)); bwdm.ConnectControl(w_local); for (int i = 0; i < Size; i++) { m_gLocalDemux = new Demux(); m_gLocalDemux.ConnectInput(bwdm.Input[i]); m_gLocalDemux.ConnectControl(bwdm.Control); if (bwdm.Output1[i].Value != m_gLocalDemux.Output1.Value || bwdm.Output2[i].Value != m_gLocalDemux.Output2.Value) { return(false); } } //// UNCOMMENT THIS LINES TO SEE THE DEBUG PRINT //System.Console.WriteLine(" Testing input " + " -> " + WStoString(bwdm.Input)); //System.Console.WriteLine(" Testing control " + " -> " + bwdm.Control); //System.Console.WriteLine(" Testing output1 " + " -> " + WStoString(bwdm.Output1)); //System.Console.WriteLine(" Testing output2 " + " -> " + WStoString(bwdm.Output2)); } } return(true); }
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); }