Criar e simular circuitos lógicos
- Apresentação
- 1. Sistemas de numeração
- Porquê o binário
- Sistemas posicionais
- Binário para decimal
- Exemplo resolvido · Binário para decimal
- Decimal para binário
- Exemplo resolvido · Decimal para binário (divisões sucessivas)
- Binário e hexadecimal
- Exemplo resolvido · Hexadecimal para binário e decimal
- Decimal para hexadecimal
- Exemplo resolvido · Decimal para hexadecimal
- Números fracionários
- Exemplo resolvido · Número fracionário para binário
- Números fracionários em hexadecimal
- Exemplo resolvido · Fracionários em hexadecimal
- Quantos bits são precisos
- 2. Aritmética binária e números com sinal
- Adição
- Exemplo resolvido · Soma binária com transportes
- Subtração
- Exemplo resolvido · Subtração binária
- Representação de inteiros com sinal
- Exemplo resolvido · Escrever e ler complementos a 2
- Soma e subtração em complemento a 2
- Exemplo resolvido · Subtrações em complemento a 2
- Excesso de capacidade (overflow)
- Exemplo resolvido · Deteção de overflow
- 3. Códigos binários e deteção de erros
- 4. Portas lógicas e funções lógicas
- 5. Álgebra de Boole
- Elementos e operações
- Postulados e teoremas
- Como se prova um teorema
- Teoremas de De Morgan
- Exemplo resolvido · Simplificação algébrica
- Formas canónicas
- Exemplo resolvido · Forma canónica a partir da tabela
- Universalidade das portas NAND e NOR
- Exemplo resolvido · Converter uma expressão em NAND-NAND
- Exemplo resolvido · Construir a XOR com 4 NAND
- 6. Mapa de Karnaugh
- 7. Circuitos combinacionais
- Definição e método de projeto
- Meio somador (half adder)
- Somador completo (full adder)
- Exemplo resolvido · Projeto do full adder
- Somador de n bits
- Exemplo resolvido · Somador/subtrator
- Comparador
- Descodificador
- Multiplexer e demultiplexer
- Exemplo resolvido · Função com multiplexer
- Codificador, codificador de prioridade e mostrador de 7 segmentos
- Atrasos e picos indesejados (glitches)
- 8. Componentes eletrónicos, simbologia e datasheets
- Os cinco componentes de base
- Exemplo resolvido · Resistência para um LED
- Exemplo resolvido · Transístor como interruptor
- Pull-up e pull-down
- Simbologia ANSI/IEEE
- Exemplo resolvido · Ler um esquema
- Exemplo resolvido · Definir os componentes e o layout
- Interpretação de datasheets
- Exemplo resolvido · Ler o pinout de um 7400
- 9. Famílias lógicas
- 10. Simulação e montagem em breadboard
- 11. Circuitos sequenciais
- Erros comuns
- Glossário
- Síntese
- Exercícios resolvidos
Há um pacote premium desta unidade: um PowerPoint editável de 100 ou mais diapositivos, um manual em PDF e dois testes com correção. Esta sebenta continua gratuita.
- Apresentação
- 1. Sistemas de numeração
- Porquê o binário
- Sistemas posicionais
- Binário para decimal
- Exemplo resolvido · Binário para decimal
- Decimal para binário
- Exemplo resolvido · Decimal para binário (divisões sucessivas)
- Binário e hexadecimal
- Exemplo resolvido · Hexadecimal para binário e decimal
- Decimal para hexadecimal
- Exemplo resolvido · Decimal para hexadecimal
- Números fracionários
- Exemplo resolvido · Número fracionário para binário
- Números fracionários em hexadecimal
- Exemplo resolvido · Fracionários em hexadecimal
- Quantos bits são precisos
- 2. Aritmética binária e números com sinal
- Adição
- Exemplo resolvido · Soma binária com transportes
- Subtração
- Exemplo resolvido · Subtração binária
- Representação de inteiros com sinal
- Exemplo resolvido · Escrever e ler complementos a 2
- Soma e subtração em complemento a 2
- Exemplo resolvido · Subtrações em complemento a 2
- Excesso de capacidade (overflow)
- Exemplo resolvido · Deteção de overflow
- 3. Códigos binários e deteção de erros
- 4. Portas lógicas e funções lógicas
- 5. Álgebra de Boole
- Elementos e operações
- Postulados e teoremas
- Como se prova um teorema
- Teoremas de De Morgan
- Exemplo resolvido · Simplificação algébrica
- Formas canónicas
- Exemplo resolvido · Forma canónica a partir da tabela
- Universalidade das portas NAND e NOR
- Exemplo resolvido · Converter uma expressão em NAND-NAND
- Exemplo resolvido · Construir a XOR com 4 NAND
- 6. Mapa de Karnaugh
- 7. Circuitos combinacionais
- Definição e método de projeto
- Meio somador (half adder)
- Somador completo (full adder)
- Exemplo resolvido · Projeto do full adder
- Somador de n bits
- Exemplo resolvido · Somador/subtrator
- Comparador
- Descodificador
- Multiplexer e demultiplexer
- Exemplo resolvido · Função com multiplexer
- Codificador, codificador de prioridade e mostrador de 7 segmentos
- Atrasos e picos indesejados (glitches)
- 8. Componentes eletrónicos, simbologia e datasheets
- Os cinco componentes de base
- Exemplo resolvido · Resistência para um LED
- Exemplo resolvido · Transístor como interruptor
- Pull-up e pull-down
- Simbologia ANSI/IEEE
- Exemplo resolvido · Ler um esquema
- Exemplo resolvido · Definir os componentes e o layout
- Interpretação de datasheets
- Exemplo resolvido · Ler o pinout de um 7400
- 9. Famílias lógicas
- 10. Simulação e montagem em breadboard
- 11. Circuitos sequenciais
- Erros comuns
- Glossário
- Síntese
- Exercícios resolvidos
Apresentação
Esta sebenta acompanha a UC00651 (50 h · 4,5 pontos) do curso Técnico/a de Sistemas de Computação e Redes. O objetivo é que, no fim, sejas capaz de desenhar, simular, montar e testar circuitos digitais simples, partindo de um problema descrito por palavras, de uma tabela de verdade ou de uma expressão de saída.
O percurso segue a ordem do trabalho na prática: representar informação com zeros e uns (capítulos 1 a 3); descrever e simplificar circuitos com portas lógicas, álgebra de Boole e mapa de Karnaugh (4 a 6); projetar circuitos combinacionais (7); escolher componentes, ler esquemas ANSI/IEEE e datasheets e conhecer as famílias TTL e CMOS (8 e 9); simular e montar em placa de ensaio (breadboard) (10); e, no fim, dar memória aos circuitos (11).
Em cada capítulo encontras exemplos resolvidos passo a passo. Não os leias apenas: tapa a resolução, tenta fazer sozinho e só depois compara. No fim do documento há erros comuns, um glossário, uma síntese e exercícios resolvidos para treinares antes das fichas.
Realizações de referência: desenhar circuitos de lógica combinatória a partir da tabela de verdade ou da expressão de saída; configurar e montar circuito lógico em software de simulação; simular e testar o funcionamento de circuitos digitais simples; implementar circuitos lógicos em breadboard.
Critérios de desempenho: adequar os componentes à função do circuito; simplificar as operações lógicas; cumprir as operações lógicas requeridas.
1. Sistemas de numeração
Porquê o binário
Um circuito digital distingue apenas dois níveis de tensão: um nível baixo (por convenção, lógica 0) e um nível alto (lógica 1). Distinguir dois níveis é muito mais fiável do que distinguir dez, porque o ruído elétrico não confunde um valor com o outro desde que haja uma margem confortável entre eles. Por isso toda a informação que um computador guarda ou processa (números, texto, imagens, som) acaba representada por sequências de bits.
Um bit (binary digit) é um dígito binário, 0 ou 1. Um grupo de 4 bits chama-se nibble e um grupo de 8 bits chama-se byte. Com n bits formam-se 2ⁿ combinações diferentes, o que dá 16 valores com 4 bits, 256 com 8 bits e 65 536 com 16 bits.
Sistemas posicionais
Os sistemas que usamos são posicionais: o valor de cada algarismo depende da posição que ocupa. Num sistema de base b, o número com algarismos dₙ…d₂d₁d₀ vale
N = dₙ·bⁿ + … + d₂·b² + d₁·b¹ + d₀·b⁰
| Sistema | Base | Algarismos | Uso típico |
|---|---|---|---|
| Decimal | 10 | 0 a 9 | Contas e leitura humana |
| Binário | 2 | 0 e 1 | Hardware digital |
| Hexadecimal | 16 | 0 a 9 e A a F | Endereços, cores, depuração |
No hexadecimal, as letras valem A = 10, B = 11, C = 12, D = 13, E = 14 e F = 15. Para evitar ambiguidades, escreve-se a base em índice (1011₂, 2F₁₆) ou com sufixo (1011b, 2Fh) ou com prefixo (0x2F).
Convém saber de cor as potências de 2: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 e 1024 (de 2⁰ a 2¹⁰).
Binário para decimal
Soma-se o peso de cada posição onde há um 1. As posições, da direita para a esquerda, pesam 1, 2, 4, 8, 16…
Exemplo resolvido · Binário para decimal
Converter 1101 0110₂ em decimal.
- Escrever os pesos por cima de cada bit: 128, 64, 32, 16, 8, 4, 2, 1.
- Os bits a 1 estão nas posições de peso 128, 64, 16, 4 e 2.
- Somar: 128 + 64 + 16 + 4 + 2 = 214.
Resultado: 1101 0110₂ = 214₁₀.
Decimal para binário
Há dois métodos equivalentes. No método das divisões sucessivas por 2, divide-se o número por 2 até chegar a 0, guardando os restos; o binário lê-se de baixo para cima (o último resto é o bit mais significativo). No método dos pesos, vai-se subtraindo a maior potência de 2 que cabe.
Exemplo resolvido · Decimal para binário (divisões sucessivas)
Converter 202₁₀ em binário.
| Divisão | Quociente | Resto |
|---|---|---|
| 202 ÷ 2 | 101 | 0 |
| 101 ÷ 2 | 50 | 1 |
| 50 ÷ 2 | 25 | 0 |
| 25 ÷ 2 | 12 | 1 |
| 12 ÷ 2 | 6 | 0 |
| 6 ÷ 2 | 3 | 0 |
| 3 ÷ 2 | 1 | 1 |
| 1 ÷ 2 | 0 | 1 |
Lendo os restos de baixo para cima: 1100 1010₂. Verificação pelos pesos: 128 + 64 + 8 + 2 = 202. ✓
Binário e hexadecimal
Como 16 = 2⁴, cada algarismo hexadecimal corresponde exatamente a 4 bits. Por isso a conversão é direta e sem contas: agrupam-se os bits de 4 em 4, a partir da direita, e converte-se cada grupo. Por exemplo, 1011 0111₂ = B7₁₆ = 11×16 + 7 = 183.
| Decimal | Binário | Hex | Decimal | Binário | Hex | |
|---|---|---|---|---|---|---|
| 0 | 0000 | 0 | 8 | 1000 | 8 | |
| 1 | 0001 | 1 | 9 | 1001 | 9 | |
| 2 | 0010 | 2 | 10 | 1010 | A | |
| 3 | 0011 | 3 | 11 | 1011 | B | |
| 4 | 0100 | 4 | 12 | 1100 | C | |
| 5 | 0101 | 5 | 13 | 1101 | D | |
| 6 | 0110 | 6 | 14 | 1110 | E | |
| 7 | 0111 | 7 | 15 | 1111 | F |
Exemplo resolvido · Hexadecimal para binário e decimal
Converter 3AF₁₆ em binário e em decimal.
- Cada algarismo vira 4 bits: 3 = 0011, A = 1010, F = 1111. Logo 3AF₁₆ = 0011 1010 1111₂.
- Em decimal: 3×16² + 10×16 + 15 = 768 + 160 + 15 = 943.
Decimal para hexadecimal
Usa-se o mesmo método das divisões sucessivas, agora por 16. Dividem-se o número e os quocientes por 16 até chegar a 0; os restos (de 0 a 15, escritos com os algarismos 0 a 9 e as letras A a F) leem-se de baixo para cima. Um caminho alternativo é converter primeiro para binário e agrupar os bits de 4 em 4.
Exemplo resolvido · Decimal para hexadecimal
Converter 478₁₀ em hexadecimal.
| Divisão | Quociente | Resto |
|---|---|---|
| 478 ÷ 16 | 29 | 14 (E) |
| 29 ÷ 16 | 1 | 13 (D) |
| 1 ÷ 16 | 0 | 1 |
Lendo os restos de baixo para cima: 1DE₁₆. Verificação: 1×256 + 13×16 + 14 = 256 + 208 + 14 = 478. ✓ Em binário, 1DE₁₆ = 0001 1101 1110₂.
Números fracionários
A parte depois da vírgula usa potências negativas da base: 2⁻¹ = 0,5, 2⁻² = 0,25, 2⁻³ = 0,125, 2⁻⁴ = 0,0625.
- Binário fracionário para decimal: somar os pesos dos bits a 1. Por exemplo 0,101₂ = 0,5 + 0,125 = 0,625.
- Decimal fracionário para binário: converter a parte inteira como habitual e, para a parte fracionária, multiplicar sucessivamente por 2, guardando a parte inteira de cada resultado; o binário lê-se de cima para baixo.
Exemplo resolvido · Número fracionário para binário
Converter 13,375₁₀ em binário.
- Parte inteira: 13 = 1101₂.
- Parte fracionária, multiplicações por 2:
| Operação | Resultado | Bit |
|---|---|---|
| 0,375 × 2 | 0,75 | 0 |
| 0,75 × 2 | 1,5 | 1 |
| 0,5 × 2 | 1,0 | 1 |
- A parte fracionária acaba quando o resto é 0: 0,375 = 0,011₂.
Resultado: 1101,011₂. Verificação: 8 + 4 + 1 + 0,25 + 0,125 = 13,375. ✓
Nem todos os decimais têm representação binária finita. O número 0,1₁₀ dá a dízima 0,0001 1001 1001…₂, que se repete indefinidamente. É por isso que os computadores guardam 0,1 com um pequeno erro de arredondamento, e é uma das razões para nunca comparar números fracionários com um teste de igualdade exata.
Números fracionários em hexadecimal
No hexadecimal, a parte depois da vírgula usa potências negativas de 16: 16⁻¹ = 0,0625 e 16⁻² = 0,00390625. Cada algarismo hexadecimal depois da vírgula corresponde a 4 bits, tal como antes da vírgula. Para passar um decimal fracionário a hexadecimal, multiplica-se a parte fracionária por 16, guardando a parte inteira de cada resultado (de 0 a 15, escrita em hexadecimal); o número lê-se de cima para baixo.
Exemplo resolvido · Fracionários em hexadecimal
a) Converter 0,B8₁₆ em decimal e em binário.
- Em decimal: B = 11 está em 16⁻¹ e 8 em 16⁻². Logo 11/16 + 8/256 = 0,6875 + 0,03125 = 0,71875.
- Em binário, cada algarismo vira 4 bits: B = 1011 e 8 = 1000. Logo 0,B8₁₆ = 0,1011 1000₂ = 0,10111₂ (os zeros finais podem omitir-se).
- Verificação: 0,10111₂ = 0,5 + 0,125 + 0,0625 + 0,03125 = 0,71875. ✓
b) Converter 13,375₁₀ em hexadecimal.
- Parte inteira: 13 = D.
- Parte fracionária: 0,375 × 16 = 6,0, algarismo 6 e resto 0. A conversão termina.
Resultado: D,6₁₆. Confirma-se com o binário do exemplo anterior, 1101,011₂: agrupando de 4 em 4 a partir da vírgula, 1101 = D e 0110 = 6.
c) Converter 10,8₁₀ em hexadecimal.
- Parte inteira: 10 = A.
- Parte fracionária: 0,8 × 16 = 12,8, algarismo 12 (C) e resto 0,8; o resto repete-se, e por isso o algarismo C repete-se sem fim.
Resultado: A,CCC…₁₆, uma dízima, tal como 0,1₁₀ em binário.
Quantos bits são precisos
Para representar N valores diferentes são precisos n bits, com 2ⁿ ≥ N. Para guardar os números de 0 a 999 (1000 valores) precisam-se 10 bits, porque 2⁹ = 512 não chega e 2¹⁰ = 1024 chega. O maior número sem sinal que cabe em n bits é 2ⁿ − 1: 15 em 4 bits, 255 em 8 bits, 65 535 em 16 bits.
2. Aritmética binária e números com sinal
Adição
A adição binária segue as regras da adição decimal, mas com apenas quatro casos:
| A | B | Soma | Transporte (carry) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Quando a coluna tem três uns (dois bits mais o transporte vindo da coluna anterior), 1 + 1 + 1 = 11₂: escreve-se 1 e transporta-se 1. Este é exatamente o comportamento do full adder, que vais projetar no capítulo 7.
Exemplo resolvido · Soma binária com transportes
Somar 1011₂ + 0110₂ (11 + 6).
1011
+ 0110
------
10001
Coluna a coluna, da direita para a esquerda:
- Bit 0: 1 + 0 = 1, sem transporte.
- Bit 1: 1 + 1 = 10, escreve 0 e transporta 1.
- Bit 2: 0 + 1 + 1 (transporte) = 10, escreve 0 e transporta 1.
- Bit 3: 1 + 0 + 1 (transporte) = 10, escreve 0 e transporta 1.
- O último transporte passa a ser o bit 4.
Resultado: 10001₂ = 17, o que confere com 11 + 6. Repara que a soma de dois números de 4 bits precisou de 5 bits: o transporte final é o sinal de que o resultado já não cabe nos 4 bits originais.
Subtração
A subtração faz-se com empréstimos (borrow), como no papel: 0 − 1 pede emprestado 1 à coluna seguinte e fica 10 − 1 = 1.
Exemplo resolvido · Subtração binária
Calcular 0110₂ − 0011₂ (6 − 3).
- Bit 0: 0 − 1 não dá. Pede-se emprestado ao bit 1, que passa de 1 a 0, e a coluna fica 10 − 1 = 1.
- Bit 1: agora é 0 − 1, que também não dá. Pede-se emprestado ao bit 2, que passa de 1 a 0, e a coluna fica 10 − 1 = 1.
- Bit 2: 0 − 0 = 0.
- Bit 3: 0 − 0 = 0.
Resultado: 0011₂ = 3. Em hardware, porém, é raro construir subtratores com empréstimos. Como vais ver já a seguir, usa-se o complemento a dois, que transforma a subtração numa soma.
Representação de inteiros com sinal
Para guardar números negativos é preciso reservar um bit para o sinal. Existem três formas clássicas, todas com o bit mais significativo (MSB) a indicar o sinal (0 positivo, 1 negativo).
Sinal e magnitude. O MSB é o sinal e os restantes bits são o valor absoluto. Em 4 bits, +5 = 0101 e −5 = 1101. Tem o inconveniente de ter dois zeros (0000 e 1000) e de exigir circuitos diferentes para somar e subtrair.
Complemento a 1. O negativo obtém-se invertendo todos os bits do positivo. Em 4 bits, +5 = 0101 e −5 = 1010. Continua a haver dois zeros (0000 e 1111).
Complemento a 2. O negativo obtém-se invertendo todos os bits e somando 1. Em 4 bits, +5 = 0101, invertido 1010, mais 1 dá 1011, portanto −5 = 1011. Tem um só zero e a soma funciona igual para positivos e negativos, por isso é a representação usada em praticamente todos os processadores.
| Valor | Sinal e magnitude | Complemento a 1 | Complemento a 2 |
|---|---|---|---|
| +7 | 0111 | 0111 | 0111 |
| +1 | 0001 | 0001 | 0001 |
| 0 | 0000 ou 1000 | 0000 ou 1111 | 0000 |
| −1 | 1001 | 1110 | 1111 |
| −5 | 1101 | 1010 | 1011 |
| −7 | 1111 | 1000 | 1001 |
| −8 | não existe | não existe | 1000 |
Intervalos em n bits: sinal e magnitude e complemento a 1 vão de −(2ⁿ⁻¹ − 1) a +(2ⁿ⁻¹ − 1); o complemento a 2 vai de −2ⁿ⁻¹ a +(2ⁿ⁻¹ − 1). Com 4 bits, o complemento a 2 cobre de −8 a +7; com 8 bits, de −128 a +127; com 16 bits, de −32 768 a +32 767.
Exemplo resolvido · Escrever e ler complementos a 2
a) Representar −37 em 8 bits, complemento a 2.
- +37 em 8 bits: 37 = 32 + 4 + 1 = 0010 0101.
- Inverter todos os bits: 1101 1010.
- Somar 1: 1101 1011.
Resultado: −37 = 1101 1011₂ = DB₁₆.
b) Que número é 1111 0000, em complemento a 2 com 8 bits?
- O MSB é 1, portanto é negativo.
- Inverter: 0000 1111. Somar 1: 0001 0000 = 16.
- O valor é −16.
Atalho prático: o valor de um complemento a 2 também se calcula dando ao MSB o peso negativo −2ⁿ⁻¹. Aqui, −128 + 64 + 32 + 16 = −16. ✓
Soma e subtração em complemento a 2
Em complemento a 2, A − B = A + (−B), ou seja, soma-se A com o complemento a 2 de B e descarta-se o transporte final. O mesmo somador faz as duas operações.
Exemplo resolvido · Subtrações em complemento a 2
Em 4 bits (intervalo −8 a +7):
a) 7 − 5. Representa-se −5 = 1011. Soma-se 0111 + 1011 = 1 0010. Descartando o transporte, o resultado é 0010 = +2. ✓
b) 5 − 7. Representa-se −7: 0111 invertido é 1000, mais 1 dá 1001. Soma-se 0101 + 1001 = 1110. O MSB é 1, portanto é negativo: 1110 invertido é 0001, mais 1 dá 0010 = 2, logo o resultado é −2. ✓
Excesso de capacidade (overflow)
Há overflow quando o resultado não cabe no número de bits disponível. Com números sem sinal, o overflow vê-se pelo transporte final igual a 1. Com números com sinal (complemento a 2), o transporte final não é um indicador fiável; deteta-se overflow quando os dois operandos têm o mesmo sinal e o resultado tem sinal diferente. Em hardware compara-se o transporte que entra no MSB com o que sai dele: se forem diferentes, houve overflow.
Exemplo resolvido · Deteção de overflow
a) 5 + 4 em 4 bits com sinal: 0101 + 0100 = 1001. Dois positivos deram um resultado com MSB 1, que se lê −7. Houve overflow: o resultado verdadeiro é 9 e o intervalo termina em +7.
b) (−6) + (−4) em 4 bits: 1010 + 1100 = 1 0110. Descartado o transporte, fica 0110 = +6. Dois negativos deram um positivo: overflow, porque −10 está abaixo do mínimo, −8.
c) 3 + (−5) em 4 bits: 0011 + 1011 = 1110 = −2. Sinais diferentes nunca produzem overflow. ✓
3. Códigos binários e deteção de erros
Para que servem os códigos
O binário puro não é a única forma de codificar informação. Consoante o objetivo, usam-se códigos que tornam o hardware mais simples, a conversão para humanos mais fácil ou a transmissão mais segura.
BCD (Binary-Coded Decimal)
No BCD, cada algarismo decimal é guardado em 4 bits, com os valores 0000 a 1001 (0 a 9). As combinações 1010 a 1111 não são usadas. É muito usado em mostradores, relógios e calculadoras, porque converter de e para decimal é imediato.
Assim, 0 é 0000, 5 é 0101 e 9 é 1001.
Repara na diferença: 47 em binário puro é 0010 1111 (8 bits, que é 2F em hexadecimal), enquanto 47 em BCD é 0100 0111 (um grupo por algarismo). O BCD desperdiça combinações (159 em BCD ocupa 12 bits, 0001 0101 1001, contra 8 bits em binário puro), mas poupa conversões.
Soma em BCD. Soma-se como binário normal; se o resultado de um grupo ultrapassar 9 (ou der transporte), acrescenta-se 0110 (6) a esse grupo para saltar as seis combinações inválidas.
Exemplo resolvido · Soma em BCD
Somar 8 + 5 em BCD.
- 1000 + 0101 = 1101 (13 em binário).
- 1101 é maior do que 1001, logo é inválido em BCD. Corrige-se somando 0110: 1101 + 0110 = 1 0011.
- O transporte passa para o grupo das dezenas: 0001 0011.
Resultado: 0001 0011 = 13 em BCD. ✓
Código Gray
No código Gray, dois valores consecutivos diferem num único bit. Isto evita leituras erradas em sensores que mudam de posição (um codificador rotativo, por exemplo): se várias linhas mudassem ao mesmo tempo, qualquer pequeno desfasamento daria valores intermédios falsos. Em Gray só uma linha muda de cada vez.
| Decimal | Binário | Gray |
|---|---|---|
| 0 | 000 | 000 |
| 1 | 001 | 001 |
| 2 | 010 | 011 |
| 3 | 011 | 010 |
| 4 | 100 | 110 |
| 5 | 101 | 111 |
| 6 | 110 | 101 |
| 7 | 111 | 100 |
Binário para Gray: o MSB mantém-se; cada bit seguinte é o XOR do bit binário correspondente com o bit binário anterior. Gray para binário: o MSB mantém-se; cada bit binário é o XOR do bit Gray atual com o bit binário já calculado à esquerda. É exatamente a ordem 00, 01, 11, 10 que vais usar nos eixos dos mapas de Karnaugh.
Exemplo resolvido · Conversões binário e Gray
a) Binário 1011 para Gray: MSB = 1; 1⊕0 = 1; 0⊕1 = 1; 1⊕1 = 0. Resultado 1110.
b) Gray 1110 para binário: MSB = 1; 1⊕1 = 0; 0⊕1 = 1; 1⊕0 = 1. Resultado 1011. ✓
Código ASCII
O ASCII (American Standard Code for Information Interchange) atribui um número de 7 bits (0 a 127) a cada caráter básico: letras, algarismos, pontuação e carateres de controlo.
| Caráter | Decimal | Hex | Binário |
|---|---|---|---|
| espaço | 32 | 20 | 010 0000 |
| 0 | 48 | 30 | 011 0000 |
| 9 | 57 | 39 | 011 1001 |
| A | 65 | 41 | 100 0001 |
| Z | 90 | 5A | 101 1010 |
| a | 97 | 61 | 110 0001 |
| z | 122 | 7A | 111 1010 |
Duas regularidades úteis: o algarismo n tem código 48 + n (o caráter "7" é 0x37); e a letra minúscula obtém-se da maiúscula somando 32 (0x20), ou seja, ligando o bit 5. O ASCII só cobre o alfabeto inglês; o Unicode (codificado em UTF-8 na web) estende a ideia a todas as línguas, mantendo os primeiros 128 códigos iguais aos do ASCII e acrescentando milhares de outros, como o «ç» e o «ã».
Bit de paridade e deteção de erros
Quando se guarda ou transmite informação, um bit pode mudar por ruído. O bit de paridade é um bit extra acrescentado a cada palavra para permitir detetar que houve um erro.
- Paridade par: o bit de paridade escolhe-se de modo que o número total de uns (dados mais paridade) seja par.
- Paridade ímpar: idem, mas o total de uns é ímpar.
O emissor calcula a paridade e o recetor volta a contar os uns. Se a contagem não for a esperada, algo mudou na transmissão.
Exemplo resolvido · Gerar e verificar paridade
a) Gerar o bit de paridade par para 1011001 (7 bits de dados).
- Contar os uns: 1, 0, 1, 1, 0, 0, 1 dá quatro uns.
- Já é par, portanto o bit de paridade é 0.
- Palavra enviada (paridade à esquerda): 0 1011001.
b) O recetor obtém 0 1001001. Está correto?
- Contar os uns: restam três uns na palavra recebida (0100 1001 tem três uns).
- Três é ímpar, e o esperado era par. Foi detetado um erro.
Limites da paridade:
- Deteta qualquer número ímpar de bits trocados (1, 3, 5…), mas não deteta um número par (dois bits trocados anulam-se).
- Diz que há erro mas não diz onde e por isso não o corrige.
- Para corrigir erros usam-se códigos mais elaborados (como os de Hamming, que combinam vários bits de paridade).
Em hardware, a paridade calcula-se com uma cadeia de portas XOR: o XOR de vários bits dá 1 quando há um número ímpar de uns. Para paridade par, o bit de paridade é P = D₀ ⊕ D₁ ⊕ … ⊕ Dₙ.
4. Portas lógicas e funções lógicas
Níveis lógicos
Uma porta lógica é um circuito que recebe uma ou mais entradas binárias e produz uma saída binária, em função de uma regra fixa. Na lógica positiva, a mais usada, o nível alto de tensão representa o 1 e o nível baixo representa o 0. Na lógica negativa é o contrário. Nesta sebenta usa-se sempre lógica positiva, salvo indicação em contrário.
As sete portas
| Porta | Expressão | Símbolo ANSI/IEEE (forma) | Saída = 1 quando |
|---|---|---|---|
| NOT | Ā | triângulo com círculo na saída | a entrada é 0 |
| AND | A·B | forma em "D" | todas as entradas são 1 |
| OR | A+B | forma curva pontiaguda | pelo menos uma entrada é 1 |
| NAND | ¬(A·B) | AND com círculo na saída | nem todas as entradas são 1 |
| NOR | ¬(A+B) | OR com círculo na saída | todas as entradas são 0 |
| XOR | A⊕B | OR com linha dupla na entrada | as entradas são diferentes (número ímpar de uns) |
| XNOR | ¬(A⊕B) | XOR com círculo na saída | as entradas são iguais |
O pequeno círculo na saída (ou na entrada) de um símbolo significa sempre inversão. Esta é a chave para ler esquemas: uma NAND é uma AND seguida de uma inversão, e uma NOR é uma OR seguida de uma inversão.
Tabelas de verdade das portas de duas entradas
| A | B | AND | OR | NAND | NOR | XOR | XNOR |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
A porta NOT tem uma só entrada: a saída é sempre o contrário da entrada (0 dá 1 e 1 dá 0).
Portas com mais de duas entradas
AND, OR, NAND e NOR generalizam-se a três, quatro ou mais entradas sem mudar a regra: uma AND de 4 entradas só dá 1 se as quatro forem 1; uma NOR de 3 entradas só dá 1 se as três forem 0. A XOR de várias entradas dá 1 quando o número de uns é ímpar, e é por isso que serve para calcular paridade (capítulo 3). Em qualquer caso, a tabela de verdade tem 2ⁿ linhas: 8 linhas para 3 entradas, 16 para 4.
Circuitos integrados da série 74xx
As portas compram-se em circuitos integrados (CI) com várias portas iguais num único encapsulamento, normalmente de 14 pinos (DIP-14). Alguns exemplos clássicos:
| CI | Função | Conteúdo |
|---|---|---|
| 7400 | NAND | 4 portas de 2 entradas |
| 7402 | NOR | 4 portas de 2 entradas |
| 7404 | NOT (inversor) | 6 inversores |
| 7408 | AND | 4 portas de 2 entradas |
| 7410 | NAND | 3 portas de 3 entradas |
| 7420 | NAND | 2 portas de 4 entradas |
| 7432 | OR | 4 portas de 2 entradas |
| 7486 | XOR | 4 portas de 2 entradas |
A numeração é igual em todas as subfamílias (74LS00, 74HC00…): o que muda é a tecnologia, tema do capítulo 9. Em todos estes CI de 14 pinos, o pino 14 recebe a alimentação (V_CC) e o pino 7 recebe a massa (GND).
Funções lógicas
Uma função lógica associa a cada combinação das variáveis de entrada um valor de saída, 0 ou 1. Pode ser descrita de quatro formas equivalentes, e saber passar de uma para outra é a competência central desta UC:
- Por palavras (o enunciado do problema).
- Por tabela de verdade.
- Por expressão booleana.
- Por esquema (circuito com portas).
Com n variáveis existem 2ⁿ combinações de entrada e, para cada uma, a saída pode ser 0 ou 1, logo há 2^(2ⁿ) funções diferentes: 16 funções de 2 variáveis, 256 de 3, 65 536 de 4.
Qualquer função, por complicada que seja, obtém-se combinando portas.
Exemplo resolvido · Do enunciado ao circuito
Um sistema de alarme dispara a sirene (F = 1) quando o sistema está armado (S = 1) e o sensor da porta (P) ou o da janela (J) está ativo.
- Variáveis: S, P, J. Três entradas, 8 linhas.
- Regra: F = 1 só se S = 1 e (P = 1 ou J = 1). Logo F = S·(P + J).
- Tabela:
| S | P | J | F |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
- Circuito: uma porta OR (7432) recebe P e J; a saída vai a uma porta AND (7408) juntamente com S. Duas portas, de dois CI diferentes.
- Verificação: se S = 0 a AND dá sempre 0, portanto a sirene nunca toca com o sistema desarmado, como pedido.
5. Álgebra de Boole
Elementos e operações
A álgebra de Boole trabalha com variáveis que só podem tomar dois valores, 0 e 1, e três operações básicas: AND (produto lógico, A·B), OR (soma lógica, A+B) e NOT (complemento, Ā). As outras operações (NAND, NOR, XOR, XNOR) definem-se a partir destas:
NAND: ¬(A·B)
NOR: ¬(A+B)
XOR: A⊕B = Ā·B + A·B̄
XNOR: ¬(A⊕B) = A·B + Ā·B̄
O objetivo é simplificar expressões: uma expressão mais curta dá um circuito com menos portas, menos ligações, menos consumo, menos atraso e menos pontos de falha.
Postulados e teoremas
| Nome | Forma AND | Forma OR |
|---|---|---|
| Identidade | A·1 = A | A + 0 = A |
| Elemento nulo | A·0 = 0 | A + 1 = 1 |
| Idempotência | A·A = A | A + A = A |
| Complemento | A·Ā = 0 | A + Ā = 1 |
| Involução | dupla negação: ¬(Ā) = A | |
| Comutativa | A·B = B·A | A + B = B + A |
| Associativa | (A·B)·C = A·(B·C) | (A+B)+C = A+(B+C) |
| Distributiva | A·(B+C) = A·B + A·C | A + B·C = (A+B)·(A+C) |
| Absorção | A·(A+B) = A | A + A·B = A |
| Absorção do complemento | A·(Ā+B) = A·B | A + Ā·B = A + B |
| Consenso | (A+B)·(Ā+C)·(B+C) = (A+B)·(Ā+C) | A·B + Ā·C + B·C = A·B + Ā·C |
Repara na simetria entre as duas colunas: cada igualdade da coluna AND obtém-se da coluna OR trocando AND por OR e 0 por 1. É o princípio da dualidade, e permite memorizar metade das regras.
Como se prova um teorema
Em Boole há sempre um método seguro: provar com a tabela de verdade. Se as duas expressões dão a mesma coluna de saída para todas as combinações, são iguais. Por exemplo, a absorção do complemento, A + Ā·B = A + B:
| A | B | Ā·B | A + Ā·B | A + B |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 1 |
As duas últimas colunas coincidem, logo a igualdade é verdadeira.
Teoremas de De Morgan
Os teoremas de De Morgan permitem trocar ANDs por ORs, e são a ponte para a lógica só com NAND ou só com NOR:
¬(A·B) = Ā + B̄
¬(A+B) = Ā · B̄
Em palavras: o complemento de um produto é a soma dos complementos, e o complemento de uma soma é o produto dos complementos. Generalizam-se a n variáveis: ¬(A·B·C) = Ā + B̄ + C̄ e ¬(A+B+C) = Ā·B̄·C̄.
Para aplicar De Morgan: troca-se cada AND por OR (e vice-versa) e complementa-se cada variável, respeitando os parênteses.
Exemplo resolvido · Simplificação algébrica
a) Simplificar F = A·B + A·B̄ + Ā·B.
- Agrupar os dois primeiros termos: A·B + A·B̄ = A·(B + B̄) = A·1 = A.
- Fica F = A + Ā·B.
- Pela absorção do complemento, A + Ā·B = A + B.
Resultado: F = A + B, ou seja, uma só porta OR em vez de três termos AND e um OR.
b) Simplificar F = (A + B)·(A + C).
- Usar a distributiva da forma OR: (A + B)·(A + C) = A + B·C.
Resultado: F = A + B·C.
c) Simplificar F = Ā·B·C + A·B·C + A·B·C̄.
- Os dois primeiros termos partilham B·C: Ā·B·C + A·B·C = B·C·(Ā + A) = B·C.
- O segundo e o terceiro partilham A·B: A·B·C + A·B·C̄ = A·B. Usa-se o termo A·B·C duas vezes, o que é permitido pela idempotência (X = X + X).
- F = B·C + A·B.
Resultado: F = B·C + A·B = B·(A + C).
d) Aplicar De Morgan a F = ¬(A·B + C).
- O complemento de uma soma é o produto dos complementos: F = ¬(A·B)·C̄.
- De Morgan no primeiro fator: ¬(A·B) = Ā + B̄.
- F = (Ā + B̄)·C̄ = Ā·C̄ + B̄·C̄.
Resultado: F = Ā·C̄ + B̄·C̄.
Formas canónicas
Qualquer função pode escrever-se sempre numa forma padrão, a partir da tabela de verdade.
- Mintermo (mᵢ): produto de todas as variáveis, cada uma na forma direta (se vale 1) ou complementada (se vale 0), correspondente à linha i da tabela. Só vale 1 nessa linha. Para ABC, m₅ = A·B̄·C (linha 101).
- Maxtermo (Mᵢ): soma de todas as variáveis, cada uma complementada se vale 1 e direta se vale 0. Só vale 0 na linha i. Para ABC, M₅ = Ā + B + C̄ (linha 101).
Soma de produtos (SOP, primeira forma canónica): OR dos mintermos das linhas onde F = 1. Produto de somas (POS, segunda forma canónica): AND dos maxtermos das linhas onde F = 0.
Exemplo resolvido · Forma canónica a partir da tabela
Uma função de maioria: F = 1 quando pelo menos duas das três entradas são 1.
| A | B | C | F |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
SOP: F = Σm(3, 5, 6, 7) = Ā·B·C + A·B̄·C + A·B·C̄ + A·B·C.
POS: F = ΠM(0, 1, 2, 4) = (A+B+C)·(A+B+C̄)·(A+B̄+C)·(Ā+B+C).
Simplificação: juntando cada um dos três primeiros mintermos com A·B·C (idempotência), ou pelo mapa de Karnaugh do capítulo 6, obtém-se F = A·B + A·C + B·C: três ANDs e uma OR de 3 entradas.
Universalidade das portas NAND e NOR
Uma porta é universal se, apenas com ela, se consegue construir qualquer função lógica. NAND e NOR são universais. Como qualquer função se escreve com NOT, AND e OR, basta mostrar como se obtêm essas três a partir de NAND (ou de NOR).
Só com NAND:
- NOT: ligar as duas entradas da NAND uma à outra. ¬(A·A) = Ā.
- AND: uma NAND seguida de um NOT (feito com outra NAND). A·B = ¬(¬(A·B)).
- OR: inverter cada entrada e aplicar NAND. A + B = ¬(Ā·B̄) = NAND(Ā, B̄), por De Morgan.
Só com NOR:
- NOT: ligar as duas entradas da NOR. ¬(A+A) = Ā.
- OR: uma NOR seguida de um NOT.
- AND: inverter cada entrada e aplicar NOR. A·B = ¬(Ā + B̄) = NOR(Ā, B̄).
Na prática, isto tem três vantagens: menos tipos de CI em stock e na placa, fabrico mais simples (num CI de CMOS as portas NAND e NOR são as mais pequenas e rápidas) e reaproveitamento de portas livres no mesmo encapsulamento.
Exemplo resolvido · Converter uma expressão em NAND-NAND
Implementar F = A·B + C·D apenas com portas NAND.
- Aplicar dupla negação: F = ¬(¬(A·B + C·D)).
- De Morgan no complemento interior: ¬(A·B + C·D) = ¬(A·B)·¬(C·D).
- Logo F = ¬( ¬(A·B) · ¬(C·D) ) = NAND( NAND(A,B), NAND(C,D) ).
Resultado: dois NAND de 2 entradas no primeiro nível e um NAND de 2 entradas no segundo. Qualquer SOP converte-se em NAND-NAND sem acrescentar nenhum inversor: é a razão pela qual os projetistas pensam "soma de produtos" e montam "dois níveis de NAND". Com um 7400 (4 NAND) sobra ainda uma porta.
Exemplo resolvido · Construir a XOR com 4 NAND
A XOR pode fazer-se com quatro NAND (um 7400 completo):
N1 = NAND(A, B)
N2 = NAND(A, N1)
N3 = NAND(B, N1)
Y = NAND(N2, N3)
| A | B | N1 | N2 | N3 | Y |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 0 |
| 0 | 1 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 1 | 0 |
A coluna Y é a tabela da XOR. Este circuito será montado em breadboard no capítulo 10.
6. Mapa de Karnaugh
Ideia e regras
A simplificação algébrica exige perícia para descobrir que termos juntar. O mapa de Karnaugh transforma esse problema num jogo visual. É uma tabela de verdade reorganizada numa grelha, onde as células vizinhas diferem num único bit, para que dois mintermos vizinhos se possam juntar eliminando a variável que muda. Isto consegue-se escrevendo os eixos em código Gray (00, 01, 11, 10) e nunca em ordem binária (00, 01, 10, 11).
Dimensões: 2 variáveis dão 4 células; 3 variáveis dão 8 (2 × 4); 4 variáveis dão 16 (4 × 4). Acima de 5 ou 6 variáveis o método deixa de ser prático e usam-se programas.
Regras de agrupamento:
- Agrupam-se células a 1 (para obter a forma SOP).
- Os grupos têm tamanho potência de 2: 1, 2, 4, 8 ou 16 células.
- Os grupos são retangulares (nunca em diagonal).
- O mapa é cíclico: a coluna da esquerda é vizinha da coluna da direita, e a linha de cima da linha de baixo. Os quatro cantos de um mapa de 4 variáveis formam um grupo de 4.
- Cada grupo deve ser o maior possível, e todos os 1 têm de ficar cobertos, usando o menor número de grupos. Um 1 pode pertencer a vários grupos.
- Cada grupo dá um termo produto onde só ficam as variáveis que não mudam dentro do grupo (direta se valem 1, complementada se valem 0). Um grupo de 2ᵏ células elimina k variáveis.
Exemplo resolvido · Três variáveis
Simplificar F(A,B,C) = Σm(1, 3, 5, 6, 7).
BC
A 00 01 11 10
0 0 1 1 0
1 0 1 1 1
- Os quatro 1 das colunas 01 e 11 formam um grupo de 4 (células m1, m3, m5, m7). Dentro dele só C se mantém igual a 1; A e B mudam. Termo: C.
- Falta o 1 de m6 (A=1, B=1, C=0). O seu vizinho é m7. O grupo de 2 (m6 e m7) mantém A=1 e B=1 e elimina C. Termo: A·B.
Resultado: F = C + A·B. A expressão original, em forma canónica, tinha 5 mintermos de 3 literais cada (15 literais); a simplificada tem 3.
Exemplo resolvido · Detetor de números primos
Projetar um circuito com entrada de 4 bits (ABCD, de 0 a 15) cuja saída F vale 1 quando o número é primo.
- Os primos até 15 são 2, 3, 5, 7, 11 e 13. Logo F = Σm(2, 3, 5, 7, 11, 13).
AB\CD 00 01 11 10
00 0 0 1 1
01 0 1 1 0
11 0 1 0 0
10 0 0 1 0
- m2 e m3 formam um grupo de 2 (A=0, B=0, C=1): Ā·B̄·C.
- m3 e m11 formam um grupo de 2 (B=0, C=1, D=1): B̄·C·D.
- m5 e m13 formam um grupo de 2 (B=1, C=0, D=1): B·C̄·D.
- Falta m7: junta-se a m3 (A=0, C=1, D=1): Ā·C·D.
Resultado: F = Ā·B̄·C + B̄·C·D + B·C̄·D + Ā·C·D. Quatro portas AND (de 3 entradas) e uma OR de 4 entradas. A célula m7 também podia juntar-se a m5 (Ā·B·D); as duas soluções têm o mesmo custo.
Condições indiferentes (don't care)
Há situações em que certas combinações de entrada nunca acontecem (por exemplo, os códigos 1010 a 1111 num BCD) ou em que o valor da saída não interessa. Marcam-se no mapa com X e podem ser usadas como 1 ou como 0, o que for mais conveniente para fazer grupos maiores. Cada X só entra num grupo se ajudar.
Exemplo resolvido · Segmento "a" de um mostrador de 7 segmentos
Um descodificador BCD para 7 segmentos acende o segmento a (o de cima) nos dígitos 0, 2, 3, 5, 6, 7, 8 e 9 e mantém-no apagado em 1 e 4. Os códigos 10 a 15 são indiferentes.
AB\CD 00 01 11 10
00 1 0 1 1
01 0 1 1 1
11 X X X X
10 1 1 X X
- As colunas 11 e 10 formam o grupo de 8 de C=1 (com os indiferentes): termo C.
- A linha A=1 inteira (m8 e m9 a 1, o resto indiferentes) é um grupo de 8: A.
- m5, m7 e os X m13, m15 formam um grupo de 4: B·D.
- m0 e m8 (e, pelo cíclico, m2 e m10): os quatro cantos formam B̄·D̄, que cobre o 0 e o 8.
Resultado: a = A + C + B·D + B̄·D̄. Nota que 9 (1001) fica coberto por A e 5 (0101) por B·D.
Forma POS no mapa de Karnaugh
Se se agruparem os zeros em vez dos uns, obtém-se o complemento da função em forma SOP. Complementando esse resultado com De Morgan, aparece a função em produto de somas.
Exemplo resolvido · POS por agrupamento de zeros
Simplificar F(A,B,C) = Σm(0, 1, 3, 7) em forma POS.
BC
A 00 01 11 10
0 1 1 1 0
1 0 0 1 0
- Os zeros estão em m2, m4, m5 e m6. Grupos de zeros: m4 e m5 (A=1, B=0) dão A·B̄; m2 e m6 (B=1, C=0) dão B·C̄.
- Complemento: F̄ = A·B̄ + B·C̄.
- De Morgan: F = ¬(A·B̄)·¬(B·C̄) = (Ā + B)·(B̄ + C).
Resultado: F = (Ā + B)·(B̄ + C). Verificação em m3 (A=0, B=1, C=1): (1 + 1)·(0 + 1) = 1, correto.
7. Circuitos combinacionais
Definição e método de projeto
Num circuito combinacional, a saída depende apenas da combinação atual das entradas. Não há memória: se as entradas voltam a ter o mesmo valor, a saída volta a ter o mesmo valor. O projeto segue sempre os mesmos passos, e é este roteiro que os critérios de avaliação pedem para cumprires:
- Especificar o problema: entradas, saídas e regra de funcionamento.
- Construir a tabela de verdade.
- Obter a expressão (SOP ou POS) a partir da tabela.
- Simplificar (Boole ou Karnaugh).
- Desenhar o circuito, escolhendo as portas e os CI.
- Simular e testar todas as combinações; só depois montar.
Meio somador (half adder)
Soma dois bits A e B e produz a soma S e o transporte de saída Cout. Pela tabela: S = A ⊕ B e Cout = A·B.
| A | B | S | Cout |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Somador completo (full adder)
Soma três bits: A, B e o transporte de entrada Cin. É o bloco que permite somar números de vários bits, porque cada coluna recebe o transporte da anterior.
Exemplo resolvido · Projeto do full adder
- Tabela de verdade:
| A | B | Cin | S | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
- Soma: S = Σm(1, 2, 4, 7). No mapa de Karnaugh os uns estão em tabuleiro de xadrez, sem nenhum vizinho, por isso não há simplificação por agrupamento. Reconhece-se que S vale 1 quando o número de uns nas entradas é ímpar: S = A ⊕ B ⊕ Cin.
- Transporte: Cout = Σm(3, 5, 6, 7). No mapa, três grupos de 2 (como na função de maioria): Cout = A·B + A·Cin + B·Cin. Equivalente: Cout = A·B + Cin·(A ⊕ B), que reaproveita o XOR já calculado para S.
- Circuito: dois meios somadores e uma porta OR. O primeiro soma A e B; o segundo soma o resultado com Cin; o OR junta os dois transportes.
Somador de n bits
Ligando em cadeia n full adders (o Cout de cada um vai ao Cin do seguinte), obtém-se um somador de n bits com transporte propagado (ripple carry). O CI 7483 é um somador binário completo de 4 bits. É a base da unidade aritmética e lógica (ALU) de um processador. O seu defeito é o atraso: o transporte tem de atravessar todos os estágios, por isso somadores rápidos usam lógica de transporte antecipado.
Exemplo resolvido · Somador/subtrator
Um somador de 4 bits pode também subtrair. Põe-se um XOR em cada entrada B, com um sinal de controlo M ligado à outra entrada de cada XOR e ao Cin do primeiro full adder.
- Com M = 0: B⊕0 = B e Cin = 0, logo S = A + B.
- Com M = 1: B⊕1 = B̄ (complemento a 1) e Cin = 1, logo S = A + B̄ + 1 = A − B, em complemento a 2.
Comparador
Compara dois números e indica A>B, A=B ou A
Descodificador
Um descodificador n para 2ⁿ ativa uma única saída consoante o código de entrada: cada saída é um mintermo. O 2 para 4 tem entradas A1 e A0 e saídas Y0 = Ā1·Ā0, Y1 = Ā1·A0, Y2 = A1·Ā0 e Y3 = A1·A0. O 74138 é um descodificador 3 para 8 com saídas ativas a nível baixo e três entradas de habilitação (uma ativa a alto e duas a baixo). Com as entradas de habilitação desligadas, nenhuma saída é ativada.
Multiplexer e demultiplexer
Um multiplexer (MUX) escolhe uma de 2ⁿ entradas de dados e leva-a à saída, consoante n linhas de seleção. O MUX 4 para 1 tem Y = S̄1·S̄0·I0 + S̄1·S0·I1 + S1·S̄0·I2 + S1·S0·I3. CI úteis: 74157 (quatro MUX 2 para 1), 74153 (dois MUX 4 para 1), 74151 (MUX 8 para 1). O demultiplexer faz o inverso: encaminha uma entrada para uma de 2ⁿ saídas; um descodificador com a entrada de habilitação usada como dados funciona como demultiplexer.
Exemplo resolvido · Função com multiplexer
Implementar F = Σm(1, 2, 4, 7) com um MUX 4 para 1, usando A e B como seleção e C como dados.
- Para cada valor de AB, ver o que F faz em função de C:
| AB | Mintermos | F em função de C | Entrada |
|---|---|---|---|
| 00 | m0, m1 | F = C (só m1 vale 1) | I0 = C |
| 01 | m2, m3 | F = C̄ (só m2) | I1 = C̄ |
| 10 | m4, m5 | F = C̄ (só m4) | I2 = C̄ |
| 11 | m6, m7 | F = C (só m7) | I3 = C |
- Ligar I0 = I3 = C e I1 = I2 = C̄ (um inversor). Esta função é A⊕B⊕C: vale 1 quando o número de uns é ímpar, e é por isso o bit de paridade par de três bits (capítulo 3).
Codificador, codificador de prioridade e mostrador de 7 segmentos
O codificador faz o inverso do descodificador: 2ⁿ linhas para n bits. Se várias linhas puderem estar ativas ao mesmo tempo, usa-se um codificador de prioridade, que dá a saída da linha de maior prioridade (o 74148 é um codificador de prioridade de 8 para 3, com entradas e saídas ativas a baixo).
Um mostrador de 7 segmentos (segmentos de a a g) mostra algarismos acendendo segmentos. O 7447 converte BCD para os sete segmentos, com saídas ativas a baixo, para mostradores de ânodo comum; o 7448 faz a mesma conversão para mostradores de cátodo comum. Cada segmento é uma função de 4 variáveis, simplificável por Karnaugh com os códigos 10 a 15 como indiferentes (capítulo 6).
Atrasos e picos indesejados (glitches)
As portas reais têm atraso de propagação (alguns nanossegundos). Se dois caminhos levam o mesmo sinal ao mesmo ponto, ele pode chegar em instantes diferentes e produzir um pico indesejado (glitch) na saída. É inofensivo num LED, mas pode ser destrutivo se alimentar um contador. O remédio habitual é sincronizar a saída com um flip-flop.
8. Componentes eletrónicos, simbologia e datasheets
Os cinco componentes de base
Um circuito lógico real não é feito só de portas: precisa de componentes que as alimentam, ligam ao mundo exterior e protegem.
Resistência (o componente, a que o referencial chama resistor). Limita a corrente. Mede-se em ohm (Ω) e obedece à lei de Ohm, V = R·I. O valor lê-se pelas cores: os dois primeiros anéis são algarismos, o terceiro é o multiplicador (potência de 10) e o quarto é a tolerância. Cores dos algarismos: preto 0, castanho 1, vermelho 2, laranja 3, amarelo 4, verde 5, azul 6, violeta 7, cinzento 8, branco 9. Assim, 330 Ω é laranja-laranja-castanho e 4,7 kΩ é amarelo-violeta-vermelho.
Condensador. Armazena carga. A sua capacidade mede-se em farad (F), na prática em µF, nF ou pF. Um condensador de 100 nF ligado entre V_CC e GND junto de cada CI (condensador de desacoplamento) absorve os picos de corrente das portas ao comutar. Com uma resistência, forma um circuito RC, de constante de tempo τ = R·C.
Díodo. Deixa passar corrente num só sentido, do ânodo para o cátodo. O LED é um díodo que emite luz quando conduz, com uma queda de tensão típica de 1,8 a 2,2 V, e tem sempre de levar uma resistência em série.
Transístor. Funciona como interruptor controlado por um sinal pequeno. Um NPN fecha entre coletor e emissor quando a base recebe corrente. Serve para ligar cargas que as portas não conseguem alimentar diretamente (um relé, um avisador sonoro, ou buzzer).
Indutor (bobina). Armazena energia em campo magnético e opõe-se a variações de corrente. Aparece em filtros e em fontes comutadas; num relé, a sua bobina gera um pico de tensão ao desligar, e por isso leva um díodo em antiparalelo (de roda livre).
Exemplo resolvido · Resistência para um LED
Ligar um LED vermelho (queda de 2 V, corrente de 10 mA) a uma alimentação de 5 V.
- A resistência tem de suportar a diferença: 5 − 2 = 3 V.
- R = V / I = 3 / 0,010 = 300 Ω.
- O valor calculado, 300 Ω, fica a meio entre 270 Ω e 330 Ω da série normalizada E12. Escolhe-se o valor normalizado imediatamente acima, 330 Ω (laranja-laranja-castanho), que mantém a corrente abaixo de 10 mA.
- Corrente real: 3 / 330 ≈ 9,1 mA, perfeitamente segura. Potência na resistência: 3 × 0,0091 ≈ 27 mW, bem abaixo de ¼ W.
Exemplo resolvido · Transístor como interruptor
Uma porta 74HC00 alimentada a 5 V quer ligar um avisador sonoro (buzzer) de 5 V que consome 20 mA, através de um transístor NPN. Segundo o datasheet da Texas Instruments, a saída em nível alto fornece 4 mA com uma tensão garantida de pelo menos V_OH = 3,84 V (a 4,5 V de alimentação, com I_OH = −4 mA).
- Para garantir saturação usa-se um ganho "forçado" de 10: I_B = 20 / 10 = 2 mA.
- A tensão na resistência de base é, no mínimo, V_OH − V_BE = 3,84 − 0,7 = 3,14 V (a queda base-emissor é cerca de 0,7 V).
- R_B = 3,14 / 0,002 = 1570 Ω. Escolhe-se o valor normalizado 1,5 kΩ (castanho-verde-vermelho), abaixo do calculado para a corrente não ficar aquém do necessário: I_B ≥ 3,14 / 1500 ≈ 2,1 mA, acima dos 2 mA pedidos e abaixo dos 4 mA a que o datasheet garante V_OH ≥ 3,84 V.
Com uma porta TTL (74LS00) este circuito não funciona: em nível alto a saída só fornece I_OH = −0,4 mA, cinco vezes menos do que os 2 mA de que a base precisa. Para esta carga usa-se uma porta de outra família, como a 74HC.
Pull-up e pull-down
Uma entrada digital não pode ficar "ao ar", porque apanha ruído e lê valores aleatórios. Se estiver ligada a um botão, usa-se uma resistência (tipicamente 10 kΩ) que puxa a entrada para um nível definido quando o botão está aberto: pull-down para GND (o botão liga a V_CC) ou pull-up para V_CC (o botão liga a GND).
Simbologia ANSI/IEEE
Os esquemas elétricos e eletrónicos seguem símbolos normalizados. Os dos componentes de base, desenhados em texto, são estes:
Resistência ----[ R ]---- (retângulo; em alternativa, linha em zigue-zague)
Condensador ----| |---- (duas placas paralelas)
Díodo ----|>|---- (ânodo à esquerda, cátodo à direita, no lado da barra)
LED ----|>|---- (díodo com duas setas a sair)
\ \
Transístor NPN C (coletor)
/
B ----- | (a seta no emissor aponta para fora)
\>
E (emissor)
Massa (GND) |
---
-
Alimentação (V_CC) +5 V
^
|
As portas lógicas aparecem em dois estilos, ambos previstos na norma ANSI/IEEE 91 (o retangular coincide com o da IEC 60617-12). O desenho distintivo identifica a função pela forma do corpo; o retangular usa a mesma caixa para todas e escreve lá dentro o símbolo da função. O círculo marca sempre uma inversão, em qualquer dos estilos.
NOT (Y = Ā) AND (Y = A·B) NAND (Y = ¬(A·B))
|\ ____ ____
A ----| >o---- Y A ---| \ A ---| \
|/ | )--- Y | )o-- Y
B ---|____/ B ---|____/
OR (Y = A + B) NOR (Y = ¬(A+B)) XOR (Y = A⊕B)
_____ _____ _____
A --\ \ A --\ \ A -\\ \
) )--- Y ) )o-- Y )) )--- Y
B --/_____/ B --/_____/ B -//_____/
A XNOR desenha-se como a XOR com um círculo na saída. No estilo retangular, o rótulo dentro da caixa identifica a função:
| Porta | Rótulo na caixa | Círculo na saída |
|---|---|---|
| NOT | 1 | sim (o círculo é o que a distingue de um simples amplificador) |
| AND | & | não |
| NAND | & | sim |
| OR | ≥1 | não |
| NOR | ≥1 | sim |
| XOR | =1 | não |
| XNOR | =1 | sim |
AND (&) OR (≥1) NAND (&, círculo)
A --+-----+ A --+------+ A --+-----+
| & |--- Y | >=1 |--- Y | & o--- Y
B --+-----+ B --+------+ B --+-----+
Saber ler os dois estilos evita enganos com esquemas de origens diferentes.
Para ler um esquema: identificar a alimentação e a massa, seguir o sinal da esquerda para a direita (entradas à esquerda, saídas à direita), reconhecer cada porta pelo símbolo, dar um nome a cada fio intermédio e anotar o valor dos componentes.
Exemplo resolvido · Ler um esquema
Dado o esquema (estilo retangular), obter a expressão de F e a tabela de verdade.
+-----+
A -----| & |
| |------ X ------+
B -----| | | +------+
+-----+ +---| >=1 |
| |----- F
+-----+ +---| |
C -----| 1 o|------ Y ------+ +------+
+-----+
- A primeira caixa tem "&" e duas entradas: é uma AND, logo X = A·B.
- A segunda caixa tem "1" e um círculo na saída: é um NOT, logo Y = C̄.
- A terceira caixa tem "≥1": é uma OR de X e Y, logo F = X + Y = A·B + C̄.
- Tabela, com uma coluna por fio intermédio (3 entradas, 8 linhas):
| A | B | C | X = A·B | Y = C̄ | F = X + Y |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 1 |
F vale 1 nas linhas 000, 010, 100, 110 e 111: F = Σm(0, 2, 4, 6, 7). Verificação: com C = 0 o termo C̄ vale 1 e F = 1 sempre; com C = 1, F = A·B, que só vale 1 em 111. ✓
Exemplo resolvido · Definir os componentes e o layout
Montar em breadboard o alarme do capítulo 4, F = S·(P + J), com CI 74HC (CMOS, a família que usamos na montagem).
- Portas necessárias: uma OR (P + J) e uma AND (com S). Escolhem-se o 74HC32 (4 OR) e o 74HC08 (4 AND), que têm a mesma disposição de pinos do 7400 (ver «Ler o pinout de um 7400», mais à frente neste capítulo).
- Lista de componentes:
| Quantidade | Componente | Função |
|---|---|---|
| 1 | 74HC32 (U1) | OR de P e J |
| 1 | 74HC08 (U2) | AND de X com S |
| 3 | interruptores | entradas P, J e S |
| 3 | resistências de 10 kΩ (castanho-preto-laranja) | pull-down das três entradas |
| 1 | LED vermelho | indica F |
| 1 | resistência de 680 Ω (azul-cinzento-castanho) | limita a corrente do LED |
| 2 | condensadores de 100 nF | desacoplamento, um por CI |
| 1 | fonte de 5 V e fios | alimentação e ligações |
- Resistência do LED: a saída do 74HC garante V_OH ≥ 3,84 V com I_OH = −4 mA (datasheet da Texas Instruments). Com um LED vermelho de 2 V e R = 680 Ω, a corrente é pelo menos (3,84 − 2) / 0,68 kΩ ≈ 2,7 mA, dentro do que a porta fornece.
- Layout: U1 e U2 lado a lado, a cavalo sobre o canal central, com a marca no pino 1 virada para a esquerda. Barramento + a 5 V e barramento − a GND. Cada interruptor liga o nó de entrada a +5 V, e a resistência de 10 kΩ liga o mesmo nó a GND. Ligações dos CI:
| Pino | U1 (74HC32) | U2 (74HC08) |
|---|---|---|
| 1 | P | X (saída de U1, pino 3) |
| 2 | J | S |
| 3 | saída X, vai ao pino 1 de U2 | saída F, vai à resistência de 680 Ω e ao LED |
| 4, 5, 9, 10, 12, 13 | GND (portas livres, entradas nunca soltas em CMOS) | GND (portas livres) |
| 6, 8, 11 | em aberto (saídas das portas livres) | em aberto |
| 7 | GND | GND |
| 14 | +5 V | +5 V |
- LED: o ânodo (perna longa) liga à resistência de 680 Ω e o cátodo a GND. Antes de ligar a alimentação, verificar de novo os pinos 7 e 14 de cada CI.
Interpretação de datasheets
O datasheet é o documento do fabricante que descreve um CI. Nunca se monta um circuito sem o consultar. As secções mais úteis são:
| Secção | O que diz |
|---|---|
| Descrição e características | Função do CI, família, tensão de alimentação |
| Ligações dos pinos (pinout) | Qual pino é entrada, saída, V_CC e GND |
| Tabela de função | O que o CI faz para cada combinação das entradas |
| Valores máximos absolutos | Limites que não podem ser excedidos |
| Condições de funcionamento recomendadas | Tensão e temperatura de uso normal |
| Características elétricas | V_IH, V_IL, V_OH, V_OL, correntes, consumo |
| Características de comutação | Atrasos de propagação |
Exemplo resolvido · Ler o pinout de um 7400
O 7400 tem 4 portas NAND de 2 entradas em 14 pinos. Ligações: pinos 1 e 2 são as entradas da primeira porta e o pino 3 a sua saída; 4 e 5 entradas e 6 saída da segunda; 9 e 10 entradas e 8 saída da terceira; 12 e 13 entradas e 11 saída da quarta. O pino 7 é GND e o pino 14 é V_CC. O 7402 (NOR) não tem a mesma disposição: nas portas 1 e 2 a saída vem antes das entradas (porta 1: saída 1, entradas 2 e 3; porta 2: saída 4, entradas 5 e 6), mas nas portas 3 e 4 vem depois (porta 3: entradas 8 e 9, saída 10; porta 4: entradas 11 e 12, saída 13). O GND está no pino 7 e o V_CC no 14. Trocar de CI sem consultar o datasheet é um erro clássico de montagem.
A marca de referência (um entalhe semicircular ou um ponto) identifica o pino 1: com o entalhe para a esquerda, o pino 1 é o do canto inferior esquerdo e os pinos contam-se no sentido contrário ao dos ponteiros do relógio.
9. Famílias lógicas
O que é uma família
Uma família lógica é um conjunto de CI com a mesma tecnologia de fabrico e as mesmas características elétricas, de modo que se ligam entre si sem circuitos de adaptação. As duas grandes tecnologias são a TTL (Transistor-Transistor Logic, baseada em transístores bipolares) e a CMOS (Complementary MOS, baseada em transístores de efeito de campo complementares).
Parâmetros funcionais
| Parâmetro | Significado |
|---|---|
| V_IH(min) | Tensão mínima que a entrada aceita como nível alto |
| V_IL(max) | Tensão máxima que a entrada aceita como nível baixo |
| V_OH(min) | Tensão mínima garantida à saída em nível alto |
| V_OL(max) | Tensão máxima garantida à saída em nível baixo |
| Margem de ruído | Folga entre o que uma saída garante e o que a entrada seguinte exige |
| Atraso de propagação (t_p) | Tempo entre uma variação na entrada e a variação na saída |
| Dissipação de potência | Consumo, que em CMOS cresce com a frequência |
| Fan-out | Número de entradas que uma saída consegue alimentar |
As margens de ruído calculam-se por N_MH = V_OH(min) − V_IH(min) (nível alto) e N_ML = V_IL(max) − V_OL(max) (nível baixo). Quanto maiores, mais imune é o circuito a interferências.
Exemplo resolvido · Margens de ruído e fan-out
Valores do 74LS00 (datasheet da Texas Instruments, com a alimentação a 5 V): V_OH(min) = 2,5 V, V_OL(max) = 0,5 V, V_IH(min) = 2,0 V, V_IL(max) = 0,8 V, I_OH = −0,4 mA, I_OL(max) = 8 mA, I_IH = 20 µA e I_IL = −0,4 mA (o sinal negativo indica corrente que sai da entrada).
- N_MH = 2,5 − 2,0 = 0,5 V.
- N_ML = 0,8 − 0,5 = 0,3 V. A margem mais pequena é a que limita a imunidade ao ruído.
- Fan-out no nível baixo = I_OL / I_IL = 8 / 0,4 = 20 entradas.
- Fan-out no nível alto = I_OH / I_IH = 0,4 mA / 20 µA = 400 / 20 = 20 entradas.
- O fan-out da saída é o menor dos dois valores: 20.
Num 7400 da série standard os valores são outros (V_OH(min) = 2,4 V, I_OL = 16 mA, I_IL = −1,6 mA, I_IH = 40 µA), por isso o datasheet certo tem de ser o do CI que se usa.
Exemplo resolvido · Atraso de propagação e consumo
Analisar o desempenho da XOR de 4 NAND do capítulo 5, feita com um 74LS00 (datasheet da Texas Instruments: t_PLH típico 9 ns, t_PHL típico 10 ns, máximo de 15 ns em ambos).
- O caminho mais longo, o caminho crítico, atravessa 3 portas: A (ou B) → N1 → N2 (ou N3) → Y. O caminho A → N2 → Y tem apenas 2.
- Atraso típico do caminho crítico: 3 × 10 ns = 30 ns. No pior caso: 3 × 15 ns = 45 ns.
- A saída só é válida depois desse tempo, por isso as entradas têm de manter-se estáveis pelo menos 45 ns. Isto limita a frequência de variação das entradas a cerca de 1 / 45 ns ≈ 22 MHz (≈ 33 MHz com os valores típicos).
- Consumo: o datasheet dá, para o CI inteiro (quatro portas), I_CC típica de 0,8 mA com as saídas em nível alto e de 2,4 mA com as saídas em nível baixo. A 5 V, isso são 4 mW a 12 mW. Numa série CMOS o consumo em repouso é muito menor, mas cresce com a frequência.
TTL e CMOS
| Característica | TTL (74, 74LS) | CMOS (4000B, 74HC) |
|---|---|---|
| Alimentação | 5 V, com pouca tolerância | Gama larga, consoante a série |
| Consumo em repouso | Elevado | Muito baixo |
| Velocidade | Boa | Comparável (74HC e 74LS) |
| Imunidade ao ruído | Razoável | Elevada |
| Sensibilidade a estática | Baixa | Alta |
| Entradas não utilizadas | Evitar deixar soltas | Nunca deixar soltas |
As séries atuais mais usadas em ensino e em protótipos são a 74HC (CMOS de alta velocidade) e a 74LS. A 74HCT é CMOS com níveis de entrada compatíveis com TTL, o que permite ligar saídas TTL a entradas CMOS. A série 4000B é CMOS de gama larga de alimentação e velocidade modesta.
Boas práticas com famílias lógicas
- Entradas não utilizadas: ligá-las a V_CC ou a GND (conforme a função: uma entrada de AND que sobra liga-se a V_CC e a de uma OR liga-se a GND), ou ligá-las a outra entrada da mesma porta. Em CMOS isto é obrigatório.
- Não misturar famílias sem verificar os níveis: confirmar V_OH(min) da saída contra V_IH(min) da entrada e V_OL(max) contra V_IL(max).
- Saídas "coletor aberto" (open collector) precisam de uma resistência de pull-up e permitem juntar várias saídas no mesmo fio (lógica "e" por fios); as saídas tri-state têm um terceiro estado de alta impedância, que permite vários dispositivos partilhar um barramento.
- Não ligar saídas de portas diretamente umas às outras (curto-circuito entre níveis opostos), exceto se forem de coletor aberto ou tri-state.
- Manusear CMOS com cuidado com a eletricidade estática: tocar primeiro numa superfície ligada à terra.
10. Simulação e montagem em breadboard
Porquê simular primeiro
Simular antes de montar poupa tempo e componentes: um erro de lógica descobre-se em segundos no ecrã, enquanto na placa obriga a procurar um fio mal posto entre dezenas. A simulação testa a lógica; a montagem testa também a realidade (alimentação, contactos, ruído). Um bom projeto faz as duas coisas, por esta ordem.
Software de simulação
| Programa | Características |
|---|---|
| Logisim Evolution | Desktop, gratuito, desenho por portas, ideal para combinacional e sequencial |
| CircuitVerse | Online, partilha de projetos e simulação de portas |
| Falstad | Simulação analógica e digital animada, mostra correntes e tensões |
| Tinkercad Circuits | Online, mostra a breadboard virtual e CI reais |
Procedimento de simulação
- Criar o projeto e guardá-lo com um nome claro.
- Colocar as entradas (interruptores ou pinos de entrada) e as saídas (LED ou pinos de saída), com nomes iguais aos das variáveis.
- Colocar as portas pela ordem do esquema e ligar com fios, confirmando que cada fio termina num pino (um fio solto não conduz).
- Testar alternando as entradas e comparando a saída com a tabela de verdade. A maior parte dos simuladores tem uma ferramenta para gerar a tabela de verdade automática do circuito, e outra para criar diagramas temporais.
- Registar os resultados e corrigir.
Um plano de testes decente cobre todas as combinações de entrada (2ⁿ), e no caso de circuitos sequenciais testa também as sequências críticas, os valores-limite e o reset.
A placa de ensaio (breadboard)
A breadboard permite montar circuitos sem soldar. A sua estrutura:
- Zona central: furos ligados em tiras de 5 (colunas na vertical, rotuladas de a a e e de f a j). Os 5 furos da mesma tira estão ligados entre si; as duas metades estão separadas pelo canal central.
- Barramentos laterais de alimentação: linhas longas, normalmente marcadas com + e −, destinadas à alimentação e à massa. Em muitas placas estão interrompidos a meio, e se for o caso é preciso uni-los com um fio.
- Os CI de 14 pinos (DIP) montam-se a cavalo sobre o canal central, de modo que cada pino fica numa tira diferente e livre para ligar fios.
Boas práticas de montagem
- Desligar a alimentação antes de mexer em fios ou componentes.
- Montar primeiro V_CC e GND nos barramentos, e levar a alimentação a cada CI com fios curtos (pino 14 e pino 7 num 7400).
- Usar fios rígidos de cores consistentes: vermelho para V_CC, preto para GND, outras cores para os sinais.
- Colocar um condensador de 100 nF junto de cada CI.
- Ligar as entradas de teste a interruptores com resistência de pull-down e as saídas a LED com resistência em série. O valor depende da família: com um 74HC, que garante V_OH ≥ 3,84 V até 4 mA em nível alto, usa-se 680 Ω (cerca de 3 mA no LED); uma saída TTL (74LS) só fornece 0,4 mA em nível alto e absorve até 8 mA em nível baixo, por isso o LED liga-se entre +5 V e a saída, com 470 Ω.
- Montar por blocos, testar cada bloco, e só depois juntar.
- Verificar a polaridade do LED (perna longa no ânodo) e dos CI (marca no pino 1).
Exemplo resolvido · Montar a XOR com 4 NAND num 74HC00
O circuito do capítulo 5, montado num 74HC00, que tem a mesma disposição de pinos do 7400:
| Porta | Entradas (pinos) | Ligação | Saída (pino) |
|---|---|---|---|
| 1 | 1 e 2 | A e B | 3 (N1) |
| 2 | 4 e 5 | A e pino 3 | 6 (N2) |
| 3 | 9 e 10 | pino 3 e B | 8 (N3) |
| 4 | 12 e 13 | pinos 6 e 8 | 11 (Y) |
- Alimentar: pino 14 a +5 V, pino 7 a GND, 100 nF entre os dois.
- Ligar A e B a dois interruptores com pull-down.
- Ligar o pino 11 a um LED vermelho (queda de 2 V) com uma resistência de 680 Ω para GND. A saída do 74HC00 garante V_OH ≥ 3,84 V com I_OH = −4 mA, por isso a corrente no LED é pelo menos (3,84 − 2) / 680 ≈ 2,7 mA, abaixo dos 4 mA a que o datasheet garante esse V_OH.
- Testar as quatro combinações: o LED só acende com A ≠ B.
Com um 74LS00 esta ligação não serve: o datasheet limita a saída em nível alto a I_OH = −0,4 mA e o LED ficaria quase apagado. Em TTL liga-se o LED entre +5 V e o pino 11, com 470 Ω, e o LED acende quando Y = 0, ou seja, com A = B.
Instrumentos de medida
- Multímetro: tensões, resistências e continuidade (o apito confirma contactos).
- Fonte de alimentação: 5 V estáveis e, se possível, com limite de corrente.
- Ponta lógica: indica se um nó está em nível alto, baixo ou em alta impedância.
- Osciloscópio: mostra a forma de onda no tempo (níveis, atrasos, picos indesejados).
- Gerador de funções: produz o sinal de relógio (clock) dos circuitos sequenciais, uma onda quadrada que alterna entre nível baixo e nível alto.
Se não funciona
Seguir uma ordem fixa poupa tempo: (1) alimentação (medir V_CC no pino de cada CI); (2) massa comum em todos os componentes; (3) pinout verificado contra o datasheet; (4) entradas soltas a baixo ou a alto; (5) testar bloco a bloco, de trás para a frente. A maior parte dos defeitos é uma ligação em falta ou trocada, não um CI avariado.
11. Circuitos sequenciais
Memória e clock
Num circuito sequencial, a saída depende das entradas e do estado anterior: o circuito tem memória. O elemento de memória elementar é o flip-flop e as mudanças de estado são coordenadas por um sinal periódico, o clock. Os circuitos sequenciais são o que torna possíveis os contadores, os registos e os processadores.
Latches e flip-flops
O latch SR (set-reset) pode fazer-se com duas portas NOR realimentadas: S=1 põe a saída Q a 1 (set), R=1 põe-na a 0 (reset), S=R=0 mantém o estado, e S=R=1 é proibido por ser ambíguo. Um latch é sensível ao nível do sinal de controlo; um flip-flop é sensível ao flanco do clock (a transição de 0 para 1, o flanco ascendente, ou de 1 para 0, o flanco descendente), o que o torna previsível em sistemas síncronos.
| Tipo | Comportamento no flanco ativo | Equação de Q⁺ |
|---|---|---|
| D | Q copia D | Q⁺ = D |
| T | T=1 inverte, T=0 mantém | Q⁺ = T ⊕ Q |
| JK | J=K=0 mantém; J=1,K=0 põe a 1; J=0,K=1 põe a 0; J=K=1 inverte | Q⁺ = J·Q̄ + K̄·Q |
CI clássicos: 7474 (dois flip-flops D) e 7476 (dois flip-flops JK).
Registos e contadores
- Registo: n flip-flops D com o mesmo clock guardam uma palavra de n bits.
- Registo de deslocamento: cada flip-flop passa o bit ao seguinte a cada clock, o que converte série em paralelo e vice-versa (por exemplo o 74194, universal de 4 bits).
- Contador binário: conta os pulsos de clock. O 74161 é um contador síncrono de 4 bits (0 a 15) e o 7490 é um contador de década (0 a 9).
- Divisor de frequência: cada flip-flop T divide a frequência por 2, portanto n flip-flops dividem por 2ⁿ. Um clock de 1 kHz num contador de 3 bits dá, no bit mais significativo, 1000/8 = 125 Hz.
Máquinas de estados finitos (FSM)
Uma FSM modela-se com um diagrama de estados e implementa-se com flip-flops (o estado) e lógica combinacional (próximo estado e saídas). Na máquina de Moore, a saída depende só do estado; na de Mealy, depende do estado e das entradas.
Exemplo resolvido · Contador módulo 3
Projetar um contador que conta 00, 01, 10, 00, 01… com dois flip-flops D (Q1 é o bit mais significativo).
- Tabela de transições:
| Q1 Q0 atual | Q1⁺ Q0⁺ seguinte |
|---|---|
| 00 | 01 |
| 01 | 10 |
| 10 | 00 |
| 11 (não usado) | 10 |
- Num flip-flop D, a entrada é o valor desejado do estado seguinte: D1 = Q0 (Q1⁺ vale 1 só quando o estado é 01 e quando é 11) e D0 = Q̄1·Q̄0 (Q0⁺ vale 1 só quando o estado é 00).
- Estado não usado: o 11 foi mandado para 10 em vez de ficar indefinido. Assim, se o circuito arrancar nesse estado, entra na sequência normal num ciclo de clock.
Erros comuns
- Ler os restos da divisão por 2 de cima para baixo. O binário lê-se de baixo para cima; ao contrário, o número fica espelhado.
- Trocar um complemento a 1 por um complemento a 2. Esquecer o "+1" dá um valor errado em uma unidade.
- Ignorar o overflow. Dois positivos que somam um valor com MSB 1 não dão um negativo: o resultado não cabe.
- Confiar na paridade para corrigir erros. Só deteta um número ímpar de bits trocados.
- Ordenar os eixos do mapa de Karnaugh em binário (00, 01, 10, 11) em vez de Gray (00, 01, 11, 10).
- Fazer grupos de 3, 5 ou 6 células, ou em diagonal, ou deixar de usar o caráter cíclico do mapa.
- Aplicar De Morgan e esquecer um complemento, ou trocar o operador sem complementar as variáveis.
- Esquecer V_CC e GND nos CI, ou o condensador de desacoplamento.
- Deixar entradas soltas, sobretudo em CMOS.
- LED sem resistência em série.
- Montar sem simular, ou testar só uma combinação de entradas em vez de todas.
Glossário
- BCD: código em que cada algarismo decimal usa 4 bits.
- Breadboard: placa de ensaio para montar circuitos sem soldar.
- CMOS: tecnologia de CI de baixo consumo, com transístores de efeito de campo complementares.
- Combinacional: circuito sem memória, cuja saída depende só das entradas atuais.
- Complemento a dois: representação de inteiros com sinal em que o negativo se obtém invertendo os bits e somando 1.
- Datasheet: documento do fabricante que descreve as características de um componente.
- De Morgan: teoremas que relacionam o complemento de um produto com a soma dos complementos.
- Flanco: transição do sinal de relógio, de 0 para 1 (ascendente) ou de 1 para 0 (descendente).
- Flip-flop: elemento de memória de 1 bit, sensível ao flanco do clock.
- Gray: código em que valores consecutivos diferem num único bit.
- Latch: elemento de memória sensível ao nível do sinal de controlo.
- Mintermo: produto de todas as variáveis que vale 1 numa só linha da tabela.
- Overflow: resultado que não cabe no número de bits disponível.
- Paridade: bit adicional usado para detetar erros.
- Porta universal: porta (NAND ou NOR) com a qual se constrói qualquer função.
- Pull-up e pull-down: resistência que fixa o nível de uma entrada quando nada a comanda.
- Resistência (o componente, a que o referencial chama resistor): limita a corrente e mede-se em ohm (Ω).
- Sequencial: circuito com memória, cuja saída depende do estado anterior.
- TTL: tecnologia de CI de transístores bipolares, alimentada a 5 V.
Síntese
Os circuitos digitais representam tudo com bits: binário e hexadecimal, inteiros em complemento a dois, códigos BCD, Gray e ASCII, e paridade para detetar erros. Um circuito descreve-se por tabela de verdade, expressão booleana ou esquema; a álgebra de Boole, os teoremas de De Morgan e o mapa de Karnaugh simplificam-no, e as portas NAND e NOR são universais. O projeto combinacional segue sempre o roteiro especificar, tabela, simplificar, desenhar, simular, montar. A simbologia e o datasheet dizem como ligar cada CI, e as famílias TTL e CMOS diferem em tensão, consumo e sensibilidade. A simulação valida a lógica e a breadboard valida a montagem. Os circuitos sequenciais juntam memória à lógica combinacional.
Exercícios resolvidos
1. Converte 2025₁₀ para hexadecimal e confirma pelo binário.
Resolução: 2025 ÷ 16 = 126 resto 9; 126 ÷ 16 = 7 resto 14 (E); 7 ÷ 16 = 0 resto 7. Lendo de baixo para cima: 7E9₁₆. Verificação: 7×256 + 14×16 + 9 = 1792 + 224 + 9 = 2025. ✓ Em binário: 0111 1110 1001₂.
2. Converte 0,A4₁₆ para decimal e 5,5625₁₀ para hexadecimal.
Resolução: 0,A4₁₆ = 10/16 + 4/256 = 0,625 + 0,015625 = 0,640625. Para 5,5625: a parte inteira é 5; 0,5625 × 16 = 9,0, algarismo 9 e resto 0. Resultado: 5,9₁₆. Verificação: 5 + 9/16 = 5,5625. ✓
3. Simplifica no mapa de Karnaugh F(A,B,C,D) = Σm(0, 2, 5, 7, 8, 10, 13, 15).
Resolução: os quatro cantos (m0, m2, m8, m10) formam um grupo de 4 com B=0 e D=0: B̄·D̄. O bloco central (m5, m7, m13, m15) é outro grupo de 4 com B=1 e D=1: B·D. Resultado: F = B̄·D̄ + B·D, que é o XNOR de B e D.
4. Implementa F = (A + B)·C̄ só com portas NOR.
Resolução: F = ¬(¬(A+B) + C), por De Morgan. Logo F = NOR( NOR(A,B), C ): duas portas NOR, a primeira com A e B, a segunda com o resultado e C. Teste em A=1, B=0, C=0: NOR(1,0) = 0, NOR(0,0) = 1, e F = (1+0)·1 = 1. ✓
5. Simplifica a função que vale 1 nos dígitos BCD 0, 3, 6 e 9 (códigos 10 a 15 indiferentes).
Resolução: com A como MSB, o grupo A·D cobre o 9 e usa os indiferentes 11, 13 e 15. O 3 junta-se ao indiferente 11 em B̄·C·D. O 6 junta-se ao indiferente 14 em B·C·D̄. O 0 não tem vizinhos úteis e fica como Ā·B̄·C̄·D̄. Resultado: F = Ā·B̄·C̄·D̄ + B̄·C·D + B·C·D̄ + A·D.
6. Lê o esquema e escreve a tabela de verdade. Entradas A, B e C. A primeira caixa tem "≥1" com um círculo na saída e recebe A e B (saída N1). A segunda caixa tem "&" com um círculo na saída e recebe N1 e C. A saída é F.
Resolução: a primeira caixa é uma NOR, N1 = ¬(A + B), e a segunda é uma NAND, F = ¬(N1·C). A saída F só vale 0 quando N1 = 1 e C = 1, ou seja, com A = B = 0 e C = 1 (linha 001). Nas outras sete linhas F = 1. Por Boole: F = ¬(Ā·B̄·C) = A + B + C̄. ✓
7. Define a lista de componentes de um circuito em que um LED acende quando o interruptor X e o interruptor Y estão ambos fechados, usando um 74HC08.
Resolução: 1 CI 74HC08 (usa-se a porta 1: entradas nos pinos 1 e 2, saída no pino 3); 2 interruptores com 2 resistências de pull-down de 10 kΩ; 1 LED com uma resistência de 680 Ω entre o pino 3 e o ânodo, cátodo a GND; 1 condensador de 100 nF entre os pinos 14 e 7; pino 14 a +5 V e pino 7 a GND; entradas das portas livres (4, 5, 9, 10, 12 e 13) ligadas a GND.