Aula 5.6: Somador de 4 bit em Verilog #LTCode

COMPARTILHAR:

Whatsapp Telegram Twitter Facebook Reddit

Aula 5.6 - Somador de 1 bit e 4 bit em Verilog HDL

Este artigo faz parte do projeto #LTCode

Na primeira aula dessa série de aulas você aprendeu toda a base para compreender códigos em Verilog HDL e rodar os códigos, se ainda não leu clique aqui e confira.

Vamos criar primeiramente um somador de 1 bit abaixo. A ideia é simples, somar três números de 1 bit. Exemplo: 
X = 1 (equivale a 1 em decimal).
Y = 0 (equivale a 0 em decimal).
TE = 0 (equivale a 0 em decimal).
X+Y+TE é igual a 1 (equivale a 1 em decimal).

Mas note este outro exemplo:
X = 1 (equivale a 1 em decimal).
Y = 1 (equivale a 1 em decimal).
TE = 0 (equivale a  0 em decimal).
X+Y+TE é igual a 10 (equivale a 2 em decimal), pois '1 bit + 1 bit + 0 bit' é 0 e vai 1. 
Portanto devemos considerar o ato de "vai 1" em nossa tabela verdade.

Chamaremos este "vai 1" de "TS" (transporte de saída ou carry out) e montaremos a tabela verdade a seguir:


Agora tirando as expressões para S e TS obtemos:
S = X xor Y xor TE
TS = (X and TE) or (Y and TE) or (X and Y)

Assim, podemos montar nosso código para um somador de 1 bit:

module somador1bit (X,Y,TE,HEX7);

