Pregunta

Había un problema que se ha preguntado sobre la implementación de un byte de carga en un solo ciclo de camino de datos sin tener que cambiar la memoria de datos, y la solución fue algo más adelante.

alt text http://img214.imageshack.us/img214/7107/99897101. jpg

  

Esto es en realidad bastante realista   pregunta; la mayoría de los sistemas de memoria son   completamente basado en la palabra, e individual   bytes normalmente sólo se tratan   dentro del procesador. Cuando vea una   “Error de bus” en muchos ordenadores, este   a menudo significa que el procesador intentó   para acceder a una dirección de memoria que era   No correctamente alineados por palabras, y el   sistema de memoria produce una excepción.   De todos modos, porque las direcciones de byte poder   no puede ser un múltiplo de 4, que no puede pasar   a la memoria directamente. Sin embargo, nos   todavía se puede conseguir en cualquier byte, porque   cada byte se puede encontrar dentro de algún   palabra, palabra y todas las direcciones están   múltiplos de 4. Así que lo primero que   hacer es asegurarnos de que tenemos el derecho   palabra. Si tomamos las altas de 30 bits   la dirección (es decir, ALUresult [31-2])   y combinarlos con dos bits a 0   el extremo inferior (esto es lo que la “izquierda   cambiar 2” unidad está haciendo en realidad), que   tener la dirección de byte de la palabra que   contiene el byte deseado. Esto es   simplemente propia dirección del byte, redondeado   abajo a un múltiplo de 4. Este cambio   medios que LW ahora también ronda   direcciones hacia abajo para múltiplos de 4, pero   Eso está bien, ya que las direcciones no alineados   no funcionaría para LW todos modos con este   unidad de memoria. OK, ahora tenemos los datos   volver palabra de la memoria. ¿Cómo podemos llegar   el byte que queremos salir de ella? Bien,   en cuenta que el byte del byte de offset   dentro de la palabra simplemente viene dado por la   de orden inferior 2 bits de los bytes de   dirección. Por lo tanto, simplemente usamos los 2   bits para seleccionar el correspondiente byte   de la palabra mediante un multiplexor. Nota la   utilizar de numeración de bytes ascendente hacia la izquierda, como se   es apropiado para MIPS. Luego, nosotros   que cero extender el byte a 32   los bits (es decir, simplemente combinarla con 24   ceros en su extremo superior), debido a que la   Especifica problemas para hacerlo. Actualmente,   este fue un pequeño error en el   pregunta: en realidad, el LBU   de instrucciones cero extiende el byte, pero   lb de inicio de sesión que se extiende. Oh bien.   Por último, tenemos que ampliar el   MemtoReg controlado mux para aceptar una   nueva entrada: el byte cero extendido por   el caso lb. El control MemtoReg   señal debe ser ampliado a 2 bits. los   original de 0 y 1 a 00 casos el cambio   y 01, respectivamente, y se añade un nuevo   caso 10 que sólo se utiliza en el caso   de lb.

No acabo de entender realmente cómo esto funciona incluso después de leer la explicación, sobre todo acerca de desplazamiento a la izquierda por el resultado ALU 2 daría la dirección de byte ... ¿cómo es esto posible ?? por lo que si quisiera cargar una palabra medio entonces me gustaría hacer una desviación a la izquierda y me gustaría obtener la dirección de la palabra medio ?? lo que sería una forma mejor de hacer bytes de carga, la carga media palabra mediante la modificación de la memoria de datos? (La pregunta anterior impone limitaciones que no podemos modificar la memoria de datos)

¿Fue útil?

Solución

El autor original simplemente parece ser la adición de un multiplexor de bytes de los datos de 32 bits se leen de la memoria. Esta memoria permite que un 32-bit plena carga alineado de forma natural (instrucción lw) y el multiplexor byte adicional y la extensión cero permite para obtener instrucciones de bytes de carga, así (instrucción lbu).

El desplazamiento a la izquierda del resultado ALU proporciona una dirección de palabra, no una dirección de byte, y cuentas para el desplazamiento a la derecha implícita por las dos de la señal de enrutamiento. El resultado final es simplemente los dos inferiores bits del resultado ALU ser enmascarados (reducidos a cero) antes de ser enviado a la memoria. Los dos bits menos significativos del valor de ALU se alimentan aguas abajo de la memoria al multiplexor de bytes, permitiendo la palabra de memoria para leer bytes arbitrarias.

No hay soporte directo en la lógica mostrada para medias palabras de carga (16-bits), simplemente bytes y palabras llenas de 32 bits. Se podría, sin embargo, modificar fácilmente el direccionamiento de byte lógica a las palabras de apoyo en lugar de bytes (o incluso ambos) usando un enfoque similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top