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;
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top