
Dans un premier temps j'ai cherché bloc tout-fait mais la bibliothèque max-plus d'Altera n'offre que des convertisseurs acceptant des binaires sur 5 bit (par exemple le 74185).
L'idéal était donc de le créer mon propre bloc et l'ajouter dans le design. En BCD les 4 bits de poids faible codent les unitées etque les 4 bits de poids fort codent les unités. L'algorithme à suivre pour réaliser la conversion est donc assez simple :
- convertir le nombre binaire entrant en entier,
- faire la division euclidienne par 10,
- convertir le reste et le résultat en binaire sur 4 bits,
- sortir le résultat d'un coté et le reste de l'autre.
En fait pour simplifier le code VHDL du bloc, on va réaliser une table de comparaison à l'aide d'une structure du type "case" :
case (nb_binaire) is
when "00000000"=>
nb_BCD1 <= "0000"; nb_BCD2 <= "0000"; when "00000001"=>
nb_BCD1 <= "0001"; nb_BCD2 <= "0000";
.....
Le code est très répétitif il peut donc être généré en partie par Matlab à l'aide du script suivant :
FileID = fopen('transcodeur.vhdl','w');
x=0;
for i=0:100
resultat=floor(x./10);
reste=mod(x,10);
fprintf(FileID, 'when "%s"=> \n\t nb_BCD1 <= "%s"; \n',dec2bin(x,8), dec2bin(reste,4));
fprintf(FileID, '\t nb_BCD2 <= "%s"; \n\n',dec2bin(resultat,4));
x=x+1;
end
fclose(FileID);

Une fois le code généré on crée un nouveau bloc (.bsf) dans Quartus et on l'ajoute au design existant (ici le bloc transcodeur.vhdl est ajouté dans le bloc dédié à l'affichage).