VHDL integer'image(some_int) 导致 "Expression is not constant" 错误

VHDL integer'image(some_int) results in "Expression is not constant" error

将不断变化的整型变量转换为字符串(显示在 VGA 显示器上)的正确方法是什么?我有一系列 if 语句来处理填充(这样得到的字符串总是一定的长度但是一旦我改变:

resulting_string <= integer'image(87465);

至:

resulting_string <= integer'image(some_int_var);

我收到 "Expression is not constant" 错误。将始终变化的整数变量(可以是整数范围内的任何整数)转换为字符串的正确方法是什么?

编辑:与另一个问题不重复

'image (..) 不适用于信号。

我认为您仍然遗漏了主要问题:监视器无法显示字符串或字符!

您需要实施 1.图形缓冲区, 2. 输出VGA数据的缓冲区reader。

然后你需要实现一个操纵器来

  • 绘制形状
  • 清除屏幕
  • 移动区域并
  • 复制图片到缓冲区。

字形存储在 ROM 中,并由每个数字的 BCD 值选择。

将整数转换为 'string' 不需要 ASCII 字符串,因为结果是 BCD 码(不是 ASCII)。所以你也需要实现一个(未)符号到 BCD 转换器。

我从各个方面进行了研究,最后发现我必须制作一个巨大的箱子块才能让它工作。现在我终于可以显示快速变化的变量,这对调试非常有帮助。不幸的是,解决方案必须如此迟钝..

(我已经有一个 ROM 用于显示结果字符串发送到的文本。)

function int_to_str(int : integer) return string is
    variable a : natural := 0;
    variable r : string(1 to 11);

begin
    a := abs (int);

    case a is
        when 0    => r := "0          ";
        when 1    => r := "1          ";
        when 2    => r := "2          ";
        when 3    => r := "3          ";
        .
        .
        .
        when 1000 => r := "1000       ";

        when others => r := "???????????";
    end case;

    if (int < 0) then
        r := '-' & r(1 to 10);
    end if;

    return r;
end int_to_str;