Source: mipscpu.h


Annotated List
Files
Globals
Hierarchy
Index
/***************************************************************************
                          mipscpu.h  -  description
                             -------------------
    begin                : Thu Nov 23 2000
    copyright            : (C) 2000 by Jose Maria Requena Lopez
    email                : jmrequena@larural.es
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef MIPSCPU_H
#define MIPSCPU_H



//// Archivos especificos de este proyecto

#include "mipscontrol.h"
  										


class MipsCPU {
public: 
	MipsCPU(int iteracion,int ciclo_reloj);   //Constructor
	~MipsCPU();  															//Destructor

	int iter;
	int ciclo;

  //Elementos funcionales

  FR_32x32 					regs;    			//Archivo de Registros
  REG_32   					pc;		   			//Contador de programa
	ALU_32BIT_CLA 		pcAlu;	 			//Sumador de la direccion de PC=PC+4
  ALU_32BIT_CLA 		addrAlu; 			//Sumadro de calculo de nueva direccion 	
  ALU_32BIT_CLA 		alu;		 			//Unidad arimetico-logica principal
  ALU_CONTROL   		aluControl; 	//Control de la ALU
  MipsMuxBubble			pcSourceMux;	//Multiplexor de fuente datos para PC
  MipsMuxBubble			regDstMux;		//Multiplexor de registro destino
  MipsMuxBubble			aluSrcMux;		//Multiplexor de fuente de datos para la ALU
  MipsMuxBubble  		memToRegMux;	//Multiplexor de memoria a registro
		
  AND 							branchAnd;		//Y logico de instrucciones de salto
	AND								PCWriteAnd;		//AND de la salida del bubbleUnit con el reloj
	AND								IFIDWriteAnd;	//AND de la salida del bubleUnit con el reloj
	OR								RegWriteOr;		//OR del RegWrite con la seņal de reloj
  MipsControl				control;			//Unidad de control de la CPU
	MipSignExtender   signExt;			//Extendedor de signo 16 - 32
  MipsLeftShifter		leftShift;		//Desplazamiento a la izquierda 2 posiciones
	MipsBubbleUnit		bubbleUnit;	  //Unidad de detencion de riesgos
	MipsMuxBubble			muxBubble;		//Selector de la salida del control y la unidad de
																	//detencion de riesgos

  ///Registros de segmentacion

  REG_32						iFiD[2];		  		//Registro IF_ID
  REG_32						iDeX[4];					//Registro ID_EX
  REG_32						eXmeM[3];		  		//Registro EX_MEM
  REG_32						meMwB[2];					//Registro MEM_WB
  REG_8							zeroRegDstReg;	  //Registro de 8 bits para guardar la salida cero,
															    		//y el valor de Registro-destino en el registro
																			//EX_MEM.Se usaran los 6 bits de orden inferior
																			//El Zero de la Alu es el LSB
  REG_8							regDstReg;				//Registro de 8 bits para guardar el valor de
																			//Registro-destino en el registro MEM_WB
																			//Analogamente se usaran los 5 bits de orden inferior
	REG_16						IDEXRegsLow;			//Registro para guardar los 10 bits de las dos direcciones
																			//de registros en las instrucciones aritmeticos logicas o
																			//de carga
	
  //Extension de los registros de segmentacion para
	//guardar las seņales de control

   REG_16						extEx;	
   REG_8						extMem;
 	 REG_4						extWb;

   //Las seņales de control se propagaran a traves de estos registros de
	 //tal manera que siempre	tendremos esta distribucion de seņales-bit
   /*
     ETAPA ID_EX-------------Registro extEx----------------------------

      AluSrc 		0
      AluOp  		1-2
  		RegDst 		3
			MemWrite  4
			MemRead   5
			Branch    6
			MemToReg  7
			RegWrite  8

  	 ETAPA EX_MEM-------------Registro extMem--------------------------

			MemWrite  0
			MemRead   1
			Branch    2
			MemToReg  3
			RegWrite  4


		 ETAPA MEM_WB-------------Registro extWb---------------------------
		
			MemToReg  0
			RegWrite  1


   */

   ////Seņales de control

		WIRE aluSrc;
		WIRE aluOp1;	
		WIRE aluOp0;
		WIRE RegDst;
		WIRE memRead;
		WIRE memWrite;
		WIRE branch;
		WIRE memToReg;
		WIRE RegWrite;

		///Seņales de detencion de la segmentacion

		WIRE PCWrite;
		WIRE IFIDWrite;
		WIRE stopControl;
		WIRE controlBubble[9];	
	  WIRE zeroBubble;

		

  ///Conexiones de las extensiones de control de los registros de segmentacion	

		WIRE control_to_idex[9];
		WIRE idex_to_exmem[5];
    WIRE exmem_to_memwb[2];

  //Resto de conexiones

   WIRE a[32],b[32],c[32],d[32],e[32],f[32],g,h[32],i[32],j[32],
				k[5],l[5],m[5],n[5],o[5],p[32],q[32],r[32],s[32],t[32],u[32],
				w[32],x[32],y[2],z[32],zero,aa[32],bb,cc[32],dd[32],ee[32],ff[32],gg[32],hh[32],
				ii,jj,kk,bnegate;

	 //Conexiones usadas como buffer a registros de tamaņo sobrante del bus real
	 //EJ:extensiones de control donde se usan 9 bits pero se usa un registro de 16 bits	

	 WIRE addr0[5];
   WIRE addr1[5];	
	 WIRE addr3[16];
   WIRE addr4[5];
	 WIRE addr5[16];
	 WIRE addr6[16];
 	 WIRE addr7[16],addr8[16];
	 WIRE addr9[6];
	 WIRE addr11[8],addr12[8];
   WIRE addr13[8];
   WIRE addr14[8];
   WIRE addr15[8];
	 WIRE addr16[8];
	 WIRE addr17[4],addr18[4];

  void run(WIRE& clock,WIRE DataAddr[32],
					 WIRE DataIn[32],WIRE DataOut[32],
					 WIRE Ins[32],WIRE InsAddr[32],
					 WIRE& RAMWrite,WIRE& RAMRead,bool *end);

};

#endif

Generated by: root@localhost.localdomain on Sat Dec 2 02:26:22 200.