【问题标题】:VHDL integer'image(some_int) results in "Expression is not constant" errorVHDL integer'image(some_int) 导致“Expression is not constant”错误
【发布时间】:2016-06-19 17:57:41
【问题描述】:

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

resulting_string <= integer'image(87465);

到:

resulting_string <= integer'image(some_int_var);

我收到“表达式不是常数”错误。将始终变化的整数变量(可以是整数范围内的任何 int)转换为字符串的正确方法是什么?

编辑:不重复其他问题

【问题讨论】:

标签: vhdl


【解决方案1】:

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

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

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

那么你需要实现一个操纵器来

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

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

将整数转换为“字符串”不需要 ASCII 字符串,因为结果是 BCD 码(不是 ASCII)。所以你也需要实现一个(未)签名的 BCD 转换器。

【讨论】:

  • 我实际上能够让它工作,但我必须全力以赴并制作一个巨大的案例块,以便每个整数都由一个特定的字符串表示。即:case int_input 是 .... when 254 => result := "254"; ...我已经有一个用来在屏幕上绘制文本的 rom。
  • 您只需要每个数字而不是每个数字的 ROM 条目。
  • 我已经有了。这是除此之外的另一个问题。
【解决方案2】:

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

(我已经有一个 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2021-06-30
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多