Pregunta

Tengo el siguiente código para contar hasta 59. Comienza bien pero después de 31, comienza a mostrar caracteres ASCII como '(', '$', '#' etc., en lugar de números. Cualquier idea de dónde ' ¿Me está yendo 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;
¿Fue útil?

Solución

Dado que no está imprimiendo nada, asumo que está viendo esto en un visor de forma de onda. Establezca el tipo mostrado en entero, puede tenerlo como ASCII como dijo AnthonyWJones.

Otros consejos

No tengo idea de qué es vhdl, sin embargo, parece más probable que lo que esté usando para observar la salida sea no que le muestre los caracteres ASCII anteriores a 32 porque estos serían caracteres de control , así que solo compromete y te muestra sus valores. Como 32 y más son caracteres imprimibles, cambia a usarlos porque eso es lo que la herramienta cree que son los valores.

Insertar señal adicional:

signal my_char: character;  

Luego haga la conversión de entero a carácter:

my_char <= character'val(countSVal);       

Verifique la señal my_char en el depurador o en el visor de forma de onda y verá caracteres ASCII. Lo he comprobado con Aldec Active-HDL 6.1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top