コード例 #1
0
        //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
        }
コード例 #2
0
ファイル: MUX.cs プロジェクト: MarceloHeredia/MipsSimulator
 /// <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;