En fait c'est bon, j'ai trouvé ^^
C'est mon "multiplexeur" qui n'allait pas à la fin. Je modifiais plusieurs fois S, donc le programme plantait. Pour ceux que ça intéresse, il suffi de faire une nouvelle variable de 4 bits, à laquelle on attribue à tour de rôle Unit, Diz et Cent et pour le multiplexeur :
with T select
S <= "1111110" when "0000",
"0110000" when "0001",
"1101101" when "0010",
"1111001" when "0011",
"0110011" when "0100",
"1011011" when "0101",
"0011111" when "0110",
"1110000" when "0111",
"1111111" when "1000",
"1110011" when "1001",
"1001111" when others;
Voili, voulou !
a bientôt