public override bool TestGate() { Input1.SetValue(7); Input2.SetValue(7); if (Output.Get2sComplement() != 14) { return(false); } Input1.Set2sComplement(6); Input2.Set2sComplement(-6); if (Output.Get2sComplement() != 0) { return(false); } Input1.Set2sComplement(6); Input2.Set2sComplement(-1); if (Output.Get2sComplement() != 5) { return(false); } return(true); }
public override bool TestGate() { InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 0; NotOutput.Value = 1; Console.WriteLine("Case 1: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 0; NotOutput.Value = 0; Console.WriteLine("Case 2: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); InputX.SetValue(6); InputY.SetValue(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 0; NotOutput.Value = 1; if (Output.Get2sComplement() != -7 || Zero.Value != 0 || Negative.Value != 1) { return(false); } ZeroX.Value = 1; ZeroY.Value = 1; NotX.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; if (Output.Get2sComplement() != 0 || Zero.Value != 1 || Negative.Value != 0) { return(false); } return(true); }
public override bool TestGate() { Input.Set2sComplement(5); Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != 5) { return(false); } return(true); }
public override bool TestGate() { Input.Set2sComplement(22); Address.Set2sComplement(4); Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); Load.Value = 0; if (Output.Get2sComplement() != 22) { return(false); } Input.Set2sComplement(11); Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != 22) { return(false); } Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != 11) { return(false); } Load.Value = 0; Address.SetValue(7); Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != 0) { return(false); } Load.Value = 1; if (Output.Get2sComplement() != 0) { return(false); } Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != 11) { return(false); } return(true); }
public override bool TestGate() { Random rand = new Random(); WireSet randWire = new WireSet(Size); WireSet maxWire = new WireSet(Size); maxWire.Set2sComplement((int)Math.Pow(2, Size - 1) - 1); for (int i = 0; i < 1000; i++) { int num = (int)rand.Next(-(int)Math.Pow(2, Size - 1), ((int)Math.Pow(2, Size - 1) - 1)); randWire.Set2sComplement(num); Input.Set2sComplement(randWire.Get2sComplement()); Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); Load.Value = 0; Input.Set2sComplement(maxWire.Get2sComplement()); if (randWire.Get2sComplement() != Output.Get2sComplement()) { return(false); } Clock.ClockDown(); Clock.ClockUp(); if (randWire.Get2sComplement() != Output.Get2sComplement()) { return(false); } Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); if (Input.Get2sComplement() != Output.Get2sComplement()) { return(false); } } return(true); }
public override bool TestGate() { int bits = Size - 1; for (int i = 0; i < 10; i++) { Random rand = new Random(); int num1 = rand.Next((-(int)Math.Pow(2, bits - 1)), ((int)Math.Pow(2, bits - 1) - 1) + 1); int num2 = rand.Next((-(int)Math.Pow(2, bits - 1)), ((int)Math.Pow(2, bits - 1) - 1) + 1); WireSet sum = new WireSet(Size); sum.Set2sComplement(num1 + num2); Input1.Set2sComplement(num1); Input2.Set2sComplement(num2); if (Output.Get2sComplement() != sum.Get2sComplement()) { return(false); } } return(true); }
public override string ToString() { return(Input1 + "(" + Input1.Get2sComplement() + ")" + " + " + Input2 + "(" + Input2.Get2sComplement() + ")" + " = " + Output + "(" + Output.Get2sComplement() + ")"); }
public override bool TestGate() { Console.WriteLine("TESTING FOR X=5, Y=3"); //1 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; Console.WriteLine("Case 1: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //2 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 2: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //3 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 1; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; Console.WriteLine("Case 3: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //4 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 0; NotOutput.Value = 0; Console.WriteLine("Case 4: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //5 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 0; NotOutput.Value = 0; Console.WriteLine("Case 5: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //6 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 0; NotOutput.Value = 1; Console.WriteLine("Case 6: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //7 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 0; NotOutput.Value = 1; Console.WriteLine("Case 7: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //8 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 8: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //9 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 9: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //10 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 1; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 10: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //11 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 11: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //12 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 0; Console.WriteLine("Case 12: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //13 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; Console.WriteLine("Case 13: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //14 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; Console.WriteLine("Case 14: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //15 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 15: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //16 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 0; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; Console.WriteLine("Case 16: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //17 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 0; NotY.Value = 0; F.Value = 0; NotOutput.Value = 0; Console.WriteLine("Case 17: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); //18 InputX.Set2sComplement(5); InputY.Set2sComplement(5); ZeroX.Value = 0; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 1; F.Value = 0; NotOutput.Value = 1; Console.WriteLine("Case 18: " + Output.Get2sComplement()); Console.WriteLine("Negative?: " + Negative.Value); Console.WriteLine("Zero?: " + Zero.Value); Console.WriteLine(""); return(true); // throw new NotImplementedException(); }
public override bool TestGate() { InputX.SetValue(6); InputY.SetValue(5); //setting ALU bit settings ZeroX.Value = 1; ZeroY.Value = 1; NotX.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; // if (Output.Get2sComplement() != 0 || Zero.Value != 1 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 1; ZeroY.Value = 1; NotX.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != 1 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 1; ZeroY.Value = 1; NotX.Value = 1; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; // if (Output.Get2sComplement() != -1 || Zero.Value != 0 || Negative.Value != 1) { return(false); } //setting ALU bit settings ZeroX.Value = 0; ZeroY.Value = 1; NotX.Value = 0; NotY.Value = 1; F.Value = 0; NotOutput.Value = 0; // if (Output.Get2sComplement() != 6 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 0; NotOutput.Value = 0; // if (Output.Get2sComplement() != 5 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 0; NotOutput.Value = 1; // if (Output.Get2sComplement() != -7 || Zero.Value != 0 || Negative.Value != 1) { return(false); } //setting ALU bit settings ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 0; NotOutput.Value = 1; // if (Output.Get2sComplement() != -6 || Zero.Value != 0 || Negative.Value != 1) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != -6 || Zero.Value != 0 || Negative.Value != 1) { return(false); } //setting ALU bit settings ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != -5 || Zero.Value != 0 || Negative.Value != 1) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 1; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != 7 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != 6 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 1; NotY.Value = 1; F.Value = 1; NotOutput.Value = 0; // if (Output.Get2sComplement() != 5 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 1; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; // if (Output.Get2sComplement() != 4 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 0; // if (Output.Get2sComplement() != -5 || Zero.Value != 0 || Negative.Value != 1) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 1; ZeroY.Value = 0; NotY.Value = 0; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != 1 || Zero.Value != 0 || Negative.Value != 0) { return(false); } //setting ALU bit settings ZeroX.Value = 0; NotX.Value = 0; ZeroY.Value = 0; NotY.Value = 1; F.Value = 1; NotOutput.Value = 1; // if (Output.Get2sComplement() != -1 || Zero.Value != 0 || Negative.Value != 1) { return(false); } return(true); }
public override bool TestGate() { Random rand = new Random(); WireSet randInWire = new WireSet(WordSize); for (int i = 0; i < m_rMultiBit.Length; i++) { randInWire.Set2sComplement((int)rand.Next(-(int)Math.Pow(2, WordSize - 1), ((int)Math.Pow(2, WordSize - 1) - 1))); //generate random valid input Input.Set2sComplement(randInWire.Get2sComplement()); // connect input to randomized wire Address.Set2sComplement((int)rand.Next(0, (int)Math.Pow(2, AddressSize) + 1)); //generate random valid address Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); Load.Value = 0; int tempChange = randInWire.Get2sComplement(); if (tempChange < 0) { tempChange++; } else { tempChange--; } Input.Set2sComplement(tempChange); if (Output.Get2sComplement() != randInWire.Get2sComplement()) { return(false); } Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != randInWire.Get2sComplement()) { return(false); } Load.Value = 1; Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != Input.Get2sComplement()) { return(false); } tempChange = Address.Get2sComplement(); if (tempChange != 0) { tempChange--; } else { tempChange++; } Address.Set2sComplement(tempChange); Clock.ClockDown(); Clock.ClockUp(); if (Output.Get2sComplement() != Input.Get2sComplement()) { return(false); } } return(true); }
public override bool TestGate() { int[] arrZX = new int[] { 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }; int[] arrNX = new int[] { 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1 }; int[] arrZY = new int[] { 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 }; int[] arrNY = new int[] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1 }; int[] arrF = new int[] { 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 }; int[] arrNO = new int[] { 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1 }; InputX = new WireSet(Size); InputY = new WireSet(Size); Random rand = new Random(); WireSet[] answer = new WireSet[arrZX.Length]; for (int i = 0; i < answer.Length; i++) { answer[i] = new WireSet(Size); } answer[0].Set2sComplement(0); answer[1].Set2sComplement(1); answer[2].Set2sComplement(-1); for (int i = 0; i < arrZX.Length; i++) { int num1 = rand.Next((-(int)Math.Pow(2, Size - 1)), ((int)Math.Pow(2, Size - 1) - 1) + 1); int num2 = rand.Next((-(int)Math.Pow(2, Size - 1)), ((int)Math.Pow(2, Size - 1) - 1) + 1); InputX.Set2sComplement(num1); InputY.Set2sComplement(num2); ZeroX.Value = arrZX[i]; NotX.Value = arrNX[i]; ZeroY.Value = arrZY[i]; NotY.Value = arrNY[i]; F.Value = arrF[i]; NotOutput.Value = arrNO[i]; if (Negative.Value != Output[Size - 1].Value) { return(false); } if (Output.Get2sComplement() == 0 && Zero.Value != 1) { return(false); } if (Output.Get2sComplement() != 0 && Zero.Value != 0) { return(false); } answer[3].Set2sComplement(num1); answer[4].Set2sComplement(num2); BitwiseNotGate tempGX = new BitwiseNotGate(Size); tempGX.ConnectInput(InputX); answer[5].ConnectInput(tempGX.Output); BitwiseNotGate tempGY = new BitwiseNotGate(Size); tempGY.ConnectInput(InputY); answer[6].ConnectInput(tempGY.Output); answer[7].Set2sComplement(-num1); answer[8].Set2sComplement(-num2); answer[9].Set2sComplement(num1 + 1); answer[10].Set2sComplement(num2 + 1); answer[11].Set2sComplement(num1 - 1); answer[12].Set2sComplement(num2 - 1); answer[13].Set2sComplement(num1 + num2); answer[14].Set2sComplement(num1 - num2); answer[15].Set2sComplement(num2 - num1); BitwiseAndGate tempGAnd = new BitwiseAndGate(Size); tempGAnd.ConnectInput1(InputX); tempGAnd.ConnectInput2(InputY); answer[16].ConnectInput(tempGAnd.Output); answer[17].ConnectInput(Output); for (int j = 0; j < Size; j++) { if (answer[i][j].Value != Output[j].Value) { return(false); } } } return(true); }