我有以下代码可以计算到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;
答案 0 :(得分:2)
由于您没有打印任何内容,我假设您在波形查看器中查看此内容。将显示的类型设置为整数,您可以将其设置为ASCII,如AnthonyWJones所说。
答案 1 :(得分:1)
我不知道vhdl是什么,但是,似乎很可能你用来观察输出的是不显示32之前的ASCII字符,因为那些是控制字符,所以它只是妥协并向你展示他们的价值观。由于32岁及以上是可打印的字符,因此它会切换到使用这些字符,因为这就是工具认为的值。
答案 2 :(得分:1)
插入附加信号:
signal my_char: character;
然后进行从整数到字符的转换:
my_char <= character'val(countSVal);
在调试器或波形查看器中检查my_char信号,您将看到ASCII字符。我用Aldec Active-HDL 6.1检查了它。