caracteres ASCII mostrando a saída do país
-
03-07-2019 - |
Pergunta
Eu tenho o seguinte código para contar até 59. Ele começa bem, mas depois de 31, começa a mostrar caracteres ASCII como '(', '$', '#' etc., em vez de números. Qualquer idéia de onde eu' m errado indo?
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;
Solução
Desde que você não está imprimindo nada, eu suponho que você está olhando para isso em um visualizador de forma de onda. Defina o tipo mostrado inteiro, você pode tê-lo como ASCII como AnthonyWJones disse.
Outras dicas
Eu não tenho nenhuma idéia do que VHDL é, no entanto, parece mais provável que o que quer que você está usando para observar a saída é não mostrando caracteres ASCII antes de 32 porque aqueles seriam os caracteres de controle , por isso só compromete e mostra-lhe os seus valores. Desde 32 e mais são caracteres imprimíveis ele muda para usar aqueles porque isso é o que a ferramenta acha que os valores são.
Inserir sinal adicional:
signal my_char: character;
Em seguida, fazer a conversão de inteiro para caractere:
my_char <= character'val(countSVal);
Verifique my_char sinal sob depurador ou no visualizador de forma de onda e você verá caracteres ASCII. Eu verifiquei com Aldec Active-HDL 6.1.