Question

J'ai le code suivant pour compter jusqu'à 59. Cela commence bien, mais après 31, commence à afficher des caractères ASCII tels que '(', '$', '#' etc., au lieu de chiffres. Toute idée d'où je viens ' m va mal?

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;

entity counter is 
    port(clk: IN STD_LOGIC;
         secs:OUT INTEGER RANGE 0 to 59);
end counter;

architecture counter_behav of counter is
signal countSVal: INTEGER RANGE 0 to 59:=0;
begin

process(clk)
begin
if(rising_edge(clk)) then
    if(countSVal>=59) then
        countSVal <= 0;     
    else
        countSVal <= countSVal + 1;     
    end if;
    secs <= countSVal;
end if;
end process;
end counter_behav;
Était-ce utile?

La solution

Puisque vous n'imprimez rien, je suppose que vous regardez cela dans un visualiseur de forme d'onde. Définissez le type indiqué en entier, vous pouvez l'avoir en ASCII, comme l'a dit AnthonyWJones.

Autres conseils

Je n'ai aucune idée de ce qu'est vhdl, cependant, il semble fort probable que tout ce que vous utilisez pour observer la sortie affiche pas les caractères ASCII antérieurs à 32, car il s'agirait de caractères de contrôle. , donc ça ne fait que compromettre et vous montrer leurs valeurs. Étant donné que les caractères 32 et plus sont imprimables, il passe à ceux-ci car c’est ce que l’outil pense être les valeurs.

Insérer un signal supplémentaire:

signal my_char: character;  

Effectuez ensuite la conversion de nombre entier en caractère:

my_char <= character'val(countSVal);       

Vérifiez le signal my_char sous le débogueur ou dans l’afficheur de formes d’ondes et vous verrez les caractères ASCII. Je l'ai vérifié avec Aldec Active-HDL 6.1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top