Salida del país mostrando caracteres ASCII
-
03-07-2019 - |
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;
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.