¿Puede 'ADD' crear un peligro de control mientras se encuentra en la etapa 'MEM'?

1

Imagine que hay una máquina que tiene memoria compartida para datos e instrucciones (lo que significa que puede haber un peligro de control entre las etapas MEM y IF ). ¿Las instrucciones como ADD que no hacen nada durante la etapa MEM pueden causar un peligro de control con otras instrucciones que están en la etapa IF ?

ADD $1, $1, $3 :       IF  ID  EX  MEM WB
SUB $4, $5, $6 :                   IF  ID  EX  MEM WB

En el ejemplo anterior, ¿existe un peligro de control entre la etapa MEM de la instrucción ADD y la etapa IF de la instrucción SUB ?

Editar: Descripción de cada instrucción.

IF  - Instruction Fetch
ID  - Instruction Decode
EX  - Execute
MEM - Memory Access
WB  - Write-Back
    
pregunta Paul Manta

2 respuestas

1

La canalización RISC tradicional con estados Fetch y Mem separados generalmente se adapta a los buses de datos e instrucciones separados (también conocido como "Harvard"), a menudo conectados a cachés de datos e instrucciones separados. El propósito es poder realizar captaciones de instrucciones y accesos de datos simultáneamente, con una simetría agradable: SI para el bus de instrucciones, MEM para el bus de datos.

Si su CPU RISC tiene solo un bus externo, multiplexado para las instrucciones y los datos, las instrucciones de carga o almacenamiento detendrán la parte de extracción e incurrirán en una burbuja en la tubería, de modo que la instrucción costará 2 ciclos. (Un ejemplo antiguo: Cypress 7C601)

Volver a tu pregunta

Una instrucción ADD simple no hace nada en la etapa MEM, no hay peligro de control con un SUB subsiguiente, o carga, o almacén, o lo que sea. Puede haber peligros en los datos, resueltos por estancamiento y / o desvío, si las instrucciones consecutivas usan / dependen de los mismos registros.

    
respondido por el TEMLIB
1

Si la memoria es una memoria de un solo puerto, es decir, no puede leer y escribir (desde / hacia diferentes ubicaciones), IF generalmente no puede ocurrir durante la fase MEM . Este problema se puede abordar de varias maneras:

  • cree una memoria de doble puerto: eso cuesta mucho pero erradica el problema
  • burbujea la tubería : hay más circuitos que determinan si puede ocurrir un peligro de control e insertan algunos retrasos para evitar ese. Eso es algo costoso y difícil de diseñar
  • inserta manualmente un montón de estados de retardo en la tubería. No se necesitan circuitos "inteligentes", se necesitan algunos registros pero es realmente simple. Tenga en cuenta que de esta manera, cada instrucción requerirá dos accesos de memoria, IF y MEM, y eso se convierte en un límite para la velocidad.

En una arquitectura RISC von Neumann, aunque la segunda opción es probablemente la más utilizada: las únicas dos instrucciones que realmente usan el estado MEM son load y sto , por lo que debería estar "burbujeando" la tubería, si no Trivial, bastante fácil.

    
respondido por el Vladimir Cravero

Lea otras preguntas en las etiquetas