1

我有以下代码可以计算到 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;
4

3 回答 3

2

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

于 2009-03-06T16:57:24.097 回答
1

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

于 2009-03-01T20:10:16.983 回答
1

插入附加信号:

signal my_char: character;  

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

my_char <= character'val(countSVal);       

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

于 2009-06-21T14:42:39.693 回答