Tutorial de Verilog: Somador com Propagação do Carry – Somador Ripple-Carry

Somador Ripple-Carry

Vamos ver a partir deste post como funcionam os somadores. Um somador de N-bits consiste em um circuito que consegue somar duas entradas, cada uma delas com N-bits, e mais um sinal Carry de entrada e produz um resultado também com o mesmo tamanho, N-bits e um sinal Carry de Saída. Esse circuito somador é conhecido na literatura como Somador com Propagação do Carry, porque o sinal de Carry se propaga por todo o circuito do primeiro ao último bloco de hardware.

O símbolo de um somador pode ser representado como na figura abaixo.

Somador Ripple-Carry
Figura 1: Somador com Propagação do Carry

Existem três implementações comuns de Somador com Propagação do Carry. São elas:

  • Somador Ripple-Carry (Ripple-Carry Adder);
  • Somador Carry Adder (Carry Lookahead Adder);
  • Somador Prefixado (Prefix Adder).

Vamos abordar todos os somadores aqui no Embarcados. Neste post em específico estudaremos como funciona o Somador Ripple-Carry (Ripple-Carry Adder).

Somador Ripple-Carry

A forma mais simples, comum e intuitiva de criar um Somador é conectar vários somadores de 1-bit um após o outro, conectando o Carry de saída do anterior no Carry de entrada do atual e conectar o Carry de saída do atual no próximo bloco, totalizando uma cadeia de N blocos para um somador de N bits. Este então é o circuito do Ripple-Carry Adder. Ele é o somador mais modular que existe, já que podemos utilizar cada um dos somadores de 1-bit como módulos e escalarmos esse somador infinitamente. O problema dessa abordagem é que esse circuito é muito lento se compararmos com os demais somadores, conforme veremos quando forem apresentados os demais somadores. Abaixo está representado um somador de 4-bits. 

Representação do Circuito Somador Ripple-Carry de 4-bits em termos de Somadores Completos de 1-bit

Represento nas imagens abaixo o mesmo circuito de Somador Ripple-Carry de 4-bits. Essa representação utiliza quatro blocos Somadores Completos de 1-bit. Os dois desenhos significam a mesma coisa, mas desenhei das duas maneiras porque pode-se encontrar as duas formas de representação.

Somador Ripple-Carry
Figura 2: Representação do Circuito Somador Ripple-Carry de 4-bits em termos de Somadores Completos de 1-bit
Somador Ripple-Carry: Representação do Circuito Somador Ripple-Carry de 4-bits em termos de Somadores Completos de 1-bit
Figura 3: Representação do Circuito Somador Ripple-Carry de 4-bits em termos de Somadores Completos de 1-bit

Representação do Circuito Somador Ripple-Carry de 4-bits em Verilog

Para representar o circuito acima, escolhi a abordagem estrutural, onde codifico como se estivesse montando o esquemático do circuito. Criei um projeto em branco no Quartus (para ver como criar um projeto, veja este link) e utilizei o arquivo do meio somador e do somador completo de 1-bit mostrado no post anterior.

Arquivo meio_somador.v

Arquivo SOMADOR.v

Então criei a estrutura do código em Verilog para o Somador Ripple-Carry. Como estou considerando um somador de 4-bits, considerei os sinais A, B e Soma como [3:0]. No primeiro bloco, eu apliquei o Carry de entrada Cin e assim por diante. Nos outros blocos somadores de 1-bit coloquei os sinais um a um até o quarto bloco.

Arquivo ripple_carry_adder.v

Testbench para o Circuito Somador Ripple-Carry de 4-bits em Verilog

Para injetar valore e 0 a 15 em A e de zero a 15 em B, criei dois contadores, i e j. Os valores de i, injetei em A, os valores de j, injetei em B. Fiz dois testes que mostrariam uma mensagem de erro quando executasse o Testbench, uma testando o Carry e outra testando a soma. O testbench está abaixo.

Arquivo ripple_carry_adder_tb.v

Forma de Onda resultante do teste

A forma de onda resultante foi de acordo com o esperado. O resultado no terminal também não apresentou nenhuma mensagem de erro. 

Somador Ripple-Carry: Forma de Onda resultante do teste

Caso queira reproduzir o teste feito acima, faça Download do Projeto para o Quartus da Altera e aperte o play:

download_proteus_arduino_lcd

 

Representação do Circuito Somador Ripple-Carry de 32-bits em termos de Somadores Completos de 1-bit

Reproduzi o exemplo anterior para um somador de 32-bits na topologia Ripple-Carry. Ele funciona da mesma forma. Repare na figura abaixo para entender como funciona a expansão desse circuito. 

Somador Ripple-Carry
Somador Ripple-Carry

 

Representação do Circuito Somador Ripple-Carry de 32-bits em Verilog

Arquivo meio_somador.v (igual ao exemplo anterior)

Arquivo SOMADOR.v (igual ao exemplo anterior)

Foi codificado da mesma maneira que para 4-bits, mas dessa vez para um somador de 32 bits. Veja abaixo.

Arquivo ripple_carry_adder.v

Testbench para o Circuito Somador Ripple-Carry de 32-bits em Verilog

Testei o código Verilog do Somador 32-bits utilizando o testbench altero do exemplo anterior e mostrado abaixo.

Arquivo ripple_carry_adder_tb.v

Resultado do teste

Testei o circuito apenas parcialmente. Não rodei todo o teste por ele ser muito grande e ir além do escopo deste texto. Deixo no entanto disponível o projeto completo do Quartus. Caso queira reproduzir o teste completo ou mesmo só estudar o código, faça Download do Projeto para o Quartus da Altera e aperte o play:

download_proteus_arduino_lcd

É isso ai pessoal, espero que tenham gostado. Deixem seus comentários. É importante para guiar meus próximos passos.

Outros artigos da série

<< Tutorial de Verilog: Conversor de Código Gray para Código BinárioTutorial de Verilog: Conversor BCD para 7 Segmentos >>
Website | Veja + conteúdo

Sou formado em Engenharia Elétrica na USP Sao Carlos, com mestrado em Engenharia Elétrica no Rochester Institute of Technology pelo CsF. Tenho 17 anos de experiência em projetos de circuitos eletrônicos. Escrevo regularmente para o Embarcados, adoro eventos sobre tecnologia, onde posso rever amigos e conhecer pessoas do ramo.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu