Tutorial de Verilog: Meio Somador (Half Adder)

Meio Somador
Este post faz parte da série Tutorial de Verilog

Dando prosseguimentos aos tutoriais de Verilog, apresento neste post o Meio Somador de 1-bit, ou Half Adder em inglês. O circuito meio somador é definido como o circuito que soma duas entradas e também que possui o carry, ou vai um. Supomos que temos duas entradas A e B e duas saídas, a soma, representado por S e Carry, que responde ao que conhecemos também por vai um, ou overflow da soma. A Soma (S) e o Carry (C) podem ser representados pela seguinte tabela:

Meio Somador

O circuito que satisfaz essa tabela é facilmente modelado com duas portas lógicas, a porta XOR para a soma, S, e a porta AND para o Carry, C. Veja o esquemático abaixo.

 

Representação do Circuito Meio Somador em Verilog:

Implementei de duas formas diferentes, a primeira utilizando assign e lógica. A segunda utilizando as duas portas lógicas, conforme mostrado acima no esquema elétrico. Utilizei o mesmo Testbench para todos os testes. Veja a seguir:

// Embarcados - Use como quiser e de os creditos
// Exemplo de Implementacao de um half adder, meio somador de 1bit
// Thiago Lima - 14/11/2015

module meio_somador (A, B, S, C);
input  A, B;
output S, C;
assign S = A ^ B;
assign C = A & B;
endmodule

 

Testbench:

// Embarcados - Use como quiser e de os creditos
// Exemplo de Implementacao de um testbench para half adder, meio somador de 1bit
// Thiago Lima - 14/11/2015

module MEIO_SOMADOR_TB;

	reg 	A_tb, B_tb;
	wire  S_tb, C_tb;

MEIO_SOMADOR dut( A_tb, B_tb, S_tb, C_tb);

initial
begin
	A_tb = 1'b0;	B_tb = 1'b0; #1
	A_tb = 1'b0;	B_tb = 1'b1; #1
	A_tb = 1'b1;	B_tb = 1'b0; #1
	A_tb = 1'b1;	B_tb = 1'b1; #1;
end
endmodule

Faça Download do Projeto para o Quartus da Altera:

download_proteus_arduino_lcd
// Embarcados - Use como quiser e de os creditos
// Exemplo de Implementacao de um half adder, meio somador de 1bit
// Thiago Lima - 14/11/2015
                          
module meio_somador (A, B, S, C);
input  A, B;
output S, C;
xor U1 (S, A, B);
and U2 (C, A, B);
endmodule

Faça Download do Projeto para o Quartus da Altera:

download_proteus_arduino_lcd

 

Forma de Onda resultante do teste:

Circuito Meio Somador (Half Adder) com NORs:

Reveja como representei a porta lógica XOR apenas com NORs no post sobre essa porta. Para isso acesse este link. Substitui então a porta XOR do circuito acima pelo circuito com NORs que a representa e então verifiquei que nenhum circuito extra é necessário para o sinal de saída Carry. Podemos facilmente ver que, pelo teorema de De Moore, uma porta NOR com as duas entradas negadas é o mesmo que uma porta AND. Portanto, obtemos Carry, o sinal de saída C.

 

Representação do Circuito Meio Somador (Half Adder) com NORs em Verilog:

Esse código não tem segredo, apenas representei as portas lógicas NORs.

// Embarcados - Use como quiser e de os creditos
// Exemplo de Implementacao de um half adder, meio somador de 1bit
// Thiago Lima - 14/11/2015
                          
module meio_somador (A, B, S, C);
input  A, B;
output S, C;
wire A_inv, B_inv, D;
nor U1(A_inv, A, A);
nor U2(B_inv, B, B);
nor U3(D, A, B);
nor U4(C, A_inv, B_inv);
nor U5(S, C, D);
endmodule

Faça Download do Projeto para o Quartus da Altera:

download_proteus_arduino_lcd

Circuito Meio Somador (Half Adder) com NANDs:

Representação do Circuito Meio Somador (Half Adder) com NANDs em Verilog:

Esse código também não tem segredo, apenas representei as portas lógicas NANDs.

// Embarcados - Use como quiser e de os creditos
// Exemplo de Implementacao de um half adder, meio somador de 1bit
// Thiago Lima - 14/11/2015
                          
module meio_somador (A, B, S, C);
input  A, B;
output S, C;
wire D, E, F;
nand U1(D, A, B);
nand U2(E, A, D);
nand U3(F, D, B);
nand U4(C, D, D);
nand U5(S, E, F);
endmodule

Faça Download do Projeto para o Quartus da Altera:

download_proteus_arduino_lcd

O Esquemático que obtemos é o seguinte:

É comum também encontrarmos o seguinte símbolo:

Este circuito é muito importante porque a partir dele poderemos implementar um somador completo (Full Adder).

Acompanhe o Embarcados e veja o próximo post sobre o somador completo.

Para aprender mais sobre Verilog

Portas Lógicas

PROCESSADORES PROGRAMÁVEIS – como projetar um processador em VERILOG

Formas de representar um sistema digital

Tutorial de Verilog

Tutorial de Verilog: Decodificador ou DEMUX Tutorial de Verilog: Somador Completo (full adder)
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Hardware » Sistemas Digitais » Tutorial de Verilog: Meio Somador (Half Adder)

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: