Exemplo n.º 1
0
        //your code here

        public Memory(int iAddressSize, int iWordSize)
        {
            AddressSize = iAddressSize;
            WordSize    = iWordSize;

            Input   = new WireSet(WordSize);
            Output  = new WireSet(WordSize);
            Address = new WireSet(AddressSize);
            Load    = new Wire();

            //your code here
            demux  = new BitwiseMultiwayDemux(1, iAddressSize);
            mux    = new BitwiseMultiwayMux(iWordSize, iAddressSize);
            loadWs = new WireSet(1);
            loadWs[0].ConnectInput(Load);
            demux.ConnectControl(Address);
            demux.ConnectInput(loadWs);
            MultiBitRegister[] mbr = new MultiBitRegister[(int)Math.Pow(2, iAddressSize)];
            for (int i = 0; i < mbr.Length; i++)
            {
                mbr[i] = new MultiBitRegister(iWordSize);
                mbr[i].ConnectInput(Input);
                mbr[i].Load.ConnectInput(demux.Outputs[i][0]);
                mux.Inputs[i].ConnectInput(mbr[i].Output);
            }
            mux.ConnectControl(Address);
            Output.ConnectInput(mux.Output);
        }
Exemplo n.º 2
0
        public Memory(int iAddressSize, int iWordSize)
        {
            AddressSize = iAddressSize;
            WordSize    = iWordSize;
            int registerNum = (int)Math.Pow(2.0, AddressSize);

            Input   = new WireSet(WordSize);
            Output  = new WireSet(WordSize);
            Address = new WireSet(AddressSize);
            Load    = new Wire();
            WireSet newLoad = new WireSet(1);

            newLoad[0].ConnectInput(Load);
            demux     = new BitwiseMultiwayDemux(1, AddressSize);
            mux       = new BitwiseMultiwayMux(WordSize, AddressSize);
            registers = new MultiBitRegister[registerNum];
            WireSet AddressMirror = new WireSet(AddressSize);

            for (int j = 0; j < AddressSize; j++)
            {
                AddressMirror[j].ConnectInput(Address[AddressSize - 1 - j]);
            }
            demux.ConnectControl(AddressMirror);
            demux.ConnectInput(newLoad);
            for (int i = 0; i < registerNum; i++)
            {
                registers[i] = new MultiBitRegister(WordSize);
                registers[i].ConnectInput(Input);
                registers[i].Load.ConnectInput(demux.Outputs[i][0]);
                mux.ConnectInput(i, registers[i].Output);
            }
            mux.ConnectControl(Address);
            Output.ConnectInput(mux.Output);
        }
Exemplo n.º 3
0
        public override bool TestGate()
        {
            BitwiseMultiwayMux m_localBwmx;

            for (int i = 0; i < Math.Pow(2, Control.Size); i++)
            {
                for (int j = 0; j < Inputs.Length; j++)
                {
                    for (int k = 0; k < Math.Pow(2, Size); k++)
                    {
                        m_localBwmx = new BitwiseMultiwayMux(Size, Control.Size);
                        m_localBwmx.Control.ConnectInput(InitTestVariables(i, Control.Size));
                        m_localBwmx.Inputs[j].ConnectInput(InitTestVariables(k, Size));

                        //for (int p = 0; p < Inputs.Length; p++)
                        //    System.Console.WriteLine("    Testing input" + p + " " + " -> " + WStoString(m_localBwmx.Inputs[p]));

                        //System.Console.WriteLine("    Testing control " + "-> " + WStoString(m_localBwmx.Control));
                        //System.Console.WriteLine("    Testing output " + " -> " + WStoString(m_localBwmx.Output));

                        if (WStoString(m_localBwmx.Output) != WStoString(m_localBwmx.Inputs[
                                                                             Convert.ToInt32(WStoString(m_localBwmx.Control), fromBase: 2)]))
                        {
                            return(false);
                        }
                    }
                }
            }
            return(true);
        }
