VHDL integer'image(some_int)导致“表达式不是常量”错误

时间:2016-03-06 02:39:45

标签: vhdl

将始终更改的整数变量转换为字符串(在VGA监视器上显示)的正确方法是什么?我有一系列if语句来处理填充(所以结果字符串总是一定的长度,但是一改变:

resulting_string <= integer'image(87465);

为:

resulting_string <= integer'image(some_int_var);

我得到“表达式不是常数”错误。将一个始终在变化的整数变量(可能是整数限制内的任何int)转换为字符串的正确方法是什么?

编辑:不重复其他问题

2 个答案:

答案 0 :(得分:0)

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

我认为您仍然缺少主要问题:显示器无法显示字符串或字符!

你需要实施  1.图形缓冲区,  2.一个输出VGA数据的缓冲读取器。

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

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

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

将整数转换为&#39;字符串&#39;不需要ASCII字符串,因为结果是BCD代码(不是ASCII)。因此,您还需要实现(未)签名到BCD转换器。

答案 1 :(得分:0)

我从各个方向走了进去,终于发现我必须制作一个巨大的盒子才能让它发挥作用。现在我终于可以显示真正有助于调试的快速变化的变量。不幸的是,解决方案必须如此迟钝..

(我已经有一个用于显示结果字符串发送到的文本的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;