Wea Triple
*
* Arquitectura de Computadores.
* Departamento de Informática de Sistemas y Computadores (DISCA)
* Universidad Politécnica de Valencia.
*
* Autor: Sergio Sáez (ssaez@disca.upv.es)
* Pedro López (plopez@gap.upv.es)
*
* Fichero: dlx.cfa
*
* Descripción:
* Contiene ladescripcion de las fases del DLX basico
*
****************************************************************************/
#define dlx_C
/*** Includes **************************************************************/
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
/*** Definiciones Externas *************************************************/
#include"tipos.h"
#include "main.h"
#include "instrucciones.h"
#include "presentacion-html.h"
/*** Funciones Locales *****************************************************/
/***************************************************************
*
* Func: pasar_a_ID_NOP
*
* Desc: La fase IF entrega un NOP a la fase ID al próximo ciclo
***************************************************************/
void pasar_a_ID_NOP (
)
{
// IF_IDn.NPC = ;
IF_IDn.IR.codop = OP_NOP;
IF_IDn.IR.tipo= FormatoR;
IF_IDn.IR.Rfuente1 = 0;
IF_IDn.IR.Rfuente2 = 0;
IF_IDn.IR.Rdestino = 0;
IF_IDn.IR.inmediato = 0;
IF_IDn.iPC = -1;
IF_IDn.orden = -1;
} /* pasar_ID_NOP */
/***************************************************************
*
* Func:pasar_a_EX_NOP
*
* Desc: La fase ID entrega un NOP a la fase EX al próximo ciclo
*
**************************************************************/
void pasar_a_EX_NOP (
)
{
ID_EXn.Ra = 0;
ID_EXn.Rb = 0;
ID_EXn.Imm = 0;
// ID_EXn.NPC = ; no lo toco
ID_EXn.IR.codop = OP_NOP;
ID_EXn.IR.tipo= FormatoR;
ID_EXn.IR.Rfuente1 = 0;
ID_EXn.IR.Rfuente2 = 0;ID_EXn.IR.Rdestino = 0;
ID_EXn.IR.inmediato = 0;
ID_EXn.iPC = -1;
ID_EXn.orden = -1;
} /* pasar_a_EX_NOP */
/***************************************************************
*
* Func: pasar_a_MEM_NOP
*
* Desc: La fase EX entrega un NOP a la fase MEM al próximo ciclo
*
**************************************************************/
void pasar_a_MEM_NOP (
){
EX_MEMn.ALUout = 0;
EX_MEMn.data = 0;
EX_MEMn.cond = 0;
// IF_IDn.NPC = ; no lo toco
EX_MEMn.IR.codop = OP_NOP;
EX_MEMn.IR.tipo= FormatoR;
EX_MEMn.IR.Rfuente1 = 0;
EX_MEMn.IR.Rfuente2 = 0;
EX_MEMn.IR.Rdestino = 0;
EX_MEMn.IR.inmediato = 0;
EX_MEMn.iPC = -1;
EX_MEMn.orden = -1;
} /* pasar_a_MEM_NOP *//***************************************************************
*
* Func: hay_fuente1_ID
*
* Desc: Indica si en la fase ID hay una instrucción que
* tiene Rfte1
*
**************************************************************/
boolean hay_fuente1_ID ()
{
return (
((IF_ID.IR.codop != OP_NOP) &&
(IF_ID.IR.codop != OP_TRAP))
);
} /* hay_fuente1_ID *//***************************************************************
*
* Func: hay_fuente2_ID
*
* Desc: Indica si en la fase ID hay una instrucción que
* tiene Rfte2
*
**************************************************************/
boolean hay_fuente2_ID ()
{
return (
((IF_ID.IR.codop != OP_NOP) &&
(IF_ID.IR.codop != OP_TRAP) &&((IF_ID.IR.tipo == FormatoR) ||
(IF_ID.IR.codop == OP_SW)))
);
} /* hay_fuente2_ID */
/***************************************************************
*
* Func: hay_fuente1_EX
*
* Desc: Indica si en la fase EX hay una instrucción que
* tiene Rfte1
*
**************************************************************/
boolean hay_fuente1_EX ()
{
return (...
Regístrate para leer el documento completo.