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

问题描述:

将始终变化的整数变量转换为字符串(要在VGA监视器上显示)的正确方法是什么?我有一系列的如果需要填充的护理陈述(这样生成的字符串总是有一定的长度,但只要我改变:VHDL integer'image(some_int)导致“表达式不是常量”错误

resulting_string <= integer'image(87465); 

到:

resulting_string <= integer'image(some_int_var); 

我得到一个“表达是不是一个常量”错误什么是一个不断变化整数变量(即可能是整数范围内的任何INT)转换为一个字符串的正确方法

编辑:?不复制其他问题

+1

的可能的复制[整数转字符串出错在合成(宽度不匹配)](http://*.com/questions/20667051/integer-to-string-goes-wrong-in-synthesis-width-mismatch) – mfro

+0

不,他有一个宽度不匹配问题,其中我已经解决了。我的问题更加先进,更难以解决。 – John

+0

请发布'results_string'的声明。 –

我从四面八方走过去,终于发现我必须做一个巨大的箱子才能使它工作。现在,我可以最终显示快速变化的变量,这对调试非常有帮助。这是不幸的是,解决方案必须如此迟钝,但..

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

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

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

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

然后,你需要实现一个机械臂

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

字形存储在一个ROM中,并通过每个数字的BCD值进行选择。

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

+0

我其实已经能够得到它的工作,但我必须全力推迟并制作一个巨大的盒子,以便每个整数都由一个特定的字符串表示。即:当254 =>结果:=“254”时case int_input是.... ...我已经有一个ROM用于在屏幕上绘制文本。 – John

+0

你只需要每个数字不是每个数字的ROM条目。 – Paebbels

+0

我已经有了。这是另外一个问题。 – John