Exemplo n.º 4
0
        // creating memory component by using array of multi bit register
        // using 2 demux - one for the date input and one for the load input(to know if read/write)
        // using mux for the output
        public Memory(int iAddressSize, int iWordSize)
        {
            AddressSize = iAddressSize;
            WordSize    = iWordSize;

            Input        = new WireSet(WordSize);
            Output       = new WireSet(WordSize);
            Address      = new WireSet(AddressSize);
            Load         = new Wire();
            load_wireset = new WireSet(1);


            memory_cells         = new MultiBitRegister[(int)Math.Pow(2, AddressSize)];
            input_demux          = new BitwiseMultiwayDemux(WordSize, AddressSize);
            input_demux_for_load = new BitwiseMultiwayDemux(1, AddressSize);
            output_mux           = new BitwiseMultiwayMux(WordSize, AddressSize);


            for (int cell = 0; cell < memory_cells.Length; cell++)
            {
                memory_cells[cell] = new MultiBitRegister(WordSize);
            }

            load_wireset[0].ConnectInput(Load);

            input_demux.ConnectControl(Address);
            input_demux_for_load.ConnectControl(Address);
            output_mux.ConnectControl(Address);

            input_demux.ConnectInput(Input);
            input_demux_for_load.ConnectInput(load_wireset);

            for (int cell = 0; cell < memory_cells.Length; cell++)
            {
                memory_cells[cell].Load.ConnectInput(input_demux_for_load.Outputs[cell][0]);
                memory_cells[cell].ConnectInput(input_demux.Outputs[cell]);
                output_mux.Inputs[cell].ConnectInput(memory_cells[cell].Output);
            }

            Output.ConnectInput(output_mux.Output);
        }
Exemplo n.º 5
0
        public Memory(int iAddressSize, int iWordSize)
        {
            AddressSize = iAddressSize;
            WordSize    = iWordSize;

            Input   = new WireSet(WordSize);
            Output  = new WireSet(WordSize);
            Address = new WireSet(AddressSize);
            Load    = new Wire();

            //your code here
            m_rMultiBit = new MultiBitRegister[(int)Math.Pow(2, AddressSize)];

            m_gBWMultiMux = new BitwiseMultiwayMux(WordSize, AddressSize); //output
            m_gBWMultiMux.ConnectControl(Address);
            //connect all the inputs in loop

            m_gBWMultiDemux = new BitwiseMultiwayDemux(1, AddressSize); // Read/Write address
            m_gBWMultiDemux.ConnectControl(Address);
            WireSet connection = new WireSet(1);                        //because BWMultiwayDemux receives WireSet

            connection[0].ConnectInput(Load);
            m_gBWMultiDemux.ConnectInput(connection);
            //connect all the outputs in loop


            for (int i = 0; i < m_rMultiBit.Length; i++)
            {
                m_rMultiBit[i] = new MultiBitRegister(WordSize);                 //init
                m_rMultiBit[i].Load.ConnectInput(m_gBWMultiDemux.Outputs[i][0]); //connect Load from Demux output
                m_rMultiBit[i].ConnectInput(Input);                              // connect input
                m_gBWMultiMux.Inputs[i].ConnectInput(m_rMultiBit[i].Output);     //connect output to Mux
            }

            Output.ConnectInput(m_gBWMultiMux.Output);
        }
Exemplo n.º 6
0
        //your code here

        public Memory(int iAddressSize, int iWordSize)
        {
            AddressSize = iAddressSize;
            WordSize    = iWordSize;

            Input   = new WireSet(WordSize);
            Output  = new WireSet(WordSize);
            Address = new WireSet(AddressSize);
            Load    = new Wire();

            int numOfbits             = (int)Math.Pow(2, AddressSize);
            var mBitwiseMultiwayDemux = new BitwiseMultiwayDemux(1, AddressSize);
            var mBitwiseMultiwayMux   = new BitwiseMultiwayMux(WordSize, AddressSize);
            var mRegisters            = new MultiBitRegister[numOfbits];

            mRegisters[0] = new MultiBitRegister(iWordSize);
            for (int i = 0; i < numOfbits; i++)
            {
                if (i == 0)
                {
                    mBitwiseMultiwayDemux.Input[0].ConnectInput(Load);
                    mBitwiseMultiwayDemux.ConnectControl(Address);

                    mRegisters[0].ConnectInput(Input);
                    mRegisters[0].Load.ConnectInput(mBitwiseMultiwayDemux.Outputs[0][0]);
                    mBitwiseMultiwayMux.ConnectInput(0, mRegisters[0].Output);
                    continue;
                }
                mRegisters[i] = new MultiBitRegister(iWordSize);
                mRegisters[i].ConnectInput(Input);
                mRegisters[i].Load.ConnectInput(mBitwiseMultiwayDemux.Outputs[i][0]);
                mBitwiseMultiwayMux.ConnectInput(i, mRegisters[i].Output);
            }
            mBitwiseMultiwayMux.ConnectControl(Address);
            Output = mBitwiseMultiwayMux.Output;
        }
