Выходные данные счетчика, показывающие символы ASCII

StackOverflow https://stackoverflow.com/questions/600399

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top