我有以下代码可以计算到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;
有帮助吗?

解决方案

由于您没有打印任何内容,我假设您在波形查看器中查看此内容。将显示的类型设置为整数,您可以将其设置为ASCII,如AnthonyWJones所说。

其他提示

我不知道vhdl是什么,但是,似乎很有可能你用来观察输出的是显示32之前的ASCII字符,因为那些是控制字符,所以它只是妥协并向你展示他们的价值观。由于32岁及以上是可打印的字符,因此它会切换到使用这些字符,因为这就是工具认为的值。

插入附加信号:

signal my_char: character;  

然后进行从整数到字符的转换:

my_char <= character'val(countSVal);       

在调试器或波形查看器中检查my_char信号,您将看到ASCII字符。我用Aldec Active-HDL 6.1检查了它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top