On souhaite réaliser directement
un décodeur BCD vers un afficheur 7 segments. Il existe un lien avec un
des exercices précédents, mais ce n'est pas le même cahier des charges.
La sortie se fera sur 7 éléments
et l'entrée est un nombre compris entre 0 et
9. On considèrera des segments pilotés par un niveau 1.

En se rappelant la table de
vérité (voir l'exercice du chap 2.15.3), on
obtient le programme suivant :
module DecodBCDTo7seg (n, A, B, C, D, E, F, G)
;
input [3 :0] n ;
output A, B, C, D, E, F, G ;
reg [6 : 0] S ;
always
case (n)
0 : S = 7’b1111110
;
1 : S = 7’b0110000
;
2 : S = 7’b1101100
;
3 : S = 7’b1111001
;
4 : S = 7’b0010011
;
5 : S = 7’b1011011
;
6 : S = 7’b0011111
;
7 : S = 7’b1110000
;
8 : S = 7’b1111111
;
9 : S = 7’b1110011
;
default : S = 7’b0
; // tout éteindre
endcase
assign {A, B, C, D, E, F, G}
= S ; // pour des anodes communes
endmodule
Dans le cas de cathodes communes, il suffit
de changer la ligne d'assignation en:
assign {A, B, C, D, E, F, G} =~S ; // pour des cathodes communes