¿Qué sucede con los registros AVR durante las instrucciones de varios ciclos?

Esta es más una pregunta teórica... (También mi primera en Stack Overflow)

Me pregunto qué sucede con los registros del microcontrolador Atmel AVR (es decir, ATTINY85) durante una instrucción de varios ciclos.

es decir ADIW, se necesitan dos ciclos para agregar un registro inmediato a un registro de dos bytes (palabra).

Me imagino que durante el primer ciclo se opera uno de los bytes, y luego en el siguiente ciclo se opera el otro byte. Pero, ¿este proceso está definido en algún lugar donde pueda leer? ¿Y qué hay de las otras instrucciones multiciclo?

Esencialmente, estoy interesado en el estado del microcontrolador después de cada ciclo individual, incluso dentro de las instrucciones de varios ciclos.

Creo que sería muy difícil poder obtener esta información de alguien que no sea Atmel. En el peor de los casos, sería un secreto comercial; en el mejor de los casos, sería completamente irrelevante a menos que quisiera copiar la MCU.
Ya veo. Gracias Ignacio. Me acabo de dar cuenta de que podía cronometrar manualmente la MCU de forma externa y luego restablecerla durante una instrucción. No estoy seguro de si los registros (SRAM) se inicializan, pero podría valer la pena intentarlo.
Si bien es interesante saberlo, a menos que afecte un comportamiento medible, ni siquiera necesitaría duplicar esto si estuviera tratando de hacer un procesador similar (simulador, núcleo suave fpga, etc.). Presumiblemente, las interrupciones no pueden insertarse en el medio, o si lo hacen, la primera operación no se confirma y termina repitiéndose después de ISR.
@ChrisStratton, de acuerdo. Es más una cuestión teórica de nuestra curiosidad (para un libro de arte conceptual en el que estoy trabajando que incluye una simulación de código que se ejecuta en una MCU). Voy a probar una prueba en la que cronometro manualmente la MCU de forma externa y la restablezco en medio de una instrucción de varios ciclos. Creo que los registros de la máquina seguirán intactos y puedo hacer que la MCU emita sus valores.
Acabo de hacer una prueba de hardware en el estudio y puedo confirmar que ADIWactualiza el registro de resultados inferior después del primer ciclo y el registro de resultados superior después del segundo ciclo. Para hacer esto, marqué manualmente la MCU externamente a través de la salida de otro chip y restablecí la MCU original en medio de la ADIWinstrucción. Al reiniciar, la MCU probó sus registros de resultados inferior y superior y, curiosamente, solo se actualizó el registro de resultados inferior. Si, en cambio, reinicio la MCU después de la ADIWinstrucción completa, se actualizaron los registros de resultados inferior y superior.
Sería razonable suponer que los registros que se espera que actualice la instrucción, cualesquiera que sean, solo serán legibles de manera confiable después de que se complete la instrucción multiciclo. También sería razonable suponer que los registros en los que se supone que la instrucción no debe escribir permanecerán intactos durante toda la instrucción.
No creo que la MCU haga otra cosa que ejecutar la instrucción adiw. Entonces, entre los dos ciclos, es imposible ejecutar otra instrucción. Tal instrucción usa los dos ciclos y luego la MCU ejecuta la siguiente instrucción o sirve la siguiente IRQ.
Publique sus hallazgos aquí como respuesta @Tristan y los votaré a favor

Respuestas (1)

Aquí está mi interpretación:

Para que un uC de 8 bits haga matemáticas de 16 bits, primero tiene que calcular los bits significativos más bajos y luego pasar a los bits significativos más altos, por lo que el primer ciclo agrega 8 bits con un acarreo y luego agrega ese acarreo a los 8 más altos. -bits.

En sentido abstracto, 8 bits no pueden hacer cálculos de 16 bits en una sola instrucción, ya que los resultados se afectan entre sí.

Esto no es necesariamente cierto. Si bien sería un diseño inusual, es muy posible que un microcontrolador con un bus de memoria de 8 bits tenga un sumador de 16 bits internamente, lo que le permite realizar esta adición en un solo ciclo de reloj. Todavía se necesitarían varios ciclos de reloj para leer/escribir un valor de 16 bits, pero podría hacerlo en el orden que quisiera.
Me refiero a la CPU de 8 bits también, no solo a la memoria. Puede corregirme si me equivoco, pero la falta de coincidencia de la CPU y la memoria es extraña para mí, ¿sabe alguna MCU que haga esto?
@duskwuff: No solo es posible que una CPU tenga una ALU interna más ancha que el bus de memoria, sino que realmente se implementó y tuvo éxito comercial: el Motorola 68008 y el Intel 8088 utilizados en la PC IBM original tienen ALU de 16 bits y 8 bits. bit bus de datos, y estoy bastante seguro de que también lo hace el Motorola 6809.