input X,Y,TE; //entradas
output reg [0:6]HEX7; //vetor para led display
wire S,TS; //fios intermediários
wire [3:0]auxEntrada = {2'b00,TS,S}; //concatena na forma 00TSS

assign S = X ^ Y ^ TE;
assign TS = (X&Y) | (X&TE) | (Y&TE);

decodificador b0(auxEntrada,HEX7); //chama nosso decodificador para display

endmodule

O decodificador que chamamos no código acima está abaixo. Note que vetor 'E' do decodificador abaixo recebe o valor presente em 'auxEntrada' acima.


module decodificador (E,S);

input [3:0]E; //vetor de 4 bits
output reg [0:6]S;//bit mais significativo a direita, se não o display fica invertido

always @(*) //o asterisco basicamente cria a lista de sensibilidade para você
begin
case(E)
4'b0000 : S=7'b0000001; // 0 em binário, não acende led 'g'
4'b0001 : S=7'b1001111;
4'b0010 : S=7'b0010010;
4'b0011 : S=7'b0000110;
4'b0100 : S=7'b1001100;
4'b0101 : S=7'b0100100;
4'b0110 : S=7'b0100000;
4'b0111 : S=7'b0001101;
4'b1000 : S=7'b0000000;
4'b1001 : S=7'b0000100;
default : S=7'b1111111; //padrão, todos leds apagados
endcase;
end

endmodule

Rodando os códigos, você perceberá que a soma dos 3 números será exibida em decimal no display de 7-segmentos.

Agora vamos criar um somador de 4 bits, conhecido como full adder. A lógica continua sendo a mesma do somador de 1 bit, você deve ter notado que utilizamos o termo TE como variável no somador acima, este termo se refere a 'transporte de entrada' ou 'carry in', ou seja, ao somamos dois números de 4 bits, o TS (vai um) do primeiro bit vai ser o TE do segundo bit. A imagem abaixo ilustra melhor essa lógica:


Com isso em mente, confira como fica o código:


module somador4bit (A,B,TE,HEX0,HEX1);
input [3:0]A,B; //vetores de 4 bits
input TE;
output [0:6] HEX0, HEX1; //saida em 2 display
wire [3:0] S, TS;
somador1bit B0(A[0],B[0],TE,S[0],TS[0]);
somador1bit B1(A[1],B[1],TS[0],S[1],TS[1]);
somador1bit B2(A[2],B[2],TS[1],S[2],TS[2]);
somador1bit B3(A[3],B[3],TS[2],S[3],TS[3]);
wire [4:0] resultado; //vetor de 5 bits
assign resultado = {TS[3],S[3],S[2],S[1],S[0]}; //concatena em 5 bits

wire [3:0] dez, unid; 
assign dez = resultado/10; //divisão será nosso display da dezena
assign unid = resultado%10; //resto da divisão será o display da unidade
//abaixo chamamos nosso decodificador
decodificador BCD_0(unid,HEX0); //decodificador para display da unidade
decodificador BCD_1(dez,HEX1); //decodificador para display da dezena

endmodule

Você deve estar achando estranho a variável "dez" receber o resultado da divisão de um binário de 4 bits pelo decimal 10. Sim, a linguagem consegue dividir binário por decimal e armazenar a resposta correta em binário, o mesmo acontece para pegar o resto da divisão. O decodificador usado para o somador de 4 bits é o mesmo do somador de 1 bit. Já o somador1bit utilizado foi modificado para atender o somador de 4 bits:

module somador1bit (X,Y,TE,S,TS);
input X,Y,TE;
output S, TS;
assign S= X^Y^TE;
assign TS=(X&Y) | (X&TE) | (Y&TE);
endmodule

Próxima aula, clique aqui.

COMENTÁRIOS

Nome

#ann,25,#HK,30,#LTCode,126,Artigo - Diversos,156,Artigo - Games,200,Artigo - Tecnologia,598,autor-thomaz,7,Coluna - Alternative World,24,Coluna - Fail,12,Coluna - Tec Line,14,Criptomoeda,71,Curiosidades - Diversos,49,Curiosidades - Tecnologia,50,en,2,estudo,8,HN,12,logica,14,Pentest,23,Programar C,29,Programar POO,6,Programar Python,6,Programar Shell,21,Programar verilog,12,Raspberry Pi,15,Redes,3,root,101,Shorty Awards,1,Smartphones - Reviews,33,Teoria,10,Top Nostalgia,2,VPN,18,WhatsApp,46,
ltr
item
Limon Tec: Aula 5.6: Somador de 4 bit em Verilog #LTCode
Aula 5.6: Somador de 4 bit em Verilog #LTCode
Aula 5.6 - Somador de 1 bit e 4 bit em Verilog HDL
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmI65og5X32bSLCmBz3uJnZlmDvzOFWZWoZzyvUhh2rtp8Hr_kolKy02pOjxpkThrz8uHaTu3skUdeDJlkFEKkC2a9EabpwPzbwJ-hm-po0QIaNeNvYm5CJw3k4SbN03V-d2h1dxrW2tz4/s640/ltcode.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmI65og5X32bSLCmBz3uJnZlmDvzOFWZWoZzyvUhh2rtp8Hr_kolKy02pOjxpkThrz8uHaTu3skUdeDJlkFEKkC2a9EabpwPzbwJ-hm-po0QIaNeNvYm5CJw3k4SbN03V-d2h1dxrW2tz4/s72-c/ltcode.jpg
Limon Tec
https://www.limontec.com/2019/06/aula-5-6-codigos-em-verilog-ltcode.html
https://www.limontec.com/
https://www.limontec.com/
https://www.limontec.com/2019/06/aula-5-6-codigos-em-verilog-ltcode.html
false
2157924926610706248
UTF-8
Carregar todos posts Não encontramos nenhum post VER TUDO Ler mais Responder Cancelar resposta Deletar Por Home PÁGINAS POSTS Ver tudo RECOMENDADO PARA VOCÊ LABEL ARQUIVO SEARCH TODOS POSTS Não encontramos nenhum post relacionado a sua requisição VOLTAR PÁGINA INICIAL Domingo Segunda Terça Quarta Quinta Sexta Sábado Dom Seg Ter Qua Qui Sex Sab Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro Jan Fev Mar Abr Maio Jun Jul Ago Set Out Nov Dez apenas agora 1 minuto atrás $$1$$ minutes ago 1 hora atrás $$1$$ hours ago Ontem $$1$$ days ago $$1$$ weeks ago mais de 5 semanas atrás Seguidores Seguir ESTE CONTEÚDO ESTÁ BLOQUEADO PASSO 1: Compartilhe com seus amigos PASSO 2: Clique no link compartilhado Copiar Todo Código Selecionar Todo Código Todos códigos foram copiados para seu clipboard Não é possível copiar códigos / textos, por favor aperte [CTRL]+[C] (ou CMD+C no Mac) para copiar Tabela de conteúdo