Portas Lógicas

Simbologia

Conhecendo já as operações booleanas abordadas nos artigos anteriores, vamos conhecer os símbolos mais comuns associados às operações e que representam um determinado circuito lógico, aos quais chamamos portas lógicas.

Portas lógicas - and

AND

Portas lógicas - or

OR

Portas lógicas - xor

XOR

Portas lógicas - not

NOT

Para implementações em que precisemos de negar a saída de uma destas portas, ou seja, queremos negar o resultado da operação lógica, e já vimos isto nas Leis de De Morgan, poderíamos usar uma das portas AND, OR ou XOR seguidas de um NOT. Porém, existem portas lógicas que já nos invertem a saída e, ao nível de desenho, usamos apenas um pequeno círculo na saída para indicar que esta é negada. Estas portas são representadas pelos símbolos:

Portas lógicas - NAND

NAND

Portas lógicas - NOR

NOR

Portas lógicas - NXOR

NXOR

As tabelas da verdade, para estas operações, são simples e imediatas:

NAND01
011
110
NOR01
010
100
NXOR01
010
101

Também é comum precisarmos de negar o valor que vamos querer colocar numa das entradas, ou em ambas. Apesar de, neste caso, precisarmos mesmo de uma porta NOT para inverter a entrada, podemos substituir, no diagrama dum circuito, a porta NOT por um pequeno círculo na entrada da porta lógica. As seguintes figuras ilustram essa equivalência.

Portas lógicas - entradas negadas

Mas relembro que, neste caso, é mesmo apenas uma simplificação no desenho do circuito! Na realidade, teremos que usar uma porta NOT para inverter a primeira entrada.

Famílias lógicas comuns

Quando começamos a falar de portas lógicas, convém ter em mente que existem vários circuitos integrados que permitem construir o nosso circuito lógico. A esses circuitos integrados, usamos determinadas tensões eléctricas para a representação de um “zero” ou de um “um”. No início dos tempos dos primeiros computadores, quando ainda se usavam válvulas, mas já apareciam os primeiros transístores, surgiram as primeiras famílias de circuitos lógicos como a DTL (Diode-Transistor Logic), mas com a evolução dos semi-condutores, uma família destacou-se tendo, ainda hoje, uma forte presença em muitos circuitos, a família TTL (Transistor-Transistor Logic) e conhecida pelas séries 74xx. Mais recentemente, e com a tecnologia a permitir a construção de transístores cada vez mais pequenos e de baixo consumo, a tecnologia CMOS (Complementary metal–oxide–semiconductor). está presente na esmagadora maioria dos computadores e dispositivos móveis.

Portas lógicas - TTL 7400 (4 portas NAND)

Diagrama interno de um 7400 (quatro portas NAND) e foto do integrado. Fonte: WikiCommon

A título de exemplo, seguem alguns integrados da série 74xx da família TTL:

  • 7400 : 4 portas NAND de 2 entradas
  • 7402: 4 portas NOR de 2 entradas
  • 7404: 6 portas NOT (1 entrada)
  • 7408: 4 portas AND de 2 entradas
  • 7410: 3 portas NAND de 3 entradas
  • 7420: 2 portas NAND de 4 entradas
  • 7428: 4 portas NOR de 2 entradas

Na figura da direita, temos um exemplo de um 7400. Em cima temos um diagrama dos 14 pinos do integrado e em baixo uma foto do integrado em si. Se observarmos o diagrama temos os pinos 14 e 7 para a alimentação do integrado. 5V em VCC (tensão de corrente contínua) no pino 14 e a ligação à massa (0V – terminal preto de uma fonte de alimentação) no pino 7. Podemos usar apenas uma porta ou até todas. Por exemplo, se precisarmos de uma porta, podemos ligar uma das nossas entradas, que representam uma variável, no pino 1, a outra entrada no pino 2. O resultado da operação NAND é então obtido no pino 3. Já agora, é comum vermos um pequeno círculo junto do pino 1 para ajudar a identificá-lo e evitar erros nas ligações.

