¿Una ALU siempre agrega y sub, pero solo devuelve uno de los resultados?

1

Pregunta bastante simple. ¿Una ALU interna siempre realiza múltiples operaciones como agregar, sub, div, mul, ... y simplemente tiene que especificar qué resultado desea devolver? Me dijeron que hace eso, pero no pude encontrar pruebas de que eso fuera correcto. Aunque encontré algunos gráficos que contienen un multiplexor que, según mi entendimiento, tiene básicamente una salida y varias entradas y al configurar algunas entradas especiales, puede canalizar la entrada a la salida. Así que podría ser eso, pero no sé lo suficiente para entenderlo completamente.

Me estoy preguntando específicamente sobre la ALU de la arquitectura 8085 en caso de que sea especial, pero también me gustaría saber sobre otras ALU si existen diferentes.

    
pregunta Forivin

5 respuestas

2

Busque la edad del 8085. Se remonta a la época en que cada parte de un circuito se optimizaba a mano, y el diseño de la mano con cinta y cuchilla de afeitar era aún común (aunque probablemente Intel estaba usando sistemas CAD). Por lo tanto, se habría diseñado para minimizar agresivamente el número de puertas utilizadas. Y como dice Tom, puedes sumar y restar usando el mismo circuito con un poco de cuidado, así que creo que eso te da tu respuesta.

Del comentario de GBulmer:

  

¿Puede ver una manera de producir resultados múltiples (por ejemplo, agregar y   restar) simultáneamente, y seleccione la respuesta correcta con menos   ¿Puertas (o transistores) que la lógica que produce solo un resultado?

Personalmente, no puedo. Si produce ambas respuestas, necesita lógica adicional en forma de multiplexores para seleccionar la que desea.

Ahora no voy a ejecutar el experimento, pero sospecho que si escribe una ALU en VHDL, que sigue este enfoque, una herramienta de síntesis moderna pasará mucho tiempo (varios segundos) y la optimizará hasta algo cercano a la versión optimizada a mano.

Para probar esta hipótesis, genere A + B, A-B y un multiplexor 2: 1 como módulos separados, sintetícelos por separado y tenga en cuenta los recursos. Luego, enróllelos en un solo diseño y vuelva a ejecutar la síntesis (es posible que deba habilitar las optimizaciones, "optimizar para el área" y "aplanar la jerarquía"). El último será más pequeño: no sé qué tan cerca está de una versión minimizada a mano: ¡el desafío está establecido si alguien quiere agregar otra respuesta!

    
respondido por el Brian Drummond
2

La ALU del 8085 realiza solo la operación que solicita, utilizando una colección de puertas algo inescrutable. En particular, el 8085 (y todos los otros procesadores que he diseñado por ingeniería inversa) realizan la resta utilizando la adición de complemento de 2. Es decir, invierten el segundo argumento y luego realizan una adición en él. Sería un poco extraño usar circuitos separados para sumar y restar.

Para responder a su pregunta más general, la mayoría de los primeros procesadores que he examinado (4004, 8008, 8085, Z-80, ARM1) no usan multiplexores para seleccionar la operación de ALU, pero realizan solo la operación deseada. Una excepción es el 6502, que usa un multiplexor para seleccionar entre AND, XOR, shift-right, OR y SUM. (Shift-left, restar y comparar se hacen usando SUM.)

Para más de lo que quería saber sobre el 8085 ALU, consulte mi artículo . Aquí hay un diagrama que muestra un bit del circuito ALU del 8085. Observe el multiplexor al frente (es decir, en la parte inferior) que selecciona el argumento X (para la suma) o el argumento negado X (para la resta). Los blobs de puertas en el medio ejecutan AND, OR, XOR o SUM en función de las entradas select_op1 y select_op2. Tenga en cuenta que solo se realiza una operación.

    
respondido por el Ken Shirriff
1

Hay una serie de instrucciones diferentes en un <85 href="http://elearning.tukenya.ac.ke/pluginfile.php/14951/mod_resource/content/1/8085.InstructionSet.full-alphabetical.pdf"> diferente. conjunto de instrucciones para sumas y restas de 8 bits (y ninguna para multiplicar, es un procesador muy primitivo). Solo hay un resultado de un byte (más algunos indicadores) para tales operaciones.

Si está definiendo su propia ALU, ciertamente puede hacer que haga lo que quiera, dentro de los recursos de lo que sea que esté implementando (un FPGA o lo que sea), pero hay poca necesidad de tales cosas en la mayoría de los procesadores pequeños. De antemano, no puedo pensar en una que proporcione varias respuestas a la vez (sin contar los multiplicados que tienen un resultado más amplio que los operandos), sin embargo, hay algunas que realizan múltiples operaciones, como la acumulación múltiple (una multiplicación de dos) Números, seguido de un agregado de los resultados a otro registro) operación que se usa a menudo en implementaciones de filtros.

    
respondido por el Spehro Pefhany
1

No puedo darte detalles sobre la arquitectura 8085, pero en general no tiene sentido tener todas las funciones implementadas en paralelo. Por ejemplo, tome una ALU simple que tenga solo instrucciones ADD, SUB y NEG. También tenga en cuenta que la resta A - B no es otra cosa que agregar el valor negado de B: A - B = A + (-B). Eso significa que la suma y la resta se pueden hacer en el mismo circuito sumador, simplemente activando una lógica de negación frente a una de las entradas. A continuación, se puede usar la misma lógica de negación para la instrucción NEG, forzando A = 0. En total, esta ALU solo necesita un sumador y una negación para cumplir las tres operaciones, ahorrando así un espacio costoso en la matriz de silicio.

    
respondido por el asdfex
0

Esto es muy específico de la implementación, pero generalmente no es correcto.

Una resta ALU (X - Y) en una implementación típica es la siguiente: -Dos cálculos de complemento realizados en el segundo número (Y), dando (-Y) -Adición del primer número y la salida del complemento de dos (X + (- Y))

Algunas implementaciones tendrán una unidad de sustracción además de la unidad de adición principal, pero es más común tener una sola unidad de suma que se usa tanto para la suma como para la resta.

La multiplicación y la división son más complejas, pero fundamentalmente tienen algunas funciones que se superponen, por lo que muchas implementaciones tendrán una unidad capaz de hacer cualquiera de las dos.

    
respondido por el Tom Brendlinger

Lea otras preguntas en las etiquetas