//inicializar todos circuitos e fazer as respectivas conexoes de acordo public DataBlock(String[] lines) { this.muxIorD = new MUX(2); this.muxRegDest = new MUX(2); this.muxMemtoReg = new MUX(2); this.muxAluSrcA = new MUX(2); this.muxAluSrcB = new MUX(4); this.muxPCSrc = new MUX(2); this.muxAluZero = new MUX(2); this.A = new NormalReg("A"); this.B = new NormalReg("B"); this.MDR = new NormalReg("MDR"); this.registers = new Registers(); this.instrReg = new IR(); this.memory = new Memory(); this.aluOut = new NormalReg("ULA Saida"); this.alu = new ALU(); this.aluCtrl = new AluControl(); //fill memory this.finalPC = ReadFileRoutine(lines, memory); this.pc = new PC(finalPC); #region instanciando delegates e preenchendo os MUX getPC = pc.GetPCValue; getMDR = MDR.GetRegVal; getA = A.GetRegVal; getB = B.GetRegVal; getAluOut = aluOut.GetRegVal; getRt = instrReg.GetRt; getRd = instrReg.GetRd; getSignExtendedImm = instrReg.GetSignalExtendedImmediate; getSignExtendedShift2Imm = instrReg.GetSignalExtendedShift2Immediate; getAluResult = alu.GetAluResult; getAluZero = alu.GetAluZero; getReverseAluZero = alu.GetReverseAluZero; muxIorD.PlaceEntry(0, getPC); //posicao 0 do mux tem PC muxIorD.PlaceEntry(1, getAluOut); //posicao 1 do mux tem AluOut muxRegDest.PlaceEntry(0, getRt); //posicao 0 do mux tem rt muxRegDest.PlaceEntry(1, getRd); //posicao 1 do mux tem rd muxMemtoReg.PlaceEntry(0, getAluOut); //posicao 0 do mux tem registrador Ula Saida muxMemtoReg.PlaceEntry(1, getMDR); //posicao 1 do mux tem dado do Registrador de dados da Memoria muxAluSrcA.PlaceEntry(0, getPC); //posicao 0 do mux tem PC muxAluSrcA.PlaceEntry(1, getA); //posicao 1 do mux tem valor do registrador A muxAluSrcB.PlaceEntry(0, getB); //posicao 00 do mux tem valor do registrador B muxAluSrcB.PlaceEntry(1, get4); //posicao 01 do mux tem o numero 4 muxAluSrcB.PlaceEntry(2, getSignExtendedImm); //posicao 10 do mux tem os bits de imediato com sinal extendido muxAluSrcB.PlaceEntry(3, getSignExtendedShift2Imm); //posicao 11 do mux tem os bits de imediato com sinal extendido com shift de 2 bits a esquerda muxPCSrc.PlaceEntry(0, getAluResult); //posicao 0 do mux tem saida da Ula muxPCSrc.PlaceEntry(1, getAluOut); //posicao 1 do mux tem valor de Ula Saida muxAluZero.PlaceEntry(0, getAluZero); //posicao 0 indica saida normal, ou seja, BEQ muxAluZero.PlaceEntry(1, getReverseAluZero); //posicao 1 indica inversa, ou seja, BNE #endregion }
/// <summary> /// Place the delegate on the position of index /// </summary> /// <param name="index">position to put the delegate</param> /// <param name="mx">declared delegate</param> public void PlaceEntry(Int32 index, Tools.DelegateMUX mx) => mxEntries[index] = mx;