Desde la arquitectura de la CPU 8085, cuando ALU realizó el cálculo, el resultado se regresó al acumulador A en el siguiente borde del reloj. Pero el acumulador A está conectado directamente como entrada ALU, y si el borde del reloj no se elevara lo suficientemente rápido como para causar que A se agregue dos o muchas veces más, sería extremadamente difícil detectar dicho error, tal diseño es muy " frágil "para mí.
A menos que haya un registro adicional dentro de ALU para guardar temporalmente los resultados de ALU.
https://en.wikipedia.org/wiki/Intel_8085#/media/File:Intel_8085_arch.svg
Respuestas:
Como sospechaba @duskwuff, he investigado esto. Para responder a la pregunta, el 8085 tiene dos registros adicionales en la ALU.
El 8085 tiene varios registros "ocultos": un par WZ de 16 bits y dos registros auxiliares ALU de 8 bits: ACT y TMP. WZ es parte del archivo de registro, mientras que ACT, A (acumulador) y TMP se encuentran en el circuito ALU.
Aquí hay un diagrama de cómo funciona la ALU:
El registro ACT tiene varias funciones importantes. Primero, contiene la entrada a la ALU. Esto permite que los resultados de la ALU se vuelvan a escribir en el acumulador sin alterar la entrada, lo que causaría inestabilidad. En segundo lugar, el ACT puede mantener valores constantes (por ejemplo, para aumentar o disminuir, o el ajuste decimal) sin afectar el acumulador. Finalmente, el ACT permite operaciones ALU que no usan el acumulador.
Una consecuencia interesante de la configuración de la ALU del 8085 es que un valor puede cargarse en el acumulador solo después de pasar por la ALU.
Los detalles sobre el conjunto de registros 8085 están aquí y los detalles de la ALU están aquí .
fuente
En los diseños sincrónicos, es una tarea importante del diseñador asegurarse de que tales cosas no sucedan. El registro, que tiene datos "sincronizados", tiene propiedades dinámicas específicas como tiempo de subida del reloj, tiempo de retención del reloj, datos estables antes y después del cambio de señal del reloj. Si se viola el tiempo, no se garantiza el estado resultante.
En su caso particular, ALU está teniendo su retraso de propagación, y para agregar A dos veces debería haber un tiempo hasta que se agregue A nueva a A anterior dentro del sumador y el resultado aparezca en su salida. Lo más probable es que se haya simulado y calculado que tal cosa no sucederá dentro del rango de frecuencia de reloj permitido para el dispositivo. Es por eso que la hoja de datos tiene explícitamente índices de reloj mínimos y máximos. Para 8085A-2 dice:
fuente
El acumulador es el registro de salida de la ALU.
El 8085 tiene un reloj de dos fases. Donde la instrucción de un solo reloj como un NOP tomó 2 ciclos de reloj. Similar al 8088 usado en la PC original de IBM, el 8088 tenía un reloj de cuatro fases de 4Mhz y ejecutaba instrucciones a una velocidad de 1Mhz.
Con el reloj de dos fases, tiene dos ciclos de oscilador para cada ciclo de instrucción.
Internamente, para la sincronización, se puede usar cualquier borde de cualquier reloj. Los relojes están invertidos, por lo que en realidad hay cuatro relojes disponibles para temporizar.
Luego tiene pestillos transparentes que se enganchan en el borde descendente y D-Flip Flops que se enganchan en el borde ascendente del reloj.
Un enclavamiento transparente permite que los datos de entrada se propaguen hacia la salida comenzando en el flanco ascendente del reloj, y los valores se enclavan en el flanco descendente del reloj.
El 8085 tenía muchas opciones para evitar las condiciones de carrera de propagación.
fuente