Na arquitetura da CPU 8085, quando a ALU faz o cálculo, o resultado é retornado ao acumulador A na próxima borda do relógio. Mas o acumulador A é conectado diretamente como entrada da ALU, e se a borda do relógio não aumentasse rápido o suficiente para fazer com que A seja adicionado duas ou mais vezes, seria extremamente difícil detectar esse erro, esse projeto é muito " frágil "para mim.
A menos que haja um registro extra dentro da ALU para salvar temporariamente os resultados da ALU?
https://en.wikipedia.org/wiki/Intel_8085#/media/File:Intel_8085_arch.svg
Respostas:
Como @duskwuff suspeitava, eu olhei para isso. Para responder à pergunta, o 8085 possui dois registros extras na ALU.
O 8085 possui vários registros "ocultos": um par WZ de 16 bits e dois registros auxiliares da ALU de 8 bits: ACT e TMP. WZ faz parte do arquivo de registro, enquanto ACT, A (acumulador) e TMP estão localizados no próprio circuito da ALU.
Aqui está um diagrama de como a ALU funciona:
O registro ACT tem várias funções importantes. Primeiro, ele mantém a entrada na ALU. Isso permite que os resultados da ALU sejam gravados de volta no acumulador sem perturbar a entrada, o que causaria instabilidade. Segundo, o ACT pode manter valores constantes (por exemplo, para aumentar ou diminuir, ou ajuste decimal) sem afetar o acumulador. Por fim, o ACT permite operações de ALU que não usam o acumulador.
Uma conseqüência interessante da configuração da ALU do 8085 é que um valor pode ser carregado no acumulador somente depois de passar pela ALU.
Os detalhes do conjunto de registros 8085 estão aqui e os detalhes da ALU estão aqui .
fonte
Em projetos síncronos, é uma tarefa importante do designer garantir que essas coisas não aconteçam. O registro, que possui dados sendo "sincronizados", possui propriedades dinâmicas específicas, como tempo de aumento do relógio, tempo de espera do relógio, dados estáveis antes e após a alteração do sinal do relógio. Se o tempo for violado, o estado resultante não será garantido.
No seu caso particular, a ALU está tendo seu atraso de propagação e, para adicionar A duas vezes, deve haver um tempo até que um novo A seja adicionado ao A anterior no somador e o resultado apareça na saída. Provavelmente foi simulado e calculado que tal coisa não acontecerá dentro da faixa de freqüência de relógio permitida definida para o dispositivo. É por isso que a folha de dados tem explicitamente classificações mínimas e máximas de clock. Para 8085A-2, diz:
fonte
O acumulador é o registro de saída da ALU.
O 8085 possui um relógio de duas fases. Onde a instrução de relógio único como um NOP levou 2 ciclos de relógio. Semelhante ao 8088 usado no IBM PC original, o 8088 tinha um relógio de quatro fases de 4 MHz e executou instruções a uma taxa de 1 MHz.
Com o relógio de duas fases, você tem dois ciclos de oscilador para cada ciclo de instrução.
Internamente, para cronometrar, qualquer borda de qualquer relógio pode ser usada. Os relógios são invertidos e, na verdade, existem quatro disponíveis para cronometrar.
Então você tem trincos transparentes que travam na borda descendente e D-Flip Flops que travam na borda ascendente do relógio.
Uma trava transparente permite que os dados de entrada se propaguem até a saída, começando na borda ascendente do relógio, e os valores estão trancados na borda descendente do relógio.
O 8085 tinha muitas opções quando se tratava de evitar condições de corrida de propagação.
fonte