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); }
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 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++; } }
//your code here 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); } BitwiseDemux[] demux = new BitwiseDemux[(int)Math.Pow(2, cControlBits) - 1]; int currentDemux = 0; int maxDemux = 0; int currentControl = cControlBits - 1; demux[0] = new BitwiseDemux(Size); demux[0].ConnectInput(Input); demux[0].ConnectControl(Control[currentControl]); currentControl--; for (int i = 1; i < cControlBits; i++) { while (currentDemux <= maxDemux) { demux[currentDemux * 2 + 1] = new BitwiseDemux(Size); demux[currentDemux * 2 + 1].ConnectInput(demux[currentDemux].Output1); demux[currentDemux * 2 + 1].ConnectControl(Control[currentControl]); demux[currentDemux * 2 + 2] = new BitwiseDemux(Size); demux[currentDemux * 2 + 2].ConnectInput(demux[currentDemux].Output2); demux[currentDemux * 2 + 2].ConnectControl(Control[currentControl]); currentDemux++; } maxDemux += (int)Math.Pow(2, i); currentControl--; } int c = 0; for (int j = ((demux.Length + 1) / 2) - 1; j < demux.Length; j++) { Outputs[c].ConnectInput(demux[j].Output1); Outputs[c + 1].ConnectInput(demux[j].Output2); c = c + 2; } }
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); } BitwiseDemux[] demuxes = new BitwiseDemux[Outputs.Length - 1]; demuxes[0] = new BitwiseDemux(Size); demuxes[0].ConnectControl(Control[cControlBits - 1]); for (int i = 1, index2 = 1, nextStep = 1, currControl = cControlBits - 1; i < demuxes.Length; i++) { demuxes[i] = new BitwiseDemux(Size); if (i == index2) { currControl--; demuxes[index2].ConnectControl(Control[currControl]); index2 += nextStep * 2; nextStep *= 2; } else { demuxes[i].ConnectControl(Control[currControl]); } } try { for (int position = demuxes.Length / 2, j = 0, i = demuxes.Length / 2; i >= 0; i--) { Outputs[j].ConnectInput(demuxes[position].Output1); Outputs[j + 1].ConnectInput(demuxes[position].Output2); j = j + 2; position++; } for (int currDemux = demuxes.Length - 1, index0 = demuxes.Length / 2 - 1, i = index0; i >= 0; i--) { demuxes[currDemux].ConnectInput(demuxes[index0].Output2); demuxes[currDemux - 1].ConnectInput(demuxes[index0].Output1); index0--; currDemux -= 2; } } catch (Exception e) { Console.WriteLine(e.Message); } finally{ demuxes[0].ConnectInput(Input); } }
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); } //your code here int numOfOutputs = Outputs.Length; m_gBitwiseDemux = new BitwiseDemux[numOfOutputs - 1]; for (int i = 0; i < m_gBitwiseDemux.Length; i++) { m_gBitwiseDemux[i] = new BitwiseDemux(Size); } int currOutputsToConnect = Outputs.Length - 1; int currGateToConnect = m_gBitwiseDemux.Length - 1; int level = 1; int currNumOfGates = numOfOutputs / 2; for (int j = 0; j < currNumOfGates; j++) //connecting all the last level gates to outputs { Outputs[currOutputsToConnect].ConnectInput(m_gBitwiseDemux[currGateToConnect].Output2); Outputs[currOutputsToConnect - 1].ConnectInput(m_gBitwiseDemux[currGateToConnect].Output1); m_gBitwiseDemux[currGateToConnect].ConnectControl(Control[level - 1]); currGateToConnect--; currOutputsToConnect -= 2; } int previousGatesIndex = numOfOutputs - 2; for (level = 2; level <= numOfOutputs; level++) // connectig gates' outputs to next level gates' inputs { currNumOfGates = currNumOfGates / 2; for (int j = 0; j < currNumOfGates; j++) //connecting all the inputs to gates { m_gBitwiseDemux[previousGatesIndex].ConnectInput(m_gBitwiseDemux[currGateToConnect].Output2); m_gBitwiseDemux[previousGatesIndex - 1].ConnectInput(m_gBitwiseDemux[currGateToConnect].Output1); m_gBitwiseDemux[currGateToConnect].ConnectControl(Control[level - 1]); currGateToConnect--; previousGatesIndex -= 2; } } m_gBitwiseDemux[currGateToConnect + 1].ConnectInput(Input); }
// similar procudre to the multimux just the opposite - creates bitwise demux array // saves the 2 outputs as input of new bitwise demux // the cotrol bit are checking in reverse order public BitwiseMultiwayDemux(int iSize, int cControlBits) { //initilaize Size = iSize; Input = new WireSet(Size); Control = new WireSet(cControlBits); Outputs = new WireSet[(int)Math.Pow(2, cControlBits)]; bitwise_demux_operation = new BitwiseDemux[(int)Math.Pow(2, cControlBits) - 1]; for (int i = 0; i < Outputs.Length; i++) { Outputs[i] = new WireSet(Size); } for (int i = 0; i < bitwise_demux_operation.Length; i++) { bitwise_demux_operation[i] = new BitwiseDemux(Size); } // making demux on the input with the last contol bit - to save in the array bitwise_demux_operation[0].ConnectControl(Control[cControlBits - 1]); bitwise_demux_operation[0].ConnectInput(Input); // for each control bit making bitwise demux on all the outputs in that level // the outputs in last half of the bitwise demux array are the final outputs int start_of_input = 0, end_of_input = 1, counter = 0, iterator = 1; for (int contol_bit = cControlBits - 2; contol_bit > -1; contol_bit--) { for (int out_bit = start_of_input; out_bit < end_of_input; out_bit++) { bitwise_demux_operation[counter + end_of_input].ConnectControl(Control[contol_bit]); bitwise_demux_operation[counter + end_of_input + 1].ConnectControl(Control[contol_bit]); bitwise_demux_operation[counter + end_of_input].ConnectInput(bitwise_demux_operation[out_bit].Output1); bitwise_demux_operation[counter + end_of_input + 1].ConnectInput(bitwise_demux_operation[out_bit].Output2); counter = counter + 2; } counter = 0; start_of_input = end_of_input; end_of_input = end_of_input + 2 * iterator; iterator++; } // connects the outputs counter = 0; for (int start = bitwise_demux_operation.Length / 2; start < bitwise_demux_operation.Length; start++) { Outputs[counter].ConnectInput(bitwise_demux_operation[start].Output1); Outputs[counter + 1].ConnectInput(bitwise_demux_operation[start].Output2); counter = counter + 2; } }
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); } //your code here bwdmx = new BitwiseDemux[(int)Math.Pow(2, cControlBits) - 1]; for (int i = 0; i < bwdmx.Length; i++) { bwdmx[i] = new BitwiseDemux(iSize); } bwdmx[0].ConnectInput(Input); //Level int j = 0; for (int i = 0; 2 * i + 2 < bwdmx.Length; i++) { bwdmx[2 * i + 1].ConnectInput(bwdmx[i].Output1); bwdmx[2 * i + 2].ConnectInput(bwdmx[i].Output2); j = i + 1; } for (int i = 0; i < Outputs.Length; i = i + 2) { Outputs[i].ConnectInput(bwdmx[j].Output1); Outputs[i + 1].ConnectInput(bwdmx[j].Output2); j++; } int k = 0; for (int i = 0; i < bwdmx.Length; i++) { if (i == (int)Math.Pow(2, k + 1) - 1) { k++; } bwdmx[i].ConnectControl(Control[Control.Size - k - 1]); } }
public BitwiseMultiwayDemux(int iSize, int cControlBits) { Size = iSize; Input = new WireSet(Size); Control = new WireSet(cControlBits); Outputs = new WireSet[(int)Math.Pow(2, cControlBits)]; demux = new BitwiseDemux[Outputs.Length]; demuxOutputs = new WireSet[2 * demux.Length]; int freeDemux = 1, whereToStart = 0, whereToEnd = 2; for (int i = 0; i < Outputs.Length; i++) { Outputs[i] = new WireSet(Size); demux[i] = new BitwiseDemux(Size); } for (int a = 0; a < demuxOutputs.Length; a++) { demuxOutputs[a] = new WireSet(Size); } demux[0].ConnectControl(Control[Control.Size - 1]);//CHANGED demux[0].ConnectInput(Input); demuxOutputs[0].ConnectInput(demux[0].Output1); demuxOutputs[1].ConnectInput(demux[0].Output2); for (int j = 1; j < cControlBits; j++) { for (int k = whereToStart; k < whereToEnd; k++) { demux[freeDemux].ConnectInput(demuxOutputs[whereToStart]); demux[freeDemux].ConnectControl(Control[Control.Size - j - 1]); //CHANGED demuxOutputs[2 * freeDemux].ConnectInput(demux[freeDemux].Output1); demuxOutputs[(2 * freeDemux) + 1].ConnectInput(demux[freeDemux].Output2); freeDemux++; whereToStart++; } whereToEnd = 2 * freeDemux; } for (int l = 0; l < Outputs.Length; l++) { Outputs[l].ConnectInput(demuxOutputs[l + whereToStart]); } }
static void Main(string[] args) { OrGate or = new OrGate(); XorGate xor = new XorGate(); AndGate and = new AndGate(); MuxGate mux = new MuxGate(); Demux demux = new Demux(); HalfAdder halfAdder = new HalfAdder(); FullAdder fullAdder = new FullAdder(); WireSet wireSet = new WireSet(9); BitwiseAndGate bwag = new BitwiseAndGate(2); BitwiseNotGate bwng = new BitwiseNotGate(3); BitwiseOrGate bwog = new BitwiseOrGate(2); BitwiseMux bwm = new BitwiseMux(2); BitwiseDemux bwd = new BitwiseDemux(2); MultiBitAndGate mbag = new MultiBitAndGate(4); MultiBitAdder mba = new MultiBitAdder(3); BitwiseMultiwayMux bwmwm = new BitwiseMultiwayMux(5, 4); BitwiseMultiwayDemux bwmwd = new BitwiseMultiwayDemux(4, 4); SingleBitRegister sbr = new SingleBitRegister(); MultiBitRegister mbr = new MultiBitRegister(4); if (!sbr.TestGate()) { Console.WriteLine("SingleBitRegisterbugbug"); } if (!mbr.TestGate()) { Console.WriteLine("MultiBitRegisterbugbug"); } ALU alu = new ALU(4); if (!alu.TestGate()) { Console.WriteLine("ALUbugbug"); } if (!bwmwd.TestGate()) { Console.WriteLine("BitwiseMultiwayDemuxbugbug"); } if (!bwmwm.TestGate()) { Console.WriteLine("BitwiseMultiwayMuxbugbug"); } if (!mba.TestGate()) { Console.WriteLine("MultiBitAdderbugbug"); } if (!mbag.TestGate()) { Console.WriteLine("MultiBitAndGatebugbug"); } if (!bwd.TestGate()) { Console.WriteLine("BitWiseDemuxbugbug"); } if (!bwm.TestGate()) { Console.WriteLine("BitWiseMuxbugbug"); } if (!bwog.TestGate()) { Console.WriteLine("BitWiseOrGatebugbug"); } if (!bwng.TestGate()) { Console.WriteLine("BitWiseNotGatebugbug"); } if (!bwag.TestGate()) { Console.WriteLine("BitWiseAndGatebugbug"); } wireSet.SetValue(137); wireSet.Set2sComplement(-32); if (!and.TestGate()) { Console.WriteLine("andbugbug"); } if (!or.TestGate()) { Console.WriteLine("orbugbug"); } if (!xor.TestGate()) { Console.WriteLine("xorbugbug"); } if (!mux.TestGate()) { Console.WriteLine("muxbugbug"); } if (!demux.TestGate()) { Console.WriteLine("demuxbugbug"); } if (!halfAdder.TestGate()) { Console.WriteLine("HAbugbug"); } if (!fullAdder.TestGate()) { Console.WriteLine("FAbugbug"); } Memory memory = new Memory(2, 6); if (!memory.TestGate()) { Console.WriteLine("Membugbug"); } Console.WriteLine("done"); Console.ReadLine(); }
static void Main(string[] args) { AndGate and = new AndGate(); OrGate or = new OrGate(); XorGate xor = new XorGate(); MuxGate mux = new MuxGate(); Demux demux = new Demux(); HalfAdder ha = new HalfAdder(); FullAdder fa = new FullAdder(); if (!and.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done And"); if (!or.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done Or"); if (!xor.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done Xor"); if (!mux.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done Mux"); if (!demux.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done Demux"); if (!ha.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done HalfAdder"); if (!fa.TestGate()) { Console.WriteLine("bugbug"); } Console.WriteLine("done FullAdder"); WireSet num = new WireSet(4); num.SetValue(6); Console.WriteLine(num.ToString()); Console.WriteLine(num.GetValue()); Console.WriteLine("trying 2's complement"); WireSet num2 = new WireSet(4); num2.Set2sComplement(6); Console.WriteLine(num2.Get2sComplement()); WireSet num3 = new WireSet(4); num3.Set2sComplement(-2); Console.WriteLine(num3.Get2sComplement()); BitwiseAndGate BWAnd = new BitwiseAndGate(3); BWAnd.TestGate(); BitwiseNotGate BWNot = new BitwiseNotGate(3); BWNot.TestGate(); BitwiseOrGate BWOr = new BitwiseOrGate(3); BWOr.TestGate(); BitwiseMux BWMux = new BitwiseMux(3); BWMux.TestGate(); BitwiseDemux BWDemux = new BitwiseDemux(3); BWDemux.TestGate(); MultiBitAndGate multiAnd = new MultiBitAndGate(3); multiAnd.TestGate(); MultiBitAdder multiAdd = new MultiBitAdder(5); multiAdd.TestGate(); BitwiseMultiwayMux multimux = new BitwiseMultiwayMux(8, 2); WireSet[] inp = new WireSet[4]; inp[0] = new WireSet(8); inp[0].Set2sComplement(1); multimux.ConnectInput(0, inp[0]); inp[1] = new WireSet(8); inp[1].Set2sComplement(2); multimux.ConnectInput(1, inp[1]); inp[2] = new WireSet(8); inp[2].Set2sComplement(3); multimux.ConnectInput(2, inp[2]); inp[3] = new WireSet(8); inp[3].Set2sComplement(4); multimux.ConnectInput(3, inp[3]); WireSet control = new WireSet(2); control.Set2sComplement(3); multimux.ConnectControl(control); multimux.TestGate(); BitwiseMultiwayDemux multidemux = new BitwiseMultiwayDemux(8, 1); ALU alu = new ALU(16); alu.TestGate(); SingleBitRegister sbr = new SingleBitRegister(); if (sbr.TestGate()) { Console.WriteLine("sbr IS OK"); } MultiBitRegister mbr = new MultiBitRegister(8); if (mbr.TestGate()) { Console.WriteLine("mbr IS OK"); } Memory mem = new Memory(3, 6); if (mem.TestGate()) { Console.WriteLine("mem IS OK"); } Console.ReadLine(); }
static void Main(string[] args) { //This is an example of a testing code that you should run for all the gates that you create // // //Create a gate // AndGate and = new AndGate(); // //Test that the unit testing works properly // if (!and.TestGate()) // Console.WriteLine("bugbug"); // // //test or gate // OrGate or = new OrGate(); // if (or.TestGate()) // Console.WriteLine("done or"); // //test xor gate // XorGate xor = new XorGate(); // if (xor.TestGate()) // Console.WriteLine("done xor"); // // MultiBitAndGate mbaGate = new MultiBitAndGate(4); // if (mbaGate.TestGate()) // Console.WriteLine("done mba"); // // MultiBitOrGate mboGate = new MultiBitOrGate(4); // if (mboGate.TestGate()) // Console.WriteLine("done mbo"); // // MuxGate mux = new MuxGate(); // if (mux.TestGate()) // Console.WriteLine("done mux"); // // Demux demux = new Demux(); // if (demux.TestGate()) // Console.WriteLine("done demux"); // // BitwiseAndGate bwAg = new BitwiseAndGate(4); // if (bwAg.TestGate()) // Console.WriteLine("done bwAg"); // // BitwiseNotGate bwNg = new BitwiseNotGate(4); // if (bwNg.TestGate()) // Console.WriteLine("done bwNg"); //// // BitwiseOrGate bwOg = new BitwiseOrGate(4); // if (bwOg.TestGate()) // Console.WriteLine("done bwOg"); // // // WireSet ws = new WireSet(4); // ws.SetValue(8); // Console.WriteLine(ws.ToString()); //// // BitwiseMux bwMux = new BitwiseMux(4); // if (bwMux.TestGate()) // Console.WriteLine("done bwMux"); // // BitwiseDemux bwDemux = new BitwiseDemux(4); // if (bwDemux.TestGate()) // Console.WriteLine("done bwDemux"); // // BitwiseMultiwayMux bwMwMux = new BitwiseMultiwayMux(3,3); // if (bwMwMux.TestGate()) // Console.WriteLine("done bwMwMux"); OrGate or = new OrGate(); XorGate xor = new XorGate(); AndGate and = new AndGate(); MuxGate mux = new MuxGate(); Demux demux = new Demux(); HalfAdder halfAdder = new HalfAdder(); FullAdder fullAdder = new FullAdder(); WireSet wireSet = new WireSet(9); BitwiseAndGate bwag = new BitwiseAndGate(2); BitwiseNotGate bwng = new BitwiseNotGate(3); BitwiseOrGate bwog = new BitwiseOrGate(2); BitwiseMux bwm = new BitwiseMux(2); BitwiseDemux bwd = new BitwiseDemux(2); MultiBitAndGate mbag = new MultiBitAndGate(4); MultiBitAdder mba = new MultiBitAdder(3); BitwiseMultiwayMux bwmwm = new BitwiseMultiwayMux(5, 4); BitwiseMultiwayDemux bwmwd = new BitwiseMultiwayDemux(4, 4); SingleBitRegister sbr = new SingleBitRegister(); MultiBitRegister mbr = new MultiBitRegister(4); wireSet.SetValue(137); wireSet.Set2sComplement(-32); if (halfAdder.TestGate()) { Console.WriteLine("HAbugbug"); } if (fullAdder.TestGate()) { Console.WriteLine("FAbugbug"); } if (mba.TestGate()) { Console.WriteLine("MultiBitAdderbugbug"); } ALU alu = new ALU(16); if (alu.TestGate()) { Console.WriteLine("ALU bugbug"); } Console.WriteLine("FINISH HIM"); }