3 votos

¿Cómo puedo solucionar el retardo entre la instrucción y el contador de programa?

Estoy diseñando el procesador MIPS, esto incluye Memoria de Datos y Memoria de Instrucción para pruebas. Tuve un problema con la síntesis IM cubierto en esta pregunta ( ¿Cómo crear una memoria de instrucciones sintetizable en SystemVerilog? ) y después de reescribirlo como se aconseja (ff con un case declaración) se produjo otro problema.

El problema: La inserción en la CPU tiene un ciclo de retardo desde el Contador de Programa. Por lo tanto, cuando la instrucción de ramificación (número i ), el contador de programa ya está ( i+1 ) y luego venga instr ( i+1 ) y PC es PC_rama . ¿Cómo puedo solucionarlo? El retardo es causado por este ff en IM. Código y formas de onda están por debajo.

El código:

always_ff @(posedge clk) begin
case (addr)      
        32'd0 : rom_ff <= 32'h2408000F; // a = F
        32'd1 : rom_ff <= 32'h240A0000; // res = 0

        32'd2 : rom_ff <= 32'h01485021; // (*) res = res + a
        32'd3 : rom_ff <= 32'h2508FFFF; // a = a - 1

        32'd4 : rom_ff <= 32'h1500FFFD; // if (a != 0) goto (*)
        32'd5 : rom_ff <= 32'hAC0A0ADD; 
        default : rom_ff <= 32'h0;
    endcase
end

La forma de onda de las señales de la CPU: enter image description here

7voto

Ted Puntos 13

Lo que te has encontrado ahí son los problemas que conlleva canalización de instrucciones . Asumo que vas a sintetizar tu procesador para ejecutarlo en una FPGA en algún momento, por lo que eliminar el registro entre la memoria de instrucciones y el resto de la CPU no es tristemente una opción.

Para solucionarlo, tienes tres opciones.

  • Ignora el problema. Al fin y al cabo, tu procesador sigue comportándose de forma determinista: el único problema es que ejecutará una instrucción adicional después de una bifurcación. Esto se llama ranura de retardo de rama lo que significa que la instrucción que viene después de una bifurcación se ejecutará como si en realidad estuviera antes de la bifurcación. Muchos procesadores tienen este tipo de ranura de retardo y los compiladores pueden manejarlos sin problemas. Los primeros procesadores MIPS también tenían ranuras de retardo.
  • Incondicionalmente paralizar el oleoducto después de buscar una rama. Esto significa que se detiene el contador de programa durante un ciclo y se inserta un NOP en la tubería cada vez que se encuentra una rama, lo que efectivamente oculta la ranura de retardo.
  • Vacía la tubería cuando se toma una bifurcación. Esto significa que el procesador sigue ejecutando el flujo de instrucciones normalmente hasta que detecta que tiene que saltar. En ese momento, desecha todas las instrucciones posteriores al salto que ya ha obtenido. En tu caso, sólo habría una instrucción que desechar.

También puede consultar cómo se organizan las tuberías RISC clásicas y qué es un peligro en una tubería . Una vez que implementes los accesos a memoria en tu procesador, es posible que también te encuentres con peligros causados por que los datos cargados desde la memoria no estén disponibles con la suficiente rapidez. Puedes resolver estos problemas de forma similar, ya sea deteniendo el pipeline o aceptando que tienes las llamadas ranuras de retardo de carga, lo que significa que los datos cargados desde la memoria no están disponibles inmediatamente para la instrucción que sigue a la carga. Algunos procesadores también tienen este tipo de retardo, aunque es menos común que el retardo de bifurcación.

3voto

Shashank V M Puntos 7
  • Otra buena opción es utilizar predicción de ramas . Hay muchos algoritmos de predicción de ramas que puedes investigar. Muchos procesadores modernos utilizan la predicción de ramas. Si la rama predicha es la correcta, ganas y ahorras ciclos. Si la rama predicha es la incorrecta, tienes que borrar los datos.

  • Ejecución fuera de orden puede utilizarse para mantener la CPU ocupada. Con esta técnica se evitan muchos ciclos ociosos/desperdiciados. El orden de ejecución de las instrucciones no es el original en la ejecución fuera de orden.

Más información:

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X