Aula 5.3: Comparador de 2 números de 4 bit em Verilog #LTCode

COMPARTILHAR:

Whatsapp Telegram Twitter Facebook Reddit

Aula 5.3 - Comparador de 2 números de 4 bits usando comparador de 1 bit.

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 o projeto de um comparador de 2 números de 4 bits e responder se um é maior (ma), menor (me) ou igual (ig) ao outro. 

Por exemplo: A é maior, menor ou igual a B?

A = 1011
B = 1001

Para este projeto vamos utilizar a descrição de fluxo de dados (visto na aula 5.2). Para facilita vamos primeiramente criar um comparador de 2 números de 1 bit, pois para o de 4 bits temos 8 entradas e 2^8 são 256 combinações para se comparar, enquanto que o de 1 bit são 2 entradas ou seja 2^2 são 4 combinações para se comparar.


Simplificando as expressões obtemos:

IGUAL = A xnor B
MAIOR = A and (not B)
MENOR = (not A) and B

Com essa informação podemos montar nosso código para o comparador de 1 bit.

module comparador_1bit (ig, ma, me, A, B, HAB);
input A, B, HAB;
output ig, ma, me;
assign ig = HAB & (A~^B); // A xnor B 
assign ma = HAB & (A&(~B));
assign me = HAB & (~(A)&B);
endmodule

A variável  "HAB"(abreviação de habilita) será útil para o comparador de 4 bits, portanto caso queira apenas um comparador de 1 bit ela pode assumir o valor 1 pois 1 and qualquer coisa é qualquer coisa.

Com nosso comparador de 1 bit pronto, agora podemos implementar um comparador de 4 bits.

module comparador_4bit(igual, maior, menor, A, B);
input [3:0] A, B; //vetor de 4 bits com o menos significativo à direita
output igual, maior, menor;
wire [3:0] aux_ig, aux_ma, aux_me; //conexão de 4 bits, variáveis auxiliares
comparador_1bit BL3(aux_ig[3], aux_ma[3], aux_me[3], A[3], B[3],1);
comparador_1bit BL2(aux_ig[2], aux_ma[2], aux_me[2], A[2], B[2],aux_ig[3]);
comparador_1bit BL1(aux_ig[1], aux_ma[1], aux_me[1], A[1], B[1],aux_ig[2]);
comparador_1bit BL0(aux_ig[0], aux_ma[0], aux_me[0], A[0], B[0],aux_ig[1]);
assign maior = | aux_ma; //realiza OR em todos bits do vetor aux_ma
assign menor = | aux_me; //realiza OR em todos bits do vetor aux_me
assign igual = aux_ig[0];
endmodule

A estrutura de um vetor de 4 bits é [3:0], sendo: 
[3:0] com o bit menos significativo a direita.
[0:3] com o bit mais significativo a direita.

No comparador de 4 bits acima é feita a chamada ao modulo do comparador de 1 bit, utilizando conexão por lista ou seja as ligações são feitas na ordem. Assim dados de entradas são enviadas para o comparador_1bit que retorna nas saídas o resultado das operações lógicas.

No modulo comparador_1bit temos a seguinte ordem: (ig, ma, me, A, B, HAB) . Assim ao chamá-lo no comparador_4bit a ordem foi mantida em cada "BL" (bloco): (aux_ig[3], aux_ma[3], aux_me[3], A[3], B[3],1) .

Então será que nosso código funciona para o exemplo abaixo?

A é maior, menor ou igual a B?

A = 1011
B = 1001

Vamos conferir por partes! 

Confira como ficou os dados nos "BL" blocos para o exemplo acima, em vermelho ilustra os dados de entrada e em verde os dados de saída do comparador_1bit:

BL3(100, 1, 1, 1);
BL2(1, 0, 0, 0, 0, 1);
BL1(0, 1, 0, 1, 0, 1);
BL0(0, 0, 0, 1, 1, 0);

Fazendo um OR em todos os bits de aux_ma (0 or 0 or 1 or 0) = 1.
Fazendo um OR em todos os bits de aux_me (0 or 0 or 0 or 0) = 0.
Pegando o valor de aux_ig na posição 0 temos que aux_ig[0] = 0.

Com essas informações descobrimos que A é maior que B.

>> Próxima aula, clique aqui.

COMENTÁRIOS

Nome

#ann,25,#HK,30,#LTCode,130,Artigo - Diversos,156,Artigo - Games,201,Artigo - Tecnologia,614,autor-thomaz,7,Coluna - Alternative World,24,Coluna - Fail,12,Coluna - Tec Line,14,Criptomoeda,72,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,25,Programar verilog,12,qradar,4,Raspberry Pi,15,Redes,3,root,116,Shorty Awards,1,Smartphones - Reviews,33,Teoria,10,Top Nostalgia,2,VPN,19,WhatsApp,46,
ltr
item
Limon Tec: Aula 5.3: Comparador de 2 números de 4 bit em Verilog #LTCode
Aula 5.3: Comparador de 2 números de 4 bit em Verilog #LTCode
Aula 5.3 - Comparador de 2 números de 4 bits usando comparador de 1 bit.
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/03/aula-5-3-codigos-em-verilog-ltcode.html
https://www.limontec.com/
https://www.limontec.com/
https://www.limontec.com/2019/03/aula-5-3-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