Somador Carry-Lookahead de 4 Bits em VHDL

Carry-Lookahead

Esse somador utiliza uma técnica para aceleração do cálculo do carry. Em cada estágio ele calcula seu próprio bitcarry de entrada a partir das entradas do primeiro estágio, ou seja, ele não espera a propagação das informações dos estágios anteriores.

Por contra, ele também possui desvantagens, como, por exemplo, o crescimento quase exponencial do número de portas utilizadas a cada estágio, encarecendo e tornando o transporte do carry mais lento para um projeto de mais de quatros estágios.

Devido a essas circunstâncias esse somador é geralmente projetado para somar palavras de 4 bits. Dessa forma, podemos reutilizar o circuito para somar palavras binárias de 8, 12, 16, 32, etc.

Neste artigo vamos estudar esse tipo de somador rápido, projeta-lo para somar palavras de 4 bits e descrevê-lo em VHDL.

Somador Carry-Lookahead

Existem três casos de propagação do carry: Kill, Generate e Propagate.

O caso Kill significa que quando as entradas Ai e Bi do somador são iguais a zero, independente do seu carry-in, a propagação do carry-out não existe (“matado”). Isso quer dizer também que o carry-in do próximo estágio vale zero.

O caso Generate significa que quando as entradas Ai e Bi do somador são iguais a um, independente do seu carry-in, a propagação do carry-out existe (“gerado”). Isso quer dizer também que o carry-in do próximo estágio vale um.

O caso Propagate significa que quando as entradas Ai e Bi do somador são iguais a um e zero ou a zero e um respectivamente. Dessa forma o seu carry-in será propagado para o carry-out.

Com essas informações é possível montar uma tabela verdade e assim encontrar uma expressão booleana para o carry-out, ou seja, Ci+1.

*i é um número natural.

Tabela 1: Tabela verdade para o carry-out. 

 

Ai

Bi

Ci+1

Ki

0

0

0

Pi

0

1

Ci

Pi

1

0

Ci

Gi

1

1

1

Para obter a expressão da saída podemos fazer o mesmo procedimento precedente considerando as entradas Ai, Bi e Ci.

Tabela 2: Tabela verdade para a saída.

Ci

Bi

Ci

Si

0

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

0

0

1

1

0

1

0

1

1

0

0

1

1

1

1

Tendo em vista que os sinais Genarate e Propagate são sempre em função das entradas Ai e Bi, e se comportam como Meio-Somadores (Half-Adders), modelaremos o projeto utilizando-os. 

Figura 1: Esquema do Meio-Somador com as saídas Propagate e Generate.

Como nosso objetivo é projetar este somador para palavras de 4 bits, acharemos as equações para cada estágio.

Para o estágio zero, nós temos que o carry-in é uma entrada do circuito, portanto obtemos:

Para o estágio um, temos que o carry calculado no estágio zero será o carry-in desse estágio, isto é:

Seguindo a lógica temos:

Se olharmos para a próxima equação podemos observar que para o próximo estágio (quinto) o número de portas é muito grande, tornando inviável o custo do projeto, além de não se tornar mais rápido em relação a um somador Ripple-Carry por exemplo.

Desempenho do Carry-Lookahead 4 bits em relação ao Ripple-Carry

Comparando a propagação dos carrys-out dos circuitos Ripple-Carry e Carry-Lookahead podemos observar o percusso do carry-out do primeiro somador bem mais longo.

Figura 2: Somador Ripple-Carry 4 bits (Fonte: Eletrônica Digital por F.C.C de Castro PUCRS)
Figura 3: Somador Carry-Lookahed 4 bits (Fonte: Digital Eletronics Pedroni)

Como no Ripple-Carry é utilizado blocos de somadores completos, temos que cada estágio tem um tempo crítico agregado a 3 portas lógicas. Ou seja, para o circuito completo 12 portas lógicas até o carry-out está bem definido. Diferente do nosso somador estudado que tem tempo crítico agregado a 4 portas lógicas.

Implementação VHDL

Utilizando o software Altera Quartus II 13.0 Web Edition, criou-se o componente HALF_ADDER para ser utilizado no módulo-topo do nosso circuito principal. Esse componente foi descrito como segue: 

Para o modulo-topo utilizamos o componente HALF_ADDER e escrevemos as equações necessárias para a implementação do somador Carry-Lookahead 4 bits. Onde a descrição utilizada foi:

Para verificação do funcionamento foi feito o testbench, abaixo o código e as formas de onda do nosso circuito!

Veja a forma de onda resultante dos testes.

Para fazer o download de todos os arquivos do projeto para o Quartus, clique no botão abaixo.