# Lógica sequencial

Na teoria de circuitos digitais, lógica sequencial é um tipo de circuito lógico, cujo resultados dependem não apenas do valor atual de seus sinais de entradas, mas de seu histórico de entradas anteriores. Isto contrasta com a lógica combinatória, cuja saídas dependem unicamente da das entradas atuais. Isso é, a lógica sequencial tem (memória de) estados, enquanto lógica combinatória não tem. Ou, em outras palavras, lógica sequencial é a lógica combinatória com memória.
A lógica sequencial é usada para construir máquinas de estado finitas, um bloco básico na construção de todos circuitos digitais, e também de circuitos de memória e outros dispositivos. Praticamente todos circuitos em dispositivos digitais práticos são uma mistura da utilização de lógica combinatória e sequencial.
Circuitos lógicos sequenciais digitais são divididos em dois tipos: de lógica síncrona ou de lógica assíncrona. Em circuitos sequenciais síncronos, o estado do dispositivo muda somente em intervalos discretos de acordo com os sinais de relógio. Em circuitos sequenciais assíncronos, o estado do dispositivo pode mudar a qualquer momento de acordo com as entradas mudando.

## Lógica Sequencial Síncrona

Quase toda lógica sequencial dos dias de hoje é síncrona. Em circuitos síncronos, um oscilador eletrónico, chamado de sinal de relógio, gera uma sequência repetida de pulsos chamados de sinais de relógio que são distribuídos para todos os elementos de memória no circuito. O elemento básico na memória na lógica sequencial é o flip-flop. A saída de cada flip-flop só muda quando ativada por um pulso do relógio, então qualquer mudança nos sinais lógicos através do circuitos começam ao mesmo tempo, em intervalos regulares e sincronizados pelo sinal de relógio.
As saídas de todos os elementos de memória (flip-flop) no circuito em qualquer dado momento, a data binária que eles contêm, são chamados de estados de um circuito. O estado de um circuito síncrono só muda em pulsos do relógio. Em cada ciclo, o próximo estado é determinado pelo estado atual e o valor da entrada quando cada pulso do relógio ocorre.
A maior vantagem da lógica síncrona é a sua simplicidade. As portas lógicas que executam as operações nos dados requerem uma quantidade finita de tempo para responder a mudanças em suas entradas. Isso é chamado de ||atraso|propagação . O intervalo entre os pulsos de relógio deve ser longo o suficiente para que todas as portas lógicas tenham tempo para responder às mudanças e suas saídas se "estabeleçam" em valores lógicos estáveis, antes que o próximo pulso de relógio ocorra. Enquanto esta condição é satisfeita (ignorando alguns outros detalhes) o circuito é garantidamente estável e confiável. Isto determina a velocidade máxima de um circuito síncrono.
A lógica síncrona tem duas desvantagens principais:
* A maior frequência do relógio é determinada pelo caminho lógico mais lento do circuito, também chamado de caminho crítico. Cada cálculo lógico, desde o mais simples ao mais complexo, devem terminar em um ciclo de relógio. Então caminhos lógicos que completam seus cálculos rapidamente estão ociosos a maior parte do tempo, esperando o próximo pulso de relógio. Portanto lógica síncrona pode ser mais lenta do que a lógica assíncrona. Uma forma de acelerar circuitos síncronos é dividir operações complexas em várias operações simples que podem ser executadas em ciclos de relógio sucessivos, uma técnica conhecida como segmentação de instruções. Esta técnica é usada extensivamente na produção de microprocessador, e ajuda a melhorar a performance dos processadores modernos.
* O sinal de relógio deve ser distribuído para todos os flip-flops no circuito. Como o sinal de relógio é geralmente um sinal de alta frequência, essa distribuição consome uma quantidade relativamente alta de energia e se dissipa muito calor. Mesmo os flip-flops que estão parados consomem uma pequena quantidade de energia, gerando calor perdido no circuito integrado. Em dispositivos portáteis, que têm energia limitada em sua bateria, o sinal de relógio continua mesmo quando o dispositivo não está sendo usado, consumindo-a.

## Lógica Sequencial Assíncrona

A lógica sequencial assíncrona não é sincronizada por um sinal de relógio; as saídas do circuito se alteram de acordo com a mudanças em suas entradas. A vantagem da lógica assíncrona é que ela pode ser mais rápida do que a lógica síncrona, porque o circuito não precisa de esperar por um pulso de relógio para processar suas entradas. A velocidade do dispositivo é limitado apenas pelo tempo de ||atraso|propagação das portas lógicas utilizadas.
No entanto, a lógica assíncrona é mais difícil de projetar e está sujeita a problemas não encontrados em modelos síncronos. O principal problema é que os elementos de memória digitais são sensíveis à ordem em que os seus sinais de entrada chegam; Se dois sinais chegam à uma porta lógica quase ao mesmo tempo, o estado que o circuito entra vai depender de qual sinal chega a porta lógica primeiro. Portanto, um circuito pode entrar em um estado errado dependendo de pequenas diferenças nos atrasos de propagação das portas lógicas. Isso é chamado de condição de corrida. Este problema não é tão grave em circuitos síncronos porque as saídas dos elementos de memória só mudam a cada pulso de relógio. O intervalo entre os sinais de relógio é projetado para ser o tempo suficiente para permitir que as saídas dos elementos de memória se "estabeleçam" de forma que eles não estejam mudando quando o próximo pulso do relógio chegue. Portanto, os únicos problemas de cronometragem são devido a entradas assíncronas, ou seja, entradas para o circuito recebidos de outros sistemas que não estão sincronizados com o sinal de relógio.
Circuitos sequenciais assíncronos são normalmente usados apenas em algumas partes críticas de sistemas que são na sua maioria síncronos, onde a velocidade é muito importante, como em peças de microprocessadores e circuitos de processamento de sinais digitais.
O modelo de lógica assíncrono usa diferente modelos matemáticos e técnicas da lógica síncrono, e é uma área de pesquisa ativa.