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;
将不断变化的整型变量转换为字符串(显示在 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;