A quase totalidade das máquinas e equipamentos que hoje em dia utilizamos incorporam, em maior ou menor extensão, a tecnologia digital, ou seja, muitos dos seus componentes são construídos por aplicação dos princípios e técnicas da eletrónica digital. Os circuitos lógicos digitais, assim são chamados os referidos componentes eletrónicos, integram os processadores dos computadores e dos smartphones, os controladores dos eletrodomésticos e dos aparelhos de reprodução de imagem e som, e de muitos outros dispositivos que utilizamos para os mais diversos fins.
Os circuitos lógicos digitais apresentam uma complexidade variável consoante a sua finalidade, desde os processadores que contêm os circuitos digitais mais complexos, capazes de realizar as operações especificadas nas instruções dos programas, até aos circuitos mais simples, as portas lógicas básicas (basic logic gates). Qualquer circuito digital é composto por um conjunto de portas básicas em quantidade e diversidade de acordo com a respetiva finalidade.
As portas lógicas básicas são circuitos digitais elementares que implementam três operações: NOT (“não”), OR (“ou”) e AND (“e”) sobre o conjunto dos elementos {0, 1}, respeitando as propriedades enunciadas na álgebra de Boole. Se considerarmos que os elementos “0” e “1” representam, respetivamente os valores lógicos “falso” e “verdadeiro”, as operações NOT, OR e AND correspondem, respetivamente, às operações lógicas “negação”, “disjunção inclusiva” e “conjunção”. Em alternativa, considerando que os elementos “0” e “1” representam os algarismos do sistema de numeração binário, as mesmas portas básicas podem ser usadas na construção de circuitos digitais que realizem tanto operações lógicas como numéricas. Foi Claude Shannon o primeiro a propor que o desenho dos circuitos digitais que integram os processadores dos computadores fosse realizado aplicando os princípios da álgebra de Boole, inaugurando a era eletrónica na evolução dos computadores.
Na figura 1 são apresentados os símbolos das portas lógicas AND, OR e XOR e as tabelas de verdade que definem as operações implementadas pelas portas.
Qualquer outra operação lógica, além das booleanas, pode ser escrita como (ou definida por) uma expressão das operações elementares NOT, OR e AND. Por exemplo, uma das portas lógicas (não elementar) relevantes para os circuitos digitais, que implementa a operação negação da conjunção, designada por NAND (NOT AND), será definida pela expressão (A . B)’. Para clareza e facilidade de escrita, usamos o ponto (.) como símbolo da operação AND e a plica (’) para a operação NOT.
Outra porta lógica não elementar, mas igualmente relevante nos circuitos digitais que executam operações aritméticas, é a que implementa a operação disjunção exclusiva, também designada por XOR (eXclusive OR). A expressão que traduz a operação XOR recorrendo às operações booleanas é a seguinte: (A’ . B + A . B’). Uma vez mais, para clareza e facilidade de escrita, usamos o símbolo da adição (+) para representar a operação OR e os parênteses para delimitar a expressão.
Os valores “0” e “1” usados na definição das operações lógicas constituem as entradas das portas lógicas e, nos circuitos usados nos processadores dos computadores, são interpretados como bits que representam informações. Em cada uma das portas especificadas na figura 1 existem duas entradas (dois bits) e uma saída (1 bit), que é função (depende) das entradas, mas apenas conhecida a saída não será possível obter as entradas que a originaram, ou seja, a operação não é reversível. Ocorre assim uma perda (de bits) de informação que implica uma perda de energia porque cada bit corresponde a um determinado nível de tensão ou potencial elétrico. Esta energia perdida, dissipada na forma de calor, obriga à manutenção de uma temperatura limite para que os circuitos funcionem corretamente.
Uma porta lógica reversível, além de calcular o resultado de uma operação lógica, permitirá deduzir os valores das entradas que resultaram no valor da saída com o recurso a saídas adicionais. Por exemplo, na porta XOR, a partir do resultado da operação e do valor de uma das entradas será possível obter o valor da outra entrada, como se poderá comprovar da análise da respetiva tabela de verdade (ver a figura 1).
Por definição, uma porta lógica reversível possui igual número de entradas e de saídas critério este não verificado, em geral, pelas portas lógicas já mencionadas (figura 1). A porta lógica reversível mais simples é a porta Feynman: possui duas entradas, A e B, e duas saídas, P = A e Q = A XOR B, como desenhado na figura 2. A saída P assume (e mantém) o valor da entrada A que foi usada com a outra entrada B no cálculo do valor da saída Q.
Na figura 2 estão ainda esquematizadas outras duas portas reversíveis, a porta Peres e a porta Universal, ambas com três entradas e igual número de saídas, P Q e R, definidas pelas expressões lógicas indicadas. Note-se que, nas três portas reversíveis da figura 2, existe sempre uma saída que assume o valor de uma das entradas e que a operação XOR é usada no cálculo das outras saídas para garantir a reversibilidade.
Para que as portas reversíveis sejam aplicáveis têm de possibilitar a construção de circuitos lógicos com as mesmas funções que os construídos usando portas booleanas. Usando a porta lógica Feynman é possível obter o mesmo resultado da porta booleana NOT quando atribuímos o valor “1” à entrada B, como se poderá observar na figura 3. Analisando a tabela de verdade da operação XOR concluímos que, quando o valor do operando B for igual a 1, o resultado da operação (a saída Q da porta Peres) será igual à negação de A (A’).
Com recurso à porta reversível Universal e atribuindo o valor adequado à entrada C, será possível simular o comportamento das portas básicas OR e AND e das portas com as negações destas operações booleanas. Na figura 3 é ilustrado a utilização da porta reversível Universal de modo que nas saídas P e R se obtenham, respetivamente, os resultados das operações OR e AND. Uma vez mais, por análise da tabela de verdade da operação XOR concluímos que se um dos operandos for igual a “0” (o segundo, neste caso), o resultado desta operação será idêntico ao valor do outro (o primeiro, no caso analisado). Mas se atribuirmos o valor “1” à entrada C da porta Universal, obteremos nas saídas P e R os resultados da negação das operações OR e AND: (A . B)’ e (A + B)’. Esta aplicação da porta Universal, análoga à da porta Feynman na implementação da negação (NOT), não apresentada na figura 3, justifica a designação que lhe foi atribuída.
Efetuando na porta reversível Peres um procedimento análogo ao executado com a porta Universal, obteremos os resultados das operações A XOR B e A AND B, respetivamente, nas saídas P e R, se o valor da entrada C for “0”. No contexto das operações aritméticas, o valor de P representa a soma dos bits A e B e o valor R o “bit de transporte” que, segundo o algoritmo da adição, deverá ser adicionado na coluna à esquerda.
Conseguindo com o emprego de portas reversíveis produzir circuitos lógicos com custos e desempenhos equiparáveis aos construídos com portas tradicionais, alcançaríamos uma melhor eficiência energética no funcionamento dos equipamentos que integram aqueles circuitos.
Do ponto de vista computacional, a portas reversíveis ideais evitariam a perda de informação possibilitariam a reversibilidade dos processamentos realizados.
Por: Jerónimo Nunes