Como foi referido atrás, o valor de cada bit é representado por um determinado valor de tensão eléctrica. Por exemplo, num circuito TTL típico, um bit a “zero” é representado por uma tensão de 0V e um bit a “um” é representado por uma tensão de 5V. Por exemplo, se colocarmos ambos os pinos 1 e 2 do 7400 (NAND) a 0V, teremos 5V no pino 3 (saída) uma vez que “0 NAND 0 = 1”.

Existem ainda variantes na família TTL onde estes valores podem variar, assim como as velocidades de atraso nas saídas quando as entradas mudam, mas falamos em grandezas tipo 10ns (nano segundos). Nestes artigos, não pretendo entrar nestes detalhes, por isso, e caso tenha interesse em obter mais informações destas variantes, recomendo o artigo “7400 series” no Wikipedia (em Inglês pois a versão Portuguesa está bastante incompleta).



Da função lógica ao circuito lógico

Já vimos que podemos criar funções lógicas para resolver determinados problemas, como quando accionar o motor de um elevador. E este caso foi apenas um mero exemplo num vasto oceano de possíveis implementações. Basta pensarmos nos milhares de componentes complexos de um avião a jacto, com tantas variáveis de entrada e saída, como todos os sensores para medir a altitude, velocidade, inclinações, etc… como as saídas para os motores, flaps, etc… Um imenso mundo de circuitos digitais de alta precisão mas todos com uma base teórica, por onde tudo começa: Uma função lógica.

Assim, tendo uma função lógica que satisfaça uma determinada solução para uma determinada aplicação, facilmente podemos desenhar o circuito equivalente. Relembremos a função do artigo anterior:

f(a,b,c) = a  . b . c

Facilmente podemos desenhar o circuito usando 2 portas NOT e 2 portas AND de 2 entradas:

Portas lógicas - Exemplo de circuito com postas lógica 1

Lembre-se que podemos simplificar o desenho:

Portas lógicas - Exemplo de circuito com postas lógica 2

A título de curiosidade, poderíamos desenhar a implementação deste circuito, com os respectivos integrados da família TTL, da seguinte forma:

Portas lógicas - Exemplo de circuito com integrados da família TTL

Note que as linhas estão coloridas apenas para dar uma melhor ideia das ligações. Nestes circuitos é normal encontrar nos pinos um número e uma letra. O número indica o número da porta, as letras A e B são entradas e a letra Y saídas. Por exemplo, sabemos da função lógica que as variáveis B e C são negadas, por isso passam pelo inversor (7404) entrando nos pinos 1A e 2A respectivamente, e obtemos B e C nas saídas 1Y e 2Y respectivamente. No 7408 (AND) Vimos que B e C vão ligar a 1A e 1B para executar o AND, o resultado sai de 1Y e entra em 2A. A variável A entra em 2B para completar o circuito e em 2Y temos o resultado final da função F.

Lembre-se ainda que o operador AND é comutativo, pelo que, no 7408, as ligações feitas em 1A e 1B ou em 2A e 2B podem ser trocadas. Lembre-se também que o que pretendemos é usar portas NOT e portas AND disponíveis nos integrados, pelo que a ordem e as portas que escolhemos é irrelevante, podendo até ser útil escolher determinadas portas para facilitar o desenho do circuito, especialmente quando estamos a fazer um circuito impresso.



Brevemente iremos falar a simplificação de funções lógicas com mapas de Karnaugh. Siga-nos nas redes sociais e mantenha-se informado das nossas novidades!

Referências:

Softwares de desenho de circuitos recomendados (Open Source):

Este artigo foi escrito com a antiga grafia.

About Carlos Santos

Frequência em mestrado de Engenharia Electrotécnica e de Computadores. Programador freelancer: Websites, Aplicações Web (JAVA e PHP), J2SE/J2EE, C/C++ e Android. Explicador e formador em informática, matemática e electrotecnia. Formação presencial ou remota através de Skype e Team Viewer. Interesses: Música, áudio, vídeo, ciência, astronomia e mitologia.

Leave a Reply

Your email address will not be published and it is optional.