Выходные данные счетчика, показывающие символы ASCII
-
03-07-2019 - |
Вопрос
У меня есть следующий код для счета до 59.Он начинается нормально, но после 31 начинает показывать символы ASCII, такие как '(', '$', '#' и т.д., Вместо цифр.Есть какие-нибудь идеи, где я ошибаюсь?
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;
Решение
Поскольку вы ничего не печатаете, я предполагаю, что вы смотрите на это в программе просмотра сигналов.Установите показанный тип в integer, у вас может быть он в формате ASCII, как сказал AnthonyWJones.
Другие советы
Я понятия не имею, что такое vhdl, однако, наиболее вероятно, что то, что вы используете для наблюдения за выводом, является нет показывает вам символы ASCII до 32, потому что это были бы управляющие символы, поэтому это просто компрометирует и показывает вам их значения.Поскольку 32 и более символов доступны для печати, он переключается на их использование, потому что инструмент считает, что это значения.
Вставить дополнительный сигнал:
signal my_char: character;
Затем выполните преобразование из целого числа в символьное:
my_char <= character'val(countSVal);
Проверьте сигнал my_char в debugger или в waveform viewer, и вы увидите символы ASCII.Я проверил это с помощью Aldec Active-HDL 6.1.