//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); }
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); }
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); }
// 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); }
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); }
//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; }
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"); }
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]); }
private void ConnectReadingMux() { m_outputMux = new BitwiseMultiwayMux(WordSize, AddressSize); m_outputMux.ConnectControl(Address); Output.ConnectInput(m_outputMux.Output); }