Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Processor Pipeline Description (Es)
Processor Pipeline Description (Es)
Los Hazards son clasificados como data hazards o control hazards. Un data hazard
ocurre cuando una instrucción trata de leer un registro que todavía no se ha escrito con
anterioridad previa a la instrucción. Un control hazard ocurre cuando la decisión la cual se
buscará no toma el tiempo necesario en el tiempo de búsqueda.
Algunos data hazard son resueltos por forwardings también llamados bypassing un
resultado desde la memoria o la etapa writeback a la instrucción dependiente en la etapa
de ejecución. Para ello se añaden dos multiplexores en frente de la ALU para seleccionar el
operando ya sea del archivo del registro (register file) o de la memoria o de la etapa
writeback( etapa de reescritura )
Stall
The Hazard Unit examines the instruction in the Execute stage. If it is an LDR and its
destination register (WA3E) matches either source operand of the instruction in the Decode
stage (RA1D or RA2D), then that instruction must be stalled in the Decode stage until the
source operand is ready.
When an LDR stall occurs, StallD and StallF are asserted to force the Decode and Fetch
stage pipeline registers to hold their old values. FlushE is also asserted to clear the contents
of the Execute stage pipeline register, introducing a bubble.
Solving Control Hazards
Posibles preguntas:
Procesador pipeline: se crea por medio de la división del procesador de un solo ciclo a 5
módulos o etapas, por lo que ayuda a que 5 instrucciones puedan ser ejecutadas
simultáneamente, una para cada etapa. Lo que pasa es que cada una de las etapas va a
guardar ese pedacito, ese 1/5 de toda la lógica, se dice que la frecuencia del reloj es 5
veces más rápida.
Leer, escribir en la memoria y en los registros, la alu generalmente son las rutinas que
generan los mayores retrasos, por lo que cada una de estas etapas del pipeline ataca esas
ejecuciones que son mas lentas, los cuales son el fetch, el decode, el execute, la memoria y
el writeback. En la etapa del fetch el procesador lee la siguiente instrucción de la memoria.
En la etapa de decode, el procesador lee los registros fuentes del register file y decodifica la
instrucción para producir una señal de control. En la etapa de ejecución, el procesador
trabaja en conjunto con la alu y ejecutan las instrucciones. En la etapa de memoria, el
procesador lee y escribe datos en la memoria y por último en la etapa de writeback, el
procesador escribe un resultado en un registro.
Esto se soluciona con la NOP entre instrucciones de sumas ands, esto permite que la
instrucción que dependa de una anterior, no haga su labor antes de que el valor correcto se
encuentre en el registro.
Hay 2 tipos de Hazard, el datos y el de control. El de datos ocurre cuando una instrucción
trata de leer un registro que no ha sido escrito aun. La de control es cuando aun no se ha
tomado la decisión de por cual instrucción es la siguiente en el fetch durante el tiempo del
fetch. Todo eso se usa para que el procesador se ejecute.
Se adiciona el Hazard que recibe 4 señales del datapath, estas son las que indican que
indican si los registros de origen en la etapa de ejecucion coinciden con los registros de
destino en las etapas de Memoria y Ejecución. La otra señal que recibe es la regwrite desde
la memoria y desde el writeback, y es el encargado de saber el registro de destino donde va
a ser escrito.
Existen casos donde una instrucción tiene 2 ciclos de latencia, esto se da porque la
instrucción dependiente no puede leer el resultado si no hasta 2 ciclos de reloj después, por
lo que entendí, el Hazard no resuelve esto, ahí es cuando aparece el stall en el pipeline que
básicamente retiene la operación hasta que los datos estén disponibles. Si no estoy mal
cuando se hace un stall al pipeline lo que se hace es deshabilitar el registro del pipeline
para que no cambie el contenido y los datos. Entonces cuando una etapa fue stall, las
anteriores también deben ser stall, entonces ahí es donde aparece el flush, el cual borra la
info para que no haya algún tipo de error.
Resumen: data Hazard pasa cuando una instrucción depende del resultado de otra
instrucción que todavía no ha escrito el resultado en el registro en cuestión, el data Hazard
puede ser resuelto si se adelanta el resultado a tiempo pero si no toca es darle con el stall
hasta que el resultado esté habilitado. Control Hazard pasa cuando la decisión de por cual
instrucción va a ser en el fetch aun no se ha tomado, se soluciona si se predice la
instrucción siguiente que va a pasar al fetch, aquí pasan dos cosas, si la predicción es mala,
se hace un flush, y si la predicción es buena se hace un stall
El único cambio del controlador fue colocar los 3 registros que tienen que estar coordinados
con los registros del datapath
El control unit está separado en otro modulo
Las flag están en el condunit son las banderas que se generan cuando hay operaciones de
cualquier cosa,