Skip to content

04.ThePipelineWindow

nonodev96 edited this page Jul 2, 2022 · 5 revisions

La ventana del cauce de ejecución (Pipeline)

Como se ha explicado en el manual del DLX, esta ventana representa las cinco etapas que puede encontrarse una instrucción en el microprocesador.

Esto nos permite visualizar que dato se está calculando en cada momento, ver cuánto tiempo va a estar en cada etapa, etc.

Etapa Descripción
IF Unidad de captación de instrucción.
Típicamente referida como la ``unidad de carga'' en terminología moderna.
ID Unidad de descodificación de instrucción.
Esta unidad toma la instrucción del IF, y extrae el opcode y los operandos.
También obtiene los valores en registros si es necesario.
EX Unidad de ejecución.
Ejecuta la instrucción, llamada como ALU en terminología moderna.
MEM Unidad de acceso a memoria.
Obtiene los datos o los escribe para las instrucciones de almacenamiento.
Controlada desde las etapas de ID y EX.
WB WriteBack unit.
Llamada como unidad de almacenamiento en terminología moderna.
Es la encargada de escribir los resultados en los registros de destino.

Hay unas etapas intermedias en la etapa de ejecución (EX), representan el cálculo de datos decimales como divisiones, cálculos de multiplicaciones o sumas, estas etapas son las operaciones en coma flotante IEEE754.

Debemos tener en cuenta la configuración de la máquina, ya que en función de esta configuración podremos tener una unidad o varias.

Inicialización

Ventana del cauce

Ejecución

Ejecución en el cauce

Desarrollo

Ejemplo parcial de los datos que responde el servidor para representar el cauce (Pipeline) en una de sus etapas.

export type TypeStall = "Aborted" | "Stall" | "R-Stall" | "T-Stall" | "W-Stall" | "S-Stall";

export type TypeCycleCell = {
  address:      string;
  addressRow:   number;
  draw:         boolean | TypeStall;
};

export type TypeCycleCellUnit = TypeCycleCell & {
  unit?: number
};

export type TypeArrowCycle = {
  fromAddressRow:   number;
  fromStep:         number;
  toAddressRow:     number;
  toStep:           number;
  color:            number; // hexadecimal
};

export type TypePipeline = {
  IF:       TypeCycleCell;
  ID:       TypeCycleCell;
  intEX:    TypeCycleCell;
  MEM:      TypeCycleCell;
  WB:       TypeCycleCell;
  faddEX:   TypeCycleCellUnit[];
  fmultEX:  TypeCycleCellUnit[];
  fdivEX:   TypeCycleCellUnit[];
  arrows:   TypeArrowCycle[];
};