Aula 5.5 - Decodificador BCD 8421 para display de 7-segmentos em Verilog
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 implementar em Verilog HDL um decodificador BCD 8421 para display de 7-segmentos de 2 formas. Note que o display deverá exibir números de 0 a 9, e que o display de 7-segmentos que pretendemos projetar é para anodo comum, ou seja, o led do display acende com nível lógico 0.
A primeira forma é utilizando expressões booleanas. Para isto montamos a tabela verdade com as entradas e saídas.
Note que cada led é representado por uma letra de 'a' até 'g'.
Depois basta encontrar as expressões simplificadas para cada led. Note que o código BCD 8421 vai até 9, sendo irrelevante continuar preenchendo a tabela até 15, apesar do restante da tabela poder facilitar a simplificação da expressão.
Assim podemos escrever nosso código.
module decodificador (a,b,c,d,e,f,g,A,B,C,D);
input A,B,C,D;
output a,b,c,d,e,f,g;
assign a = (B &(~C)&(~D)) | ((~A)&(~B)&(~C)& D);
assign b = (B & ~C &D) | (B & C &~D);
assign c = (~B)& C &(~D);
assign d = ((B)&(~D)&(~C))|(B & C & D) | ((~A)&(~B)&(~C)&D);
assign e = (B&(~C)) | D;
assign f = (~B)&C | (B & C & D) |((~A) & (~B) & D);
assign g = ((~A)&(~B)&(~C)) | (B & C & D);
endmodule
A segunda forma de se fazer um decodificado BCD 8421 para display 7-segmentos é utilizando a estrutura "case".
module decodificador_case (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
A variável "E" é um vetor de 4 bits, ou seja, o usuário entra com 4 bits e coloca nesta variável. A variável "S" é um vetor de 7 bits, por ser uma variável de saída para armazenar os bits dos leds do display. Sendo assim, supondo que usuário queira mostrar no display o número 2, então ele entra com bits: 0010. Seguindo a lógica, caso 'E' seja 0010 então 'S' recebe 0010010 ou seja os led 'c' e 'f' não acendem, formando o número 2 no display.
Próxima aula, clique aqui.
Próxima aula, clique aqui.
COMENTÁRIOS