public MultiBitAdder(int iSize) { Size = iSize; Input1 = new WireSet(Size); Input2 = new WireSet(Size); Output = new WireSet(Size); //your code here Overflow = new Wire(); var firstAdder = new HalfAdder(); m_firstAdder = firstAdder; firstAdder.ConnectInput1(Input1[0]); firstAdder.ConnectInput2(Input2[0]); Output[0].ConnectInput(firstAdder.Output); var prevCout = firstAdder.CarryOutput; m_fullAdders = new FullAdder[iSize - 1]; for (int i = 1; i < iSize; i++) { var adder = new FullAdder(); m_fullAdders[i - 1] = adder; adder.ConnectInput1(Input1[i]); adder.ConnectInput2(Input2[i]); adder.CarryInput.ConnectInput(prevCout); Output[i].ConnectInput(adder.Output); prevCout = adder.CarryOutput; } Overflow.ConnectInput(prevCout); }
public MultiBitAdder(int iSize) { Size = iSize; Input1 = new WireSet(Size); Input2 = new WireSet(Size); Output = new WireSet(Size); Overflow = new Wire(); full1 = new FullAdder(); full1.ConnectInput1(Input1[0]); full1.ConnectInput2(Input2[0]); Output[0].ConnectInput(full1.Output); for (int i = 1; i < Input1.Size; i++) { Wire temp_S = full1.Output; Wire temp_C = full1.CarryOutput; full1 = new FullAdder(); full1.CarryInput.ConnectInput(temp_C); full1.ConnectInput1(Input1[i]); full1.ConnectInput2(Input2[i]); Output[i].ConnectInput(full1.Output); } Overflow.ConnectInput(full1.CarryOutput); // updating the overflow. }
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 //init the muxes Zx = new BitwiseMux(iSize); Zy = new BitwiseMux(iSize); nX = new BitwiseMux(iSize); nY = new BitwiseMux(iSize); f = new BitwiseMux(iSize); nO = new BitwiseMux(iSize); notX = new BitwiseNotGate(iSize); notY = new BitwiseNotGate(iSize); notOutput = new BitwiseNotGate(iSize); and = new BitwiseAndGate(iSize); fullAdder = new FullAdder(); WireSet zeros = new WireSet(iSize); for (int i = 0; i < zeros.Size; i++) { zeros[i].ConnectInput(Zero); } Zx.ConnectInput1(InputX); Zx.ConnectInput2(zeros); Zx.ConnectControl(ZeroX); /*for (int i = 0; i < zeros.Size; i++) * { * zeros[i].ConnectInput(Zero); * }*/ Zy.ConnectInput1(InputY); Zy.ConnectInput2(zeros); Zy.ConnectControl(ZeroY); nX.ConnectInput1(Zx.Output); notX.ConnectInput(Zx.Output); nX.ConnectInput2(notX.Output); nX.ConnectControl(NotX); nY.ConnectInput1(Zy.Output); notY.ConnectInput(Zy.Output); nY.ConnectInput2(notY.Output); nY.ConnectControl(NotY); and.ConnectInput1(nX.Output); and.ConnectInput2(nY.Output); WireSet addResult = new WireSet(iSize); fullAdder.ConnectInput1(nX.Output[0]); fullAdder.ConnectInput2(nY.Output[0]); Wire Co = fullAdder.CarryOutput; addResult[0].ConnectInput(fullAdder.Output); for (int i = 1; i < iSize; i++) { fullAdder = new FullAdder(); fullAdder.ConnectInput1(nX.Output[i]); fullAdder.ConnectInput2(nY.Output[i]); fullAdder.CarryInput.ConnectInput(Co); Co = new Wire(); Co.ConnectInput(fullAdder.CarryOutput); addResult[i].ConnectInput(fullAdder.Output); } f.ConnectInput1(and.Output); f.ConnectInput2(addResult); f.ConnectControl(F); nO.ConnectInput1(f.Output); notOutput.ConnectInput(f.Output); nO.ConnectInput2(notOutput.Output); nO.ConnectControl(NotOutput); Output = nO.Output; }