-
Notifications
You must be signed in to change notification settings - Fork 0
00.TheExecutionOfInstructions
Para el repertorio de instrucciones del DLX (sin incluir las operaciones de punto flotante), todas las instrucciones se pueden dividir en cinco simples etapas (fetch, decode, execute, memory-access, and write-result).
Pipe | Etapa |
---|---|
Fetch | Captación |
Decode | Decodificación |
Execute | Ejecución |
Memory-Access | Acceso a memoria |
Write-Result | Escritura en disco |
Estas etapas coinciden con el cauce de ejecución (Pipeline) del DLX.
La siguiente tabla muestra los eventos en cada estado del los núcleos en el cauce.
Stage | Alu Instruction | Load or store instruction | Branch instruction |
---|---|---|---|
IF | IMAR ← PC IR ← Mem[IMAR] PC ← PC + 4 | IMAR ← PC IR ← Mem[IMAR] PC ← PC + 4 | IMAR ← PC IR ← Mem[IMAR] PC ← PC + 4 |
ID | A ← Rs1 B ← Rs2 | A ← Rs1 B ← Rs2 | A ← Rs1 B ← Rs2 BTA ← PC + offset if (Rs1 op 0) PC ← BTA |
EX | ALU output ← A op B or ALU output ← A op immediate | DMAR ← A + immediate SDR ← B |
|
MEM | LDR ← Mem[DMAR] or Mem[DMAR] ← SDR | ||
WB | Rd <- ALU output | Rd ← LDR |
Los riesgos estructurales surgen de conflictos de recursos cuando el hardware no puede soportar todas las combinaciones posibles de instrucciones en superposición simultánea.
Los riesgos de datos surgen cuando una instrucción depende de los resultados de una instrucción anterior de una manera que queda expuesta por la superposición de instrucciones en el cauce. Datos los riesgos pueden clasificarse en uno de tres tipos, según el orden de los accesos de lectura y escritura en las instrucciones. Considere dos instrucciones / i / j /
- RAW (read after write): j intenta leer una fuente antes i la escribe, asi j incorrectamente compensa el valor anterior
- WAR (write after read): j intenta escribir un destino antes de que i lo lea, por lo que i obtiene incorrectamente el nuevo valor. Esto no puede suceder en WinDLX porque todas las lecturas son tempranos en ID y todas las escrituras son tardías (en WB). Este peligro ocurre cuando hay algunas instrucciones que escriben resultados antes en la línea de instrucciones, y otras instrucciones que leen una fuente alteran una escritura o una instrucción más adelante en la canalización (por ejemplo, direccionamiento de incremento automático).
- WAW (write after write): j intenta escribir un operando antes de que sea escrito por i. Las escrituras terminan siendo realizadas en el orden incorrecto, dejando el valor escrito por i en lugar del valor escrito por j en el destino. Este peligro está presente solo en tuberías que escriben en más de una etapa de tubería. La canalización DLX escribe un registrarse únicamente en WB y evita esta clase de peligros para instrucciones enteras. Este peligro puede ocurrir con instrucciones de etapa de punto flotante.
Los peligros de control surgen de la gestión de ramas y otras instrucciones que cambian el PC (Program Counter). Si la instrucción i es una rama tomada, entonces el PC normalmente no cambia hasta el final de la etapa ID.
Los adelantamientos (también llamado derivación o cortocircuito) es una técnica de hardware simple para reducir las penalizaciones causadas por los riesgos de datos.
Esta técnica funciona de la siguiente manera:
El resultado de ALU siempre se devuelve a los pestillos de entrada de ALU. Si el hardware de reenvío detecta que la operación ALU anterior ha escrito el registro correspondiente a una fuente para la operación ALU actual, la lógica de control selecciona el resultado reenviado como la entrada ALU en lugar del valor leído del archivo de registro.
En DLX, las trampas se retrasan usando paradas hasta que no haya instrucciones previas en proceso.
Eso se realiza para evitar conflictos con otras instrucciones.