Пример #1
0
 public MultiBitRegister(int iSize)
 {
     Size   = iSize;
     Input  = new WireSet(Size);
     Output = new WireSet(Size);
     Load   = new Wire();
     SingleBitRegister[] reg = new SingleBitRegister[iSize];
     for (int i = 0; i < iSize; i++)
     {
         reg[i] = new SingleBitRegister();
         reg[i].ConnectInput(Input[i]);
         reg[i].ConnectLoad(Load);
         Output[i].ConnectInput(reg[i].Output);
     }
 }
Пример #2
0
 public MultiBitRegister(int iSize)
 {
     Size   = iSize;
     Input  = new WireSet(Size);
     Output = new WireSet(Size);
     Load   = new Wire();
     //your code here
     m_rSingle = new SingleBitRegister[Size];
     for (int i = 0; i < Size; i++)
     {
         m_rSingle[i] = new SingleBitRegister();
         m_rSingle[i].ConnectLoad(Load);
         m_rSingle[i].ConnectInput(Input[i]);
         Output[i].ConnectInput(m_rSingle[i].Output);
     }
 }
Пример #3
0
        // creating multi bit register by using array of single bit register and a mux
        public MultiBitRegister(int iSize)
        {
            Size      = iSize;
            Input     = new WireSet(Size);
            Output    = new WireSet(Size);
            Load      = new Wire();
            registers = new SingleBitRegister[Size];

            for (int i = 0; i < Size; i++)
            {
                registers[i] = new SingleBitRegister();
            }

            for (int bit = 0; bit < Size; bit++)
            {
                registers[bit].ConnectLoad(Load);
                registers[bit].ConnectInput(Input[bit]);
                Output[bit].ConnectInput(registers[bit].Output);
            }
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }
Пример #6
0
        static void Main(string[] args)
        {
            //Console.WriteLine("============================================================================");
            //Console.WriteLine("Wireset tests:");
            //Console.WriteLine();
            //Console.WriteLine("Wireset.SetValue(int x) test:");
            //Console.Write("Enter the num of bits: ");
            //int numOfBits = Convert.ToInt32(Console.ReadLine());
            //WireSet wire1 = new WireSet(numOfBits);
            //Console.Write("Enter a num between 0 and " + (int)Math.Pow(2, numOfBits) + " to convert into binary: ");
            //int userNum = Convert.ToInt32(Console.ReadLine());
            //wire1.SetValue(userNum);
            //Console.WriteLine("Your number binary representation: " + wire1.ToString());
            //Console.WriteLine();

            //Console.WriteLine("Wireset.GetValue() test:");
            //Console.WriteLine("Your number decimal representation (expected value: " + userNum + "): " + wire1.GetValue());
            //Console.WriteLine();


            //Console.WriteLine("Wireset.Set2sComplement() test:");
            //Console.Write("Enter the num of bits: ");
            //int numOfBits2 = Convert.ToInt32(Console.ReadLine());
            //WireSet wire2 = new WireSet(numOfBits2);
            //Console.Write("Enter a num between -" + (int)Math.Pow(2, numOfBits2 - 1) + " and " + ((int)Math.Pow(2, numOfBits2 - 1) - 1) + " to convert into binary: ");
            //string input = Console.ReadLine();
            //int userNum2 = 1;
            //if (input[0] == '-')
            //{
            //    input = input.TrimStart('-');
            //    userNum2 = -1;
            //}
            //userNum2 = userNum2 * (Convert.ToInt32(input));
            //wire2.Set2sComplement(userNum2);
            //Console.WriteLine("Your number binary representation: " + wire2.ToString());
            //Console.WriteLine();

            //Console.WriteLine("Wireset.Get2sComplement() test:");
            //Console.WriteLine("Your number decimal representation (expected value: " + userNum2 + "): " + wire2.Get2sComplement());
            //Console.WriteLine("============================================================================");
            //Console.WriteLine();
            //Console.WriteLine("============================================================================");
            //Console.WriteLine();
            //Console.WriteLine("HalfAdder tests:");
            //HalfAdder ha = new HalfAdder();
            //Wire in1 = new Wire();
            //Wire in2 = new Wire();
            //in1.Value = 0;
            //in2.Value = 0;
            //ha.Input1.ConnectInput(in1);
            //ha.Input2.ConnectInput(in2);
            //Console.WriteLine(ha.ToString());
            //ha = new HalfAdder();
            //in1.Value = 1;
            //ha.Input1.ConnectInput(in1);
            //ha.Input2.ConnectInput(in2);
            //Console.WriteLine(ha.ToString());
            //ha = new HalfAdder();
            //in2.Value = 1;
            //ha.Input1.ConnectInput(in1);
            //ha.Input2.ConnectInput(in2);
            //Console.WriteLine(ha.ToString());
            //ha = new HalfAdder();
            //in1.Value = 0;
            //ha.Input1.ConnectInput(in1);
            //ha.Input2.ConnectInput(in2);
            //Console.WriteLine(ha.ToString());
            //Console.WriteLine();
            //Console.WriteLine("Inner test result: " + ha.TestGate());
            //Console.WriteLine("============================================================================");
            //Console.WriteLine();
            //Console.WriteLine("============================================================================");
            //Console.WriteLine();
            //Console.WriteLine("FullAdder tests:");
            //FullAdder fa = new FullAdder();
            //Console.WriteLine("Inner test result: " + fa.TestGate());
            //Console.WriteLine("============================================================================");
            //Console.WriteLine();
            //Console.WriteLine("MultiBitAdder tests:");
            //bool loop = true;
            //while (loop)
            //{
            //    Console.Write("Enter the num of bits (hit 'e' to exit): ");
            //    string strIn = Console.ReadLine();
            //    if (strIn == "e")
            //        loop = false;
            //    else
            //    {
            //        int numOfBits4 = Convert.ToInt32(strIn);
            //        Console.Write("Enter first num between -" + (int)Math.Pow(2, numOfBits4 - 1) + " and " + ((int)Math.Pow(2, numOfBits4 - 1) - 1) + " to compute: ");
            //        int userNum41 = Convert.ToInt32(Console.ReadLine());
            //        Console.Write("Enter second num between -" + (int)Math.Pow(2, numOfBits4 - 1) + " and " + ((int)Math.Pow(2, numOfBits4 - 1) - 1) + " to compute: ");
            //        int userNum42 = Convert.ToInt32(Console.ReadLine());


            //        MultiBitAdder mba = new MultiBitAdder(numOfBits4);
            //        WireSet in1 = new WireSet(numOfBits4);
            //        WireSet in2 = new WireSet(numOfBits4);
            //        in1.Set2sComplement(userNum41);
            //        in2.Set2sComplement(userNum42);

            //        mba.ConnectInput1(in1);
            //        mba.ConnectInput2(in2);
            //        Console.WriteLine("Computation: (" + mba.Input1.Get2sComplement() + ") + (" + mba.Input2.Get2sComplement() + ") = (" + mba.Output.Get2sComplement() + ")");

            //        Console.WriteLine(mba);
            //    }
            //}

            //Console.WriteLine("============================================================================");
            //Console.WriteLine();
            //Console.WriteLine("ALU tests:");
            //bool loop = true;
            //while (loop)
            //{
            //    Console.Write("Enter the num of bits ('e' + 'enter' to exit the test loop): ");
            //    string strIn = Console.ReadLine();
            //    if (strIn == "e")
            //        loop = false;
            //    else
            //    {
            //        int numOfBits5 = Convert.ToInt32(strIn);
            //        Console.Write("Enter X input between -" + (int)Math.Pow(2, numOfBits5 - 1) + " and " + ((int)Math.Pow(2, numOfBits5 - 1) - 1) + " to compute: ");
            //        int userNum51 = Convert.ToInt32(Console.ReadLine());
            //        Console.Write("Enter Y input between -" + (int)Math.Pow(2, numOfBits5 - 1) + " and " + ((int)Math.Pow(2, numOfBits5 - 1) - 1) + " to compute: ");
            //        int userNum52 = Convert.ToInt32(Console.ReadLine());


            //        WireSet in1 = new WireSet(numOfBits5);
            //        WireSet in2 = new WireSet(numOfBits5);
            //        in1.Set2sComplement(userNum51);
            //        in2.Set2sComplement(userNum52);

            //        Console.WriteLine();
            //        Console.WriteLine("your binary num1: " + in1);
            //        Console.WriteLine("your binary num2: " + in2);
            //        Console.WriteLine();

            //        ALU alu = new ALU(numOfBits5);
            //        //setting ALU properties:

            //        alu.InputX.ConnectInput(in1);
            //        alu.InputY.ConnectInput(in2);
            //        Wire userWire1 = new Wire();
            //        Wire userWire2 = new Wire();
            //        Wire userWire3 = new Wire();
            //        Wire userWire4 = new Wire();
            //        Wire userWire5 = new Wire();
            //        Wire userWire6 = new Wire();
            //        Wire userWire7 = new Wire();


            //        Console.Write("Enter ZX value: ");
            //        userWire1.Value = Convert.ToInt32(Console.ReadLine());
            //        alu.ZeroX.ConnectInput(userWire1);

            //        Console.Write("Enter NX value: ");
            //        userWire2.Value = Convert.ToInt32(Console.ReadLine());
            //        alu.NotX.ConnectInput(userWire2);

            //        Console.Write("Enter ZY value: ");
            //        userWire3.Value = Convert.ToInt32(Console.ReadLine());
            //        alu.ZeroY.ConnectInput(userWire3);

            //        Console.Write("Enter NY value: ");
            //        userWire4.Value = Convert.ToInt32(Console.ReadLine());
            //        alu.NotY.ConnectInput(userWire4);

            //        Console.Write("Enter F value: ");
            //        userWire5.Value = Convert.ToInt32(Console.ReadLine());
            //        alu.F.ConnectInput(userWire5);

            //        Console.Write("Enter N value: ");
            //        userWire6.Value = Convert.ToInt32(Console.ReadLine());
            //        alu.NotOutput.ConnectInput(userWire6);

            //        Console.WriteLine();
            //        Console.Write("Data: ");
            //        Console.WriteLine(" ZX = " + alu.ZeroX + ";  NX = " + alu.NotX + ";  ZY = " + alu.ZeroY + ";  NY = " + alu.NotY + ";  F = " + alu.F + ";  N = " + alu.NotOutput + ".");
            //        Console.WriteLine();
            //        Console.WriteLine("output is Zero (no = 0/yes = 1): " + alu.Zero);
            //        Console.WriteLine("output is Negative (no = 0/yes = 1): " + alu.Negative);
            //        Console.WriteLine("output binary: " + alu.Output);
            //        Console.WriteLine("output decimal: " + alu.Output.Get2sComplement());
            //        Console.WriteLine("============================================================================");

            //    }
            //}


            SingleBitRegister sbr = new SingleBitRegister();

            Console.WriteLine("single bit register testGate: " + sbr.TestGate());
            Console.WriteLine("============================================================================");

            Console.Write("Enter num of multibitRegister bits: ");
            int multiLength      = Convert.ToInt32(Console.ReadLine());
            MultiBitRegister mbr = new MultiBitRegister(multiLength);

            Console.WriteLine("multi bit register testGate: " + mbr.TestGate());
            Console.WriteLine("============================================================================");


            Console.Write("Enter WordSize bits: ");
            int wordsize = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter AddressSize bits: ");
            int    addresssize = Convert.ToInt32(Console.ReadLine());
            Memory mmry        = new Memory(addresssize, wordsize);

            Console.WriteLine("memory testGate: " + mmry.TestGate());



            //exit point if needed:
            //Console.WriteLine("press any key to exit...");
            Console.ReadKey();
        }
Пример #7
0
        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");
        }