Prévia do material em texto
ELETRÔNICA DIGITAL AULA 4 Prof. Amilton Carlos Rattmann 2 CONVERSA INICIAL Nesta aula, abordaremos a implementação e a operação de Flip-flop (FF), as quais funcionam nas transições do sinal de clock, denominadas borda. Veremos circuitos detectores de borda e conheceremos outros tipos de FF e alguns aspectos relacionados ao tempo de operação dos FFs. Estudaremos os diagramas de estados, que são ferramentas gráficas importantes na construção de circuitos lógicos síncronos e máquinas de estado finito de forma geral. Conheceremos alguns circuitos implementados com FF e contadores assíncronos que podem ser desenvolvidos para vários módulos de contagem. Por último, trataremos da infraestrutura básica de acesso a memórias formadas por FF D. TEMA 1 – FLIP-FLOP COM CLOCK Abordamos anteriormente que os circuitos digitais podiam ser classificados como combinacionais – nos quais os sinais de saída são determinados pelos sinais de entrada –, ou sequenciais – nos quais os sinais de saída são determinados tanto pelos sinais de entrada quanto pelos estados de memórias (Pedroni, 2010, p. 77). Uma outra forma de classificar os circuitos digitais seria como assíncronos – aqueles nos quais as mudanças de estado podem ocorrer a qualquer momento –, ou síncronos – nos quais os estados são alterados em momentos específicos (Tocci, 2011, p. 185). Os circuitos digitais sequenciais normalmente empregam um sinal de “relógio” (clock, em tradução livre), o qual estabelece uma cadência para os sinais e ações dos circuitos sequenciais, tornando-os mais fáceis para analisar e controlar (Tocci, 2011, p. 185). 1.1 O sinal de clock Embora o sinal de relógio seja empregado com o termo traduzido, é muito comum encontrá-lo no termo original (clock), seja em livros traduzidos, seja nos escritos em português. Um motivo plausível para isso seria a internacionalização de projetos de circuitos digitais nos quais os símbolos e siglas são mais facilmente compreensíveis em vários locais do mundo quando se adota um idioma e padrão gráfico internacionais. Além disso, as folhas de dados de componentes digitais e analógicos são normalmente disponibilizadas 3 no idioma inglês, assim como em manuais de aplicação (cookbooks), nos quais o termo clock (CLK) é bem frequente. O sinal de clock é um trem de pulsos quadrados ou retangulares, regulares, em frequência específica compatível com sistema no qual é aplicado, oriundo de um oscilador. Os pulsos de clock apresentam borda de subida, definida pela transição do nível lógico LO para o nível lógico HI, e borda de descida, definida pela transição do nível lógico HI para nível lógico LO, conforme apresentado na Figura 1. Figura 1 – Sinal de relógio Os circuitos digitais síncronos trocam de estado nas transições do sinal de clock na borda de subida ou na borda de descida. Um mesmo circuito, como um flip-flop, operará ou na borda de subida, ou na borda de descida, mas não em ambas. Em um circuito digital mais complexo, podem existir circuitos digitais operando em borda de subida e outros em borda de descida. É comum aos circuitos síncronos que todos os circuitos digitais obedeçam a uma cadência estabelecida, normalmente submetidos à frequência de relógio mais elevada possível, pois quanto mais rápidas as transições, mais rápidas as repostas do sistema digital. Exemplificando isso, normalmente buscamos o microprocessador com a maior frequência de clock para um computador, pois tornaria o sistema mais rápido. Entretanto, é importante salientar que o circuito mais lento de um sistema digital estabelece a velocidade do sistema. Ou seja, o clock de um sistema é a solução de pior caso, representando a maior taxa de execução que pode ser aplicada ao sistema sem que ocorram erros lógicos ocasionados por falhas de transição de sinais digitais nos circuitos mais lentos. A frequência máxima (fMÁX) de operação de um FF está presente nos manuais de fabricantes. Embora o FF possa operar com frequência mais elevada, o fabricante não garante o funcionamento além da fMÁX (Tocci, 2011, p. 199). 4 1.2 Circuitos detectores de borda Já estamos habituados ao comportamento dos circuitos lógicos combinacionais a ponto de sabermos que operam por nível. Desde a especificação do comportamento de um circuito na tabela-verdade à síntese dos circuitos para realizar uma função lógica específica, sempre lidamos com níveis lógicos. De onde surge então um circuito lógico que opera por borda? Assim como consideramos em algumas oportunidades anteriores que os circuitos digitais possuíam resposta imediata, ou que a propagação era instantânea, entender a resposta por borda é uma questão de percepção temporal. Caso habilitemos um circuito digital por tempo muito curto, proporcional à transição do sinal digital, teremos uma transição por borda. Quando, anteriormente, estudamos o glitch, vimos que se tratava de uma dupla transição muito rápida que durava o tempo de uma propagação de porta lógica. Esse mesmo princípio é utilizado para permitir que os circuitos sejam sensibilizados apenas no período da borda. No circuito apresentado na Figura 2(a), a porta NAND (circuito U1) está submetida a um sinal digital produzido pela fonte V1, que podemos chamar de clock. A porta NAND recebe em uma de suas entradas o sinal de clock diretamente da fonte V1 e, na outra entrada, o sinal da mesma fonte invertido pela porta NOT (ou porta inversora – circuito U2). Observe na tabela-verdade da porta NAND, na Figura 2(b), que entradas A e B, ao receberem os níveis lógicos 1 e 0, ou níveis 0 e 1, respectivamente, produzem um mesmo valor lógico de saída. Do ponto de vista lógico estático, teremos apenas o valor lógico 1 na saída do circuito. Porém, ao se simular o circuito, surge um impulso de valor lógico baixo em um sinal predominantemente alto, que pode ser observado na Figura 2(c). Para entender o motivo do impulso, observemos a Figura 2(d), que é uma ampliação temporal do sinal de (c), no momento do impulso. O sinal de clock apresenta a transição em um determinado tempo t. Entretanto, a transição do sinal proveniente da porta inversora ocorre apenas alguns instantes depois (t+tp), ou seja, alguns nanosegundos, devido ao tempo de propagação da porta inversora. Nessa análise, estamos considerando os tempos de resposta dos transistores que formam as portas lógicas que, embora pequenos, passam a ser significativos. De fato, podemos observar que não houve uma simples transição de 0 e 1 para 1 e 0 nas entradas da porta NAND, mas uma transição de 0 e 1, 5 para 1 e 1 e, então, para 0 e 1. Ocorreu, como apresentado, uma condição de entrada de curta duração que produziu uma saída de nível baixo também de curta duração. Este impulso é produzido apenas para a transição de nível ascendente do clock, pois, na transição descendente, o atraso de propagação produz as transições 0 e 1 para 0 e 0 e, então, para 1 e 0 nas entradas da porta NAND, que mantém a saída em nível 1. Temos, então, um circuito detector de borda de subida. Os flip-flops que operam por borda, incorporam circuitos como este (Tocci, 2011, p.189), para se tornarem ativos (habilitados) apenas neste curto período, permanecendo inertes ao longo de todo intervalo entre bordas. Figura 2 – Simulação do circuito de detecção de borda 1.3 FF RS NAND operado por borda Vamos considerar um FF visto na aula anterior – o FF RS NAND –, e acrescentar outros recursos digitais alterando seu circuito para operar por borda1. Relembrando, o FF assume os estados de SET e RESET dependendo dos sinais aplicados às entradas R e S, conforme circuito apresentado na Figura 3(a), e seu respectivo símbolo, na Figura 3Erro! Fonte de referência não encontrada.(b). Existem condições inválidas de entrada e condições de 1 Normalmente,os FF operados por nível são denominados Latches, reservando o termo FF para aqueles operados por clock. 6 manutenção de estado, além das condições de SET e RESET, conforme apresentados na tabela-verdade da Figura 3(c). Figura 3 – FF RS NAND operado por nível (Latch): circuito (a); símbolo (b); e tabela-verdade (c) Se houver variações nos sinais de entrada, o FF RS irá responder a estas mudanças, mesmo que elas sejam provenientes de ruídos ou condições não previstas. O sinal de clock organiza o comportamento do FF habilitando a mudança de estado apenas nas transições de borda. O diagrama da Figura 4 incorpora o detector de borda e circuitos de controle para apresentar os sinais na entrada ao FF RS NAND operado por nível. Figura 4 – Circuito do FF RS (NAND) operado por clock (a); e sinais do circuito (b) Os circuitos da parte inferior da Figura 4(a), compostos por U3, U4, U5 e U6, formam o detector de borda com um tempo de habilitação de três tempos de 7 propagação de porta inversora. Na Figura 4(b), os sinais CLK e HAB representam os sinais de entrada e saída do detector de borda, respectivamente. Os circuitos de controle formados pelas portas OR (U7 e U8), permitem a passagem dos sinais S e R externos para as entradas S e R do FF-RS interno apenas quando o sinal de saída do detector de borda está habilitado. Na Figura 4(b), os sinais SN e RN externos (entrada) e os sinais SN_ e RN_ (saída) apresentam o comportamento do circuito de controle que permite que os sinais externos sejam expostos às entradas do FF RS, mas apenas na presença dos pulsos HAB. O FF RS é formado pelas portas NAND (U1 e U2), que trocam de estado apenas quando o sinal HAB está ativo. No período não habilitado, as portas OR mantém os níveis lógicos altos na entrada do FF RS, condição que mantém o estado anterior do FF, ou seja, com as saídas inalteradas e iguais à última transição realizada. Assim, acompanhamos o comportamento do FF operado por clock, no qual os sinais de entrada variam livremente, mas o FF só é sensibilizado com os sinais de entrada na borda de subida do sinal de clock. Os FF operados por borda possuem uma marca nos símbolos dos componentes que indicam este modo de operação, formada por um chanfro (na forma de um triângulo de lado) na entrada do sinal de clock. Apenas o triângulo indica borda de subida, enquanto o triângulo acompanhado por um círculo, indica sensibilidade à borda de descida. Os símbolos do FF RS NAND operado por clock são apresentados na Figura 5. Figura 5 – FF RS NAND operado por clock: símbolo à esquerda, FF RS operado em borda de subida; símbolo à direita FF RS operado em borda de descida TEMA 2 – FF JK, D, T Neste tema, abordaremos de forma mais ampla os flip-flops operados por clock, sendo necessário comentar algumas condições definidas para a operação 8 correta desses dispositivos com relação ao sinal de clock: o tempo de setup e o tempo de hold. O tempo de setup (tp) (ou de preparação) é um tempo mínimo que os sinais devem permanecer estáveis na entrada do FF antes da transição do clock. O tempo de hold (th) (ou manutenção) é um tempo mínimo que os sinais de entrada devem permanecer estáveis após à transição do sinal de clock (Tocci, 2011, p. 186-187). Estes tempos são estipulados em manual de componentes para garantir o funcionamento correto dos componentes digitais operados por clock. Foram desenvolvidos diferentes tipos de FF que apresentam comportamentos distintos e são utilizados em várias partes de sistemas, resolvendo problemas específicos mais facilmente que outros. Embora existam diferenças operacionais, com interconexões e/ou componentes adicionais, qualquer flip-flop de um tipo pode realizar as funções típicas de outro tipo de flip- flop. Vamos conhecer alguns outros FF além do FF RS que vimos no tema anterior. 2.1 Flip-flop JK O flip-flop JK é construído sobre o circuito do FF RS com clock, aproveitando a combinação de entrada que era proibida no RS, por uma ação permitida, adicionando um novo e útil estado. Na Figura 6 temos um circuito para o FF RS com clock, um pouco diferente do apresentado na Figura 4, que realiza o controle com porta lógicas NAND e utiliza, como sinais de habilitação, pulsos estreitos de nível lógico alto. O circuito detector de borda (DB) foi substituído por um bloco, simplificando o diagrama. Outra mudança, mas de ordem operacional, é que o FF RS agora é acionado externamente por nível lógico alto para as entradas R e S, embora internamente o FF RS permaneça operando por nível lógico baixo. Figura 6 – Flip-flop RS NAND operado por clock, com controle por portas NAND e alteração na sensibilidade 9 Fonte: elaborado com base em Tocci, 2011, p. 189. O estado proibido no FF RS continua existindo, sendo o FF operado por clock ou por nível. O FF JK melhora esta característica pelas alterações nos circuitos de controle, conforme apresentado na Figura 7. Figura 7 – Circuito FF JK operado por clock. Fonte: elaborado com base em Tocci, 2011, p. 192. Observe, na Figura 7, que há uma nova realimentação cruzada das saídas para as entradas das portas NAND de controle. Vamos analisar o que acontece e os efeitos desta realimentação adicional no comportamento do FF. Antes, entretanto, devemos considerar algumas premissas para a facilitar a análise de funcionamento: i. as portas NAND de controle com três entradas geram um nível lógico baixo (0) apenas quando as três entradas estiverem em nível lógico alto (1); ii. qualquer nível lógico baixo nas entradas J ou K inibem a comutação da sua respectiva porta NAND de controle; e 10 iii. as alterações de estado só ocorrem quando o detector de borda apresentar uma saída de curta duração em nível alto (1), proveniente da borda do sinal de clock. Com base nessas premissas, podemos analisar os diagramas apresentados na Figura 8, como segue. 1. Com J=1 e K=0, conforme observado na Figura 8(a), a porta NAND da entrada J percebe que todas as entradas estão em nível lógico alto e produz uma saída de nível lógico baixo, que provoca a ativação (SET) do FF. A ponta NAND da entrada K permanece inativa com saída em nível lógico alto (1). Figura 8 – Análise dos estados do FF JK 2. Com J=0 e K=1, conforme observado na Figura 8(b), a ponta NAND da entrada J permanece inativa com saída em nível lógico alto (1). A porta NAND da entrada K percebe que todas as entradas então em nível lógico alto e produz uma saída de nível lógico baixo, que provoca a desativação (RESET) do FF. 3. Com J=0 e K=0, conforme observado na Figura 8(c), as pontas NAND das entradas J e K permanecem inativas com saídas em nível lógico alto (1). O FF mantém o estado que estava anteriormente, descrito com Q-1. Não ocorrem mudanças no estado do FF. 11 4. Com J=1 e K=1, conforme observado na Figura 8(d), as pontas NAND das entradas J e K estão com todas as entradas em nível lógico alto, com exceção da linha de realimentação da saída Q. Nestas condições, a porta de controle da entrada J produz um zero, levando o FF a ser ativado (SET). Note, entretanto, que se a saída Q estivesse em nível lógico alto, a saída �̅� levaria o nível lógico baixo até a porta NAND de controle de K, produzindo um RESET. Ou seja, com esta condição de entrada, ocorre uma troca do estado do FF, com a inversão do estado anterior descrito como 𝑄−1̅̅ ̅̅ ̅ e conhecido como toggle. Como visto, o FF JK operará de forma semelhante ao FF RS, com a vantagem de substituir a condição de entradas proibidas por uma nova condição que leva à troca de estado do FF. Na Figura 9 são apresentados os símbolos do FF JK e sua tabela- verdade. Em algumas fontes de referência, as tabelas-verdade trazem uma indicação de borda de clock para representar que as transições ocorrem nas bordas. Figura 9 – Simbologiado FF JK: FF JK sensível à borda de subida (a); FF JK sensível à borda de descida (b); e Tabela-verdade FF JK (c) 2.2 Flip-flop D O FF D possui uma operação mais simples, contando com uma única entrada (D), apresentando dois estados (SET, RESET) e duas condições de entrada, mas é o FF mais amplamente utilizado em sistemas digitais (Pedroni, 2010). Pode ser construído a partir do FF JK, conforme apresentado na Figura 10. Das quatro condições de entrada inicialmente disponíveis no FF JK, apenas duas estão disponíveis após a inserção da porta NOT apresentada na Figura 10(a). 12 Figura 10 – FF D construído sobre o FF JK (a); tabela-verdade do FF D (b); e símbolo do FF D (c) As condições de troca e manutenção de estados não existem no FF D, permanecendo apenas as condições de SET e RESET interpretadas de forma ligeiramente diferente neste FF. Os valores lógicos para SET e RESET aplicados na entrada D serão os mesmos valores que estarão disponíveis na saída Q, após a operação do FF. Então, se o valor lógico alto (1) estiver na entrada D, a operação do FF D produzirá um valor lógico alto (1) na saída Q. Caso um valor lógico baixo (0) seja aplicado na entrada D, a operação do FF D produzirá um valor lógico baixo na saída Q, conforme pode ser observado na Figura 10(b). Esse é o comportamento de uma unidade de memória, que armazena o valor de D na borda de subida do sinal de clock. O símbolo do FF D é apresentado na Figura 10(c). O FF D é utilizado em diversos circuitos de sistemas digitais, como contatores e registradores. 2.3 Flip-flop T O FF T possui operação mais simples que o FF D e pode ser construído a partir de um FF D ou FF JK, conforme diagrama apresentado na Figura 11. A Figura 11(a) apresenta um FF T implementado pelas restrições dos valores de J e K, submetendo-os a um valor lógico alto (1), de forma permanente. Esta implementação obriga o FF JK a operar em estado de troca (toggle) e a trocar de estado a cada pulso de clock. Este comportamento descreve bem o funcionamento do FF T, cuja tabela-verdade é apresentada na Figura 11(b), descrevendo transições do funcionamento do FF T. Na Figura 11(c) é apresentado um FF D com função de troca de estado, com a realimentação da entrada D com o sinal de �̅�, invertendo o sinal de saída Q e implementando uma FF T. 13 Figura 11 – FF T: construído a partir do FF JK (a); tabela-verdade FF T (b); e FF T com FF D (c) Como visto, o princípio de funcionamento do FF T é baseado na contínua troca de estado a cada borda de clock. Algumas implementações, entretanto, conseguem acrescentar uma função de habilitação (enable) para controlar a troca de estados, como as implementações apresentadas na Figura 12. Na Figura 12(a), caso o terminal “T” esteja em “1”, o funcionamento do FF T permanece como descrito acima e, caso T=“0”, não ocorrem mais trocas de estado, mesmo com ocorrências contínuas de bordas de clock. A tabela-verdade que descreve este comportamento é apresentada na Figura 12(b). Uma implementação da entrada T com FF D é mostrada na Figura 12(c), na qual a porta lógica XOR tem a função de inversor controlado pela entrada T. Figura 12 – FF T com terminal T: construído com FF JK (a); tabela-verdade do FF T com terminal T (b); e FF T construído com FF D (c) Os símbolos para o FF T (apresentados na Figura 13) são para dispositivos com sensibilidade à borda de subida (a) e sensibilidade à borda de descida (b), como também para FF T com entrada T e sensibilidade à borda de subida (c), e sensibilidade à borda de descida (d). 14 Figura 13 – Simbologia do FF T: operado por borda de subida (a); operado por borda de descida (b); com terminal T e borda de subida (c); e com terminal T e borda de descida (d) 2.4 Outras funções implementadas em FF Outras funções são normalmente encontradas nas implementações de circuitos integrados comerciais, como CLEAR e PRESET. A função limpar (CLEAR) zera o FF de forma assíncrona, independentemente do ciclo de clock. O PRESET ativa o FF (SET) também de forma assíncrona. Os sinais CLEAR e PRESET são normalmente ativos, com nível lógico baixo e se sobrepõem aos sinais de entrada como JK ou D, como pode ser observado nos gráficos da Figura 14. Embora exista uma possível precedência implementada nos circuitos do FF, os sinais de PRESET e CLEAR não devem ser ativados simultaneamente. Figura 14 – FF JK com PRESET e CLEAR Outro sinal normalmente encontrado em circuitos integrados e FF é a entrada de habilitação (ENABLE). Esse sinal, normalmente representado por ENA ou EN nos diagramas, pode inibir o funcionamento do circuito ou inibir o 15 sinal de clock. Pode ainda, em certos componentes integrados, manter o funcionamento do circuito, mas inibir a saída. A leitura da folha de dados (datasheet) do componente eletrônico esclarecerá, caso exista na implementação do hardware, o funcionamento do sinal de ENABLE. Finalizando, o sinal de ENABLE pode ter sensibilidade a nível lógico alto (𝐸𝑁) ou baixo (𝐸𝑁̅̅ ̅̅ ). 2.5 Temporizações de FF Normalmente, os FF estão associados à mesma fonte de clock, executando as transições pela mesma referência. Quando o sinal de saída de um FF é injetado na entrada de outro FF que utiliza o mesmo sinal de clock, há um risco potencial de falha no transporte do sinal, em função dos tempos de setup, hold e propagação. A Figura 15 apresenta uma avaliação com dois FF D interligados em sequência, utilizando o mesmo sinal de clock. O sinal da saída Q1 sofre transição após um período tpLH a partir da borda do sinal de clock. Após a mesma borda de clock, inicia também o período tH na entrada D2. Caso o tempo de transição da saída Q1 seja maior que o tempo de manutenção (hold) de entrada, a operação é estável, pois o FF D U2 fará a leitura do valor anterior à transição de borda. Caso o tempo de transição de saída seja maior que o tempo de manutenção, então o estado do FF D U2 será indefinido, pois ocorrerá uma possível transição de sinal dentro do período de manutenção de U2. Figura 15 – Temporização com flip-flops Felizmente, a maioria dos dispositivos fabricados atualmente têm o tempo de manutenção pequeno ou igual a tH = 0 ns (Tocci, 2011, p. 201), garantindo a estabilidade e a previsibilidade do funcionamento do circuito digital. 16 TEMA 3 – DIAGRAMA DE ESTADOS Neste tema apresentaremos uma ferramenta gráfica que facilitará muito a organização e a análise na transição de estados de um sistema, e auxiliará principalmente no projeto de circuitos sequenciais síncronos utilizando FF. Os diagramas de estado são utilizados para descrever o comportamento de máquinas de estado finitos (ou FSM – Finite State Machine). 3.1 Terminologia Começaremos com a terminologia, apresentando os principais elementos utilizados em um diagrama de estados. O estado representa uma condição estática na qual o sistema pode permanecer indefinidamente. Relembrando do diagrama dos circuitos sequenciais (Aula 3), o estado seria definido pelo valor registrado nas memórias. Na organização do diagrama de estados, o nome do estado deve representar, o mais fielmente possível, o estado do sistema, como “leitura de teclado”, “aguardando confirmação” ou, ainda, o valor numérico que representa a sequência de uma contagem. O valor de saída representa, de fato, o valor que o estado deve produzir para desenvolver as funções esperadas, como o acionamento de atuadores, habilitação de componentes MSI (medium scale integration), acionamento de mostradores (display), entre outros. A representação do estado no diagrama é apresentada na Figura 16(a), na qual o nome do estado fica na parte superior, no semicírculo, e o valor de saída do estado, no semicírculo inferior. Outro elemento do diagrama de estados é a transição. A transição indica a relação entre os estados dosistema e apresenta o sentido desta transição nas modificações de estados do sistema. A transição é representada por um arco com um sentido (seta) e é apresentada na Erro! Fonte de referência não encontrada.Figura 16(b). As transições descrevem a evolução dos estados de um sistema como em um contador decimal ou em um detector de sequência de caracteres que encontra uma palavra específica. A transição pode acontecer pelo cadenciamento do sinal de clock ou pela ocorrência de um evento específico. O evento é outro elemento presente nos diagramas de estado, que apresenta todas as condições que devem ser atendidas para que a transição ocorra. O evento pode ser um valor binário, um valor decisão, uma condição ou 17 um conjunto de sinais. A representação do evento pode ser observada na Figura 16(c). Figura 16 – Elementos do diagrama de estados 3.2 Representação do diagrama Na Figura 17, um diagrama de estados simples apresenta todos os elementos associados, representando uma determinada funcionalidade. Note que o sistema possui apenas dois estados e estes apresentam seus respectivos nomes e valores de saída. Note também que o sistema realiza transições entre os estados somente nas ocorrências de eventos específicos. Caso o sistema esteja no estado “A” e ocorra o evento “n”, o sistema sofrerá uma transição para o estado “B”. Caso o sistema esteja no estado “B” e ocorra um evento “m”, o sistema sofrerá uma transição para o estado “A”. Entretanto, caso esteja no estado “A”, a ocorrência do evento “m” não produzirá qualquer alteração no sistema, assim como será inerte a ocorrência de um evento “n” no estado “B”. Figura 17 – Diagrama de estados 18 Para exemplificar o uso do diagrama de estados, vamos descrever um sistema de sinalização de saída de veículos da garagem de um edifício comercial. Neste sinalizador, as lâmpadas amarela e vermelha alternam-se em uma cadência predeterminada. O diagrama de estados deste sinalizador é apresentado na Figura 18(a). As saídas dos estados acionam as lâmpadas do sinalizador em vermelho e amarelo. A transição ocorre por tempo: um período de 2 segundos. Outro exemplo, apresentado na Figura 18(b), desenvolve os estados de um sistema que aplica dupla função para um interruptor de contato momentâneo, permitindo ligar e desligar um equipamento. Um estado é denominado Ligado, cuja saída liga uma fonte de alimentação, e um estado denominado Desligado, cuja saída desliga a fonte de alimentação. Tanto a transição do estado Desligado para o Ligado quanto a transição do estado Ligado para o Desligado têm o mesmo evento “Pressionado B1”, que executa funções diferentes dependendo do estado envolvido. Note que são eventos distintos, mesmo sendo produzidos pelo mesmo botão. Figura 18 – Exemplos de diagramas de estado: sinalizador de garagem (a); e ligar e desligar com o mesmo botão (b) 19 Os diagramas de estado podem descrever sistemas mais complexos com diversos estados e eventos. Na Figura 19, é apresentado um sistema descrito em três estados e cinco transições. Observe que, no estado “A”, após uma transição ocorrida pelo um evento “k”, há um retorno para o mesmo estado “A”. Essa representação poderia descrever um estado de espera, no qual, no entanto, se o evento não fosse diferente de “k”, o sistema permaneceria no estado “A”. Observe também que a evolução do estado “A” ao “C” passa pelo estado “B”, mas na ocorrência do evento “t”, o retorno ocorre diretamente ao estado “A”. É importante entender que, seguindo algumas regras básicas de representação, o diagrama deve representar a operação do sistema digital de forma mais fiel possível. Figura 19 – Diagrama de sistema com múltiplos eventos 20 TEMA 4 – APLICAÇÕES COM FLIP-FLOP Neste tema, abordaremos alguns circuitos que utilizam FF para elaborar controle de sinais, sincronização de pulsos, detecção de acionamento antecipado e divisão de sinais de clock. 4.1 Sincronizador de pulsos Neste exemplo, empregaremos um FF D para solucionar um problema de sincronismo de sinal. A interconexão de sistemas diferentes pode trazer um problema de sincronização, como uma diferença de fase entre sinais de clock, mesmo que possuam a mesma frequência, ou a ocorrência de sinais por sensores, por exemplo, que acontecem de forma assíncrona. Na Figura 20(a) é apresentado um circuito hipotético, no qual uma chave S1 é acionada, habilitando uma porta AND na passagem de pulsos de uma determinada frequência, oriundos da fonte V1. Observe no gráfico da Figura 20(b), que os pulsos da fonte V1 são produzidos com distorção na saída da porta AND, em função da defasagem entre os sinais da chave e da fonte V1. Na Figura 20(c), é apresentado um circuito com FF D para corrigir a distorção do sinal. O sinal da chave, nesse circuito, só é propagado quando ocorrer uma borda de subida do sinal de V1, sincronizando o sinal de acionamento assimétrico da chave com o sinal de V1. Este sincronismo evita a ocorrência dos pulsos curtos, distorcidos, que poderiam causar algum tipo de mau funcionamento nos circuitos posteriores, pela transmissão de pulsos sempre regulares, para qualquer momento de ocorrência e de permanência do acionamento de S1. 21 Figura 20 – Sincronizador de pulsos: circuito sem sincronismo (a); gráfico dos sinais da chave S1 (PR1), de V1 (PR2) e da saída (PR3) (b), respectivamente; circuito com correção de sincronismo (c); e gráfico dos sinais da chave S1 (PR1), de V1 (PR2), da saída do FF D (PR4) e da saída do circuito (PR3) (d) 4.2 Circuito de detecção de acionamento antecipado O circuito apresentado na Figura 21 é um detector de acionamento antecipado, no qual quatro botões são acionados por candidatos e apenas um permanecerá ativo – justamente aquele que for o mais rápido. Na borda de subida do clock, os quatro FF D transportam o sinal de entrada D para a saída Q. Caso um sinal lógico alto seja transportado, a porta NOR produzirá um sinal de bloqueio que inibirá todos os FF de forma assíncrona pelo sinal de ENABLE, permanecendo ativo apenas aquele FF que transportou o sinal antes dos demais. A diferença mínima de tempo para percepção é o período do clock. Caso dois acionamentos ocorram dentro do mesmo período de clock, ocorrerá um empate. Para minimizar a chance de empate, a frequência do clock pode ser aumentada. 4.3 Circuito de divisão de clock O FF T e o FF D podem ser utilizados para produzir uma divisão na frequência de um sinal de clock, uma vez que estejam configurados para a troca de estado (retome a Figura 11). Figura 21 – Circuito de detecção de acionamento antecipado 22 A divisão por 2, por exemplo, ocorre por meio da alteração de níveis lógicos da saída do FF D a cada borda de subida (ou descida) do sinal de entrada, em função da realimentação do sinal da saída de 𝑄1̅̅ ̅ para a entrada D (toggle), como apresentado na Figura 22. Figura 22 – Divisão de clock com FF D 23 Na primeira borda de subida do sinal de clock, considerando que o estado inicial do FF D é de saída zero (RESET), ocorre a troca de estado, fazendo a saída Q1 ir de “0” para “1”. Na próxima borda de subida, como Q1 = 1 e 𝑄1̅̅ ̅ = 0, o sinal de saída de Q1 vai de “1” para “0”. Este comportamento do FF produz um sinal com a metade da frequência do sinal presente na entrada de clock. Já se a saída Q1 for interligada com a entrada de clock do FF D U2, que também está no modo de troca de estado, esse também realizará a troca na saída Q2 a cada borda de subida de Q1, produzindo uma divisão por quatro na frequência, com relação ao sinal inicial, CLK. TEMA 5 – CIRCUITOS SEQUENCIAIS ASSÍNCRONOS: CONTADORES E MEMÓRIAS Neste tema, veremos contadores binários assíncronos progressivos e regressivos e uma estrutura básica de acesso à memória, como a organização desinais habilitação, escrita e leitura. 5.1 Contadores assíncronos regressivos Se observarmos novamente o gráfico da Figura 22, no qual um sinal de clock sofre uma dobra no período ou uma divisão por dois na frequência e sofre nova divisão na saída, o FF D U2, e destacarmos com valores lógicos “0” e “1” 24 entre cada intervalo de transição, poderemos observar uma evolução binária que apresenta certa lógica, conforme apresentado na Figura 23(a), identificados em uma ordem da primeira à oitava ocorrência. Figura 23 – Gráfico de sinais do contador assíncrono regressivo (a); progressão dos valores decimais (b) Organizando esta sequência em uma tabela e ordenando as colunas com valores de saída, iniciando da transição mais lenta (Q2) para a mais rápida 25 (CLK), podemos identificar, na coluna “Valor decimal”, que se trata de uma sequência de contagem regressiva. Caso consideremos apenas as saídas Q2 e Q1, teremos um contador assíncrono regressivo de dois bits, com cadência de contagem igual à frequência de clock. Caso consideremos o próprio sinal de clock na contagem, teremos um contador binário de três bits com cadência de regressão igual ao dobro da frequência de clock. Este último exemplo é mais ilustrativo do que prático. Não é recomendável construir um contador cujo sinal de clock de entrada faça parte da saída de contagem. Além desse aparente contrassenso, o motivo principal está no fato de que o sinal de clock está interconectado com vários outros circuitos, e pode sofrer distorções talvez não perceptíveis para o acionamento por borda, mas suficientemente comprometido para afetar o enquadramento do sinal de saída, podendo também apresentar ciclo de trabalho (duty cycle) diferente de 50%, e taxa de subida e descida muito inclinados (slew rate). 5.2 Contadores assíncronos progressivos Utilizando a mesma avaliação aplicada ao contador regressivo, como poderíamos obter um contador progressivo? Uma forma é pelo complemento da saída ou pela utilização das saídas negadas dos FF D, no qual a palavra binária “11” se torna “00”, “10” se torna “01” e assim sucessivamente, como visto na Figura 24(a). De fato, ao se inverter os sinais de saída do contador regressivo, obtém-se uma contagem progressiva, como é demonstrado na Figura 24(b), na qual um contador progressivo de dois bits é obtido invertendo-as saídas Q2 e Q1 no circuito da Figura 22. Figura 24 – Contador assíncrono de dois bits: gráfico de sinais (a); e evolução dos valores decimais (b) 26 Para que o contador regressivo assíncrono inicie a contagem, é preciso aplicar os sinais de PRESET nos FF D, assim como para iniciar o contador progressivo. Isto pode parecer um pouco estranho, pois normalmente espera-se que um sinal de RESET zere as memórias e reinicie os circuitos. Isto não chega a ser um problema, mas precisa estar adequadamente documentado para não produzir equívocos na análise do circuito digital. Uma alternativa para iniciar a contagem com RESET pode ser obtida alterando a implementação do contador, modificando as interconexões dos FF D, como apresentado na Figura 25(a). Neste, o sinal aplicado ao clock de U2 vem da saída negada de U1. Essa alteração provoca um deslocamento de um período de clock no sinal de saída Q2, produzindo uma contagem progressiva nas saídas Q2 e Q1, observada na Figura 25(b). Este contador é naturalmente progressivo. O contador regressivo pode ser obtido pela inversão dos sinais de saída ou pela utilização das saídas negadas. Para as duas progressões nesse circuito, a inicialização ocorre por RESET. 27 5.3 Contador assíncrono progressivo-regressivo Um contador progressivo-regressivo é um circuito lógico contador que pode contar tanto de forma progressiva quanto de forma regressiva, por meio de um sinal de seleção de função, como apresentado na Figura 26(a). Figura 25 – Contador assíncrono progressivo com inicialização com RESET (a); e sinais presentes no contador progressivo (b) Um contador assíncrono progressivo-regressivo poderia ser implementado atuando-se na interconexão do clock do FF D U2 com as saídas FF D U1. Caso o contador opere como progressivo, interconecta-se a entrada 28 de clock de U2 com a saída negada Q1’ de U1. Caso o contador opere como regressivo, interconecta-se a entrada de clock de U2 com a saída Q1 de U1. O processo de interconexão pode utilizar um MUX de duas entradas, comutando a entrada de clock de U2 às saídas de U1 por um sinal de seleção SEL. Entretanto, não se pode garantir previamente que o contador mantenha o valor estável durante a comutação, pois dependendo dos valores de Q1 e Q1’ pode ocorrer uma borda de subida, afetando a contagem durante a seleção de função, como apresentado na Figura 26(b). Figura 26 – Contador assíncrono progressivo-regressivo (a); e influência do sinal de seleção na entrada de clock de U2 (b) 29 Um contador síncrono projetado como uma máquina de estados finitos pode implementar um contador progressivo-regressivo sem problemas de seleção, como será visto futuramente. 5.4 Propagação do clock nos contadores assíncronos Os contadores assíncronos são nominados assim porque o sinal clock não é comum a todos os FF, mas é propagado FF a FF até realizar a transição completa do valor binário. Embora sejam simples e fáceis de projetar, sua propagação característica limita seu emprego em aplicações, assim como sua velocidade máxima de operação. Uma transição de borda na entrada de clock do primeiro FF é propagada quase como um efeito dominó, no qual cada peça caída representaria o tempo de propagação do FF D ou FF T, conforme representado no gráfico da Figura 27. Figura 27 – Propagação de clock em contadores assíncronos 30 Caso analisemos um contador de 20 bits, por exemplo, implementado com FF D com propagação típica da ordem de 50 ns, o último FF D perceberia o sinal de clock após 19 x 50 ns = 0,950 µs, levando a um período de atualização das saídas do contador de 1 µs. O próximo pulso de clock poderia ser aplicado após um período de estabilidade dos sinais de saída, o que reduz bastante a taxa máxima de contagem do contador, conforme demostrado na Figura 27. Em um contador síncrono, todos os FF operam ao mesmo tempo, computando um único tempo de propagação independentemente da quantidade de FF, podendo implementar um contador grande com maior tempo de estabilidade e maior velocidade. 5.5 Contadores com reinício antecipado Os exemplos de contares assíncronos até agora contavam o valor binário inteiro (ou módulo inteiro), ou seja, um contador binário de dois bits, 22, quatro valores (módulo 4); um contador binário de três bits, 23, oito valores (módulo 8). Mas como seria um contador até seis? Ou sete? Para implementar um contador para módulo diferente de 2n, utiliza-se o reinício antecipado por um circuito lógico combinacional que produz um sinal de SET/RESET no contador, reiniciando a contagem. Para implementar com que o contador conte até um determinado valor (como 13, por exemplo), denominado como contador módulo 14, é necessário determinar o maior e mais próximo número de base 2. Nesse 31 exemplo, 24 = 16 define a quantidade de quatro FF D ou FF T. O número decimal 14 não existe no contador proposto sendo, consequentemente, o valor que será utilizado para reiniciar o contador progressivo. O contador contará com quatro saídas Q3, Q2, Q1, e Q0, nas quais o valor 14, em binário “1110”, será a condição de RESET para reiniciar a contagem, ativando um nível lógico baixo nas entradas 𝑅𝑆𝑇̅̅ ̅̅ ̅ dos FF D, por meio da função lógica 𝑄4. 𝑄3. 𝑄2̅̅ ̅̅ ̅̅ ̅̅ ̅̅ ̅̅ , conforme apresentado na Figura 28. Figura 28 – Contador assíncrono módulo 13 5.6 Contadores com carga paralela Os contadores assíncronos, como vimos, podem ser reiniciadospelo sinal de RESET. Podem também ser implementados para iniciar a contagem com um valor específico externo, carregado nos FF. Essa característica é denominada carga paralela, e é apresentada no circuito da Figura 29. Figura 29 – Contador assíncrono módulo 16 com carga paralela 32 A carga paralela carrega um valor binário no contador, controlado por um sinal de carga (LOAD). O circuito de carga, nesse exemplo, atua nas entradas 𝑅𝑆𝑇̅̅ ̅̅ ̅ (RESET) ou 𝑃𝑅𝐸̅̅ ̅̅ ̅̅ (PRESET), conforme o valor de entrada para, de forma assíncrona, definir o valor externo no contador, a partir do qual a contagem inicia (ou continua). As portas NAND, na parte superior da Figura 29, formam um decodificador. Neste, o sinal LD em nível lógico baixo mantém as saídas do decodificador em nível alto, sem acionar RESET ou PRESET nos FF D, independentemente do sinal de entrada. Caso o sinal LD esteja em nível lógico alto, as entradas em nível lógico alto produzem um PRESET, e as entradas de nível lógico baixo produzem um RESET nos FF D. A Tabela 1 apresenta a tabela- verdade deste decodificador. Tabela 1 – Tabela-verdade do decodificador de carga para acionamento de RESET/PRESET Carga (LD) Entrada 𝑷𝑹𝑬̅̅ ̅̅ ̅̅ 𝑹𝑺𝑻̅̅ ̅̅ ̅̅ Ação 0 0 1 1 Sem ação 0 1 1 1 Sem ação 1 0 1 0 Aciona RESET 1 1 0 1 Aciona PRESET 5.7 Infraestrutura para acesso a memória Os FF são unidades de memória. Como tal, podemos guardar, atualizar e consultar valores binários armazenados, registrando um bit em cada FF. Os FF 33 D são mais utilizados na função de memória pela facilidade na interconexão e operação. Guardar um valor de um byte de comprimento em memória demanda uma disponibilidade exclusiva de oito FF D para a estrutura de armazenamento desta informação. O processo de registro de informações na memória é operacionalizado pela disponibilização dos valores na entrada dos FF D, até que ocorra o pulso de clock (borda). Após a ocorrência do pulso, os valores de entrada tornam-se indiferentes para o FF até o próximo pulso de clock, momento que pode ser utilizado para promover uma atualização dos valores armazenados nos FF D. Uma vez armazenado, o valor permanece disponível nas saídas dos FF D, conforme o diagrama apresentado na Figura 30. Figura 30 – Armazenamento, atualização e consulta de valor em FF Neste estudo de infraestrutura de acesso às memórias, utilizaremos o contador assíncrono, módulo 16, com carga paralela como elemento ativo. Vamos supor que existe um sinal com o período de 1 segundo aplicado na entrada de clock do contador, que implica no contador tornar-se um temporizador ou um relógio de 16 segundos. Vamos ainda supor que este temporizador possa armazenar o valor atual do tempo decorrido em uma memória de quatro bits. É comum existir uma definição padrão no tamanho dos dados dentro de um sistema. Caso um microprocessador manipule, por exemplo, dados de 16 bits de 34 largura, a infraestrutura no entorno do microprocessador, como registradores e memórias, normalmente estará implementada com 16 bits de largura. Neste estudo, o temporizador e as memórias terão quatro bits de largura para os dados manipulados no sistema. A saídas do temporizador estão ligadas às entradas D dos FF de memória. Ao atingir um valor que deva ser salvo em memória, um pulso de escrita (clock) é aplicado nos FF D do arranjo de memórias, fazendo com que o valor presente no contador seja armazenado. Por outro lado, as saídas das memórias estão ligadas às entradas de carga paralela do temporizador, de modo que, ao ocorrer um sinal de carga (LD), o circuito do temporizador assume os valores binários armazenados na memória. Esta interconexão é apresentada no diagrama da Figura 31(a). Figura 31 – Interconexão de um contador e uma memória (a); interconexão de um contador e duas memórias (b); e interconexão de dois contadores e duas memórias (c) Te m p o ri za d o r M em ó ri a (a) 35 Te m p o ri za d o r M em ó ri a 1 M em ó ri a 2 (b) Te m p o ri za d o r 2 M em ó ri a 1 M em ó ri a 2 Te m p o ri za d o r 1 ? ? (c) 36 Vamos considerar agora que o temporizador deva salvar dois valores, em arranjos de memórias diferentes. As saídas do temporizador devem ser interligadas às entradas dos FF D dos dois arranjos de memórias. As saídas das memórias devem ser ligadas às entradas do temporizador, algo que não pode ser feito, pois estaríamos aplicando um curto-circuito nas saídas dos FF D dos arranjos de memórias. Um arranjo poderia ser interligado ao temporizador, mas o outro não, conforme apresentado no diagrama da Figura 31(b). Por último, vamos considerar um cenário mais dinâmico, no qual dois temporizadores podem salvar valores, compartilhando dois arranjos de memórias. Naturalmente, estamos considerando os limites do sistema no qual um temporizador possa armazenar nenhum, um ou dois valores, desde que o outro temporizador não os esteja utilizando. Também não entraremos no problema de coordenação entre os dois temporizadores, mas apenas no contexto da interconexão. Nesse cenário, as saídas do primeiro temporizador seriam interligadas às entradas das memórias. As saídas do primeiro arranjo de memória seriam interligadas às entradas dos dois temporizadores. Porém, a partir deste ponto, mais nada poderia ser conectado, como as saídas do segundo temporizador às entradas das memórias e as saídas do segundo arranjo de memória às entradas dos temporizadores, conforme demonstrado no diagrama da Figura 31(c). Utilizando alguns componentes digitais vistos em aulas anteriores que provavelmente não tinham apresentado muito claramente sua utilidade, eles nos ajudarão a resolver o problema de interconexão entre os temporizadores e os arranjos de memória. Tomaremos com base para esta discussão o diagrama da Figura 31(b) e o circuito da Figura 32, que apresenta uma solução para interconexão dos dois arranjos de memória com o temporizador. Como visto no diagrama do circuito, é realizada a interconexão das saídas do temporizador às entradas dos arranjos de memória diretamente. As saídas das memórias, que não podiam ser interligadas às entradas do temporizador, agora são possíveis pelo emprego de buffers de três estados (tri-state buffer, ou 3S), que possuem o estado de alta impedância (Z) quando estão desabilitados. Esse estado impede a condição de curto-circuito entre as saídas das memórias, pois, enquanto as saídas de um arranjo têm acesso às entradas do temporizador, as saídas do outro arranjo ficam ligadas a uma carga de alta impedância. O funcionamento do 37 buffer 3S, quando acionado, permite a passagem dos sinais de saída (ação de comutação) do arranjo 1 ou do arranjo 2 de memória exclusivamente para as entradas do temporizador. O controle (SEL) do multiplexador de duas entradas (MUX) permite direcionar para qual saída o sinal de habilitação (HAB) é conectado, acionando os buffers 3S do arranjo 1 ou 2. Já para o acionamento de armazenamento dos arranjos de memória 1 e 2, outro MUX controla a direção do pulso de clock, por meio de outro sinal de seleção (SEL). Ao conjunto de sinais aplicados ao controle, como HAB, CLK e LD, é dada a denominação de sinais de controle, que são dispostos no barramento de controle. Note que os sinais de seleção (SEL) existem para cada arranjo de memória. Para sistemas com muitas memórias, os sinais de seleção são codificados em um barramento de endereços, com tantos bits de largura quanto a quantidades de arranjos de memória. Caso em um sistema tivesse 1024 bytes de memória, organizados de quatro em quatro bits (arranjos), seriam necessários 2048 sinais de seleção, necessitando de um barramento de endereços de 11 bits de largura (211 = 2048).Figura 32 – Interconexão de dois arranjos de memória e um temporizador O último conjunto de sinais que podemos denominar é aquele responsável pelo transporte dos dados. No caso da Figura 32, temos um conjunto que sai das memórias para o temporizador, e outro que sai do temporizador para as 38 memórias. Nesse caso particularmente, os dois conjuntos de dados são unidirecionais, ou seja, os sinais saem de um dispositivo sempre em direção ao outro. Em sistemas digitais, os barramentos de dados são normalmente bidirecionais, ou seja, os sinais continuam no sentido das saídas para as entradas, mas podem utilizar vias comuns reduzindo recursos, principalmente para barramentos largos. Atualmente, os microprocessadores para computadores pessoais utilizam barramentos de dados de 64 bits de largura. Na Figura 33, é apresentada uma modificação do circuito da Figura 32, para que as memórias operem com barramento bidirecional. Não existe, além do tracejado de delimitação, sinais de entrada e saída para dados. Tanto os sinais de entrada quanto os de saída são disponibilizados por interconexões comuns. Já apresentando a terminologia de sistemas digitais, os sinais de seleção (SEL) foram substituídos por sinais de endereçamento (ADDRESS); os sinais de clock (CLK), foram substituídos por um sinal de escrita (WRITE – WR); e o sinal de habilitação, por sinais de leitura (READ – RD). É comum encontrar, nos sinais de controle, sinais de habilitação (ENABLE – EN), e sinal combinado de escrita- leitura (WRITE/READ - 𝑊𝑅̅̅ ̅̅ ̅/𝑅𝐷) complementares. Figura 33 – Unidades de memória para barramento bidirecional e sinais de controle Na Figura 34, é apresentada uma possível solução para o problema de conexão mostrado na Figura 31(c), implementando um barramento bidirecional 39 de dados, contando com a utilização de buffers de três estados, decodificadores e multiplexadores. O sistema de endereçamento está relacionado com contadores e o sistema de controle da Figura 34, é mais complexo, e está relacionado com máquinas de estados finitos (FSM). Figura 34 – Sistema com barramento bidirecional FINALIZANDO Nessa aula, conhecemos a implementação e a operação de flip-flops RS (FF RS) que operam por borda de subida e descida do sinal de clock. Conhecemos os FF tipo JK, D e T que são utilizados nos mais diversos circuitos sequenciais, como detectores de sequência, divisores de sinal de clock e sincronizadores de pulsos, além de alguns problemas de temporização na operação de FF. Estudamos os componentes, termos e a descrição de sistemas com a utilização de diagramas de estado. Estudamos, de forma ampla, o princípio de funcionamento e a construção de contadores assíncronos progressivos e regressivos, para contagem completa e para terminação antecipada e com possibilidade de carga paralela de valor. Vimos também os sinais de controle aplicados aos FF como RESET, PRESET e ENABLE e circuitos detectores de borda. Conhecemos alguns circuitos implementados com FF e, por último, a infraestrutura básica de acesso a arranjos de memórias e forma de acessos aos dados registrados, com barramentos uni e bidirecionais, empregando buffers de três estados, multiplexadores e decodificadores. 40 REFERÊNCIAS PEDRONI, V. A. Eletrônica digital moderna e VHDL. Rio de Janeiro: Elsevier, 2010. TOCCI, R. J. Sistemas digitais: princípios e aplicações. 11. ed. São Paulo: Pearson Prentice Hall, 2011.