Exemplo n.º 7
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();
        }
Exemplo n.º 8
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();
        }
Exemplo n.º 9
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");
        }
Exemplo n.º 10
0
        public ALU(int iSize)
        {
            Size      = iSize;
            InputX    = new WireSet(Size);
            InputY    = new WireSet(Size);
            ZeroX     = new Wire();
            ZeroY     = new Wire();
            NotX      = new Wire();
            NotY      = new Wire();
            F         = new Wire();
            NotOutput = new Wire();
            Negative  = new Wire();
            Zero      = new Wire();


            //Create and connect all the internal components
            Output = new WireSet(Size);

            m_wsZero = new WireSet(Size);
            for (int i = 0; i < Size; i++)
            {
                m_wsZero[i].Value = 0;
            }

            m_gZxMux = new BitwiseMultiwayMux(Size, 1);
            m_gZxMux.ConnectInput(0, InputX);
            m_gZxMux.ConnectInput(1, m_wsZero);
            m_gZxMux.Control[0].ConnectInput(ZeroX);

            m_gNxNot = new BitwiseNotGate(Size);
            m_gNxNot.ConnectInput(m_gZxMux.Output);
            m_gNxMux = new BitwiseMultiwayMux(Size, 1);
            m_gNxMux.ConnectInput(0, m_gZxMux.Output);
            m_gNxMux.ConnectInput(1, m_gNxNot.Output);
            m_gNxMux.Control[0].ConnectInput(NotX);

            m_gZyMux = new BitwiseMultiwayMux(Size, 1);
            m_gZyMux.ConnectInput(0, InputY);
            m_gZyMux.ConnectInput(1, m_wsZero);
            m_gZyMux.Control[0].ConnectInput(ZeroY);

            m_gNyNot = new BitwiseNotGate(Size);
            m_gNyNot.ConnectInput(m_gZyMux.Output);
            m_gNyMux = new BitwiseMultiwayMux(Size, 1);
            m_gNyMux.ConnectInput(0, m_gZyMux.Output);
            m_gNyMux.ConnectInput(1, m_gNyNot.Output);
            m_gNyMux.Control[0].ConnectInput(NotY);

            m_gFAdder = new MultiBitAdder(Size);
            m_gFAdder.ConnectInput1(m_gNxMux.Output);
            m_gFAdder.ConnectInput2(m_gNyMux.Output);
            m_gFAnd = new BitwiseAndGate(Size);
            m_gFAnd.ConnectInput1(m_gNxMux.Output);
            m_gFAnd.ConnectInput2(m_gNyMux.Output);
            m_gFMux = new BitwiseMultiwayMux(Size, 1);
            m_gFMux.ConnectInput(0, m_gFAnd.Output);
            m_gFMux.ConnectInput(1, m_gFAdder.Output);
            m_gFMux.Control[0].ConnectInput(F);

            m_gNoNot = new BitwiseNotGate(Size);
            m_gNoNot.ConnectInput(m_gFMux.Output);
            m_gNoMux = new BitwiseMultiwayMux(Size, 1);
            m_gNoMux.ConnectInput(0, m_gFMux.Output);
            m_gNoMux.ConnectInput(1, m_gNoNot.Output);
            m_gNoMux.Control[0].ConnectInput(NotOutput);

            Output.ConnectInput(m_gNoMux.Output);

            m_gZrOr = new MultiBitOrGate(Size);
            m_gZrOr.ConnectInput(Output);
            m_gZrNot = new NotGate();
            m_gZrNot.ConnectInput(m_gZrOr.Output);

            Zero.ConnectInput(m_gZrNot.Output);
            Negative.ConnectInput(Output[Size - 1]);
        }
Exemplo n.º 11
0
Arquivo: Memory.cs Projeto: boaz23/ECS
 private void ConnectReadingMux()
 {
     m_outputMux = new BitwiseMultiwayMux(WordSize, AddressSize);
     m_outputMux.ConnectControl(Address);
     Output.ConnectInput(m_outputMux.Output);
 }