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:
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:
// 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:
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:
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:
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
PROCESSADORES PROGRAMÁVEIS – como projetar um processador em VERILOG









