vhdl - LRM 错误还是工具错误?
问题描述
我有以下代码:
library ieee;
use ieee.std_logic_1164.all;
use std.textio.all;
entity read_fail is
end entity read_fail;
architecture test of read_fail is
begin
process
variable l : line;
constant s : string(2 to 5) := "1111";
variable a : std_logic_vector( 3 downto 0);
begin
l := new string'(s);
read(l, a);
DEALLOCATE(l);
report "done read";
wait;
end process;
end architecture;
在 ActiveHDL 中运行时,出现以下错误:
RUNTIME: Fatal Error: RUNTIME_0047 std_logic_1164-body.vhdl (1114): Index 1 out of range (2 to 5)
现在,我明白为什么会这样了,但我不确定这是否是 LRM 故障,或者 Aldec 是否有自己的实现?LRM 中没有任何内容(我可以找到)指定该行必须从索引 1 开始。
如果我将 a 更改为 bit_vector,则没有问题(因为我假设字符串在读取过程中具有别名,或者使用了 'range)。
如果存在 LRM/库问题,最好在 VHDL 2018/19 中修复它。
编辑
所以这似乎是一个 Aldec 问题,解决方法是重新编号返回的切片:
procedure renumber (l : inout line) is
variable tmp : line;
begin
tmp := new string(1 to l'length);
tmp.all := l.all;
DEALLOCATE(l);
l := tmp;
end procedure;
解决方案
绝对 IEEE std_logic_1164 包体不是由 Aldec 定义的,但仍然由 IEEE 分发。请在其他模拟器中关闭此软件包的加速以获得与 Aldec 相同的结果。
推荐阅读
- assembly - 调试 .dmp 文件时如何使用程序集查找结构的值?
- sql - 操作数数据类型数字对于“~”运算符无效
- python - 需要将元组转换为pyaudio的字节
- sql - 在 SQL 中有没有办法在连接上使用 select *?
- firebase - 错误:3 INVALID_ARGUMENT:无法将数组值转换为数组值
- javascript - 在 Google Maps 元素上添加背景叠加效果
- c# - 类似于 Unity 的 Transform 组件的 C# 库
- tensorflow2.0 - 如何将我的数据集转换为 Tensorflow.keras.model.fit()
- sql - [Postgres/SQL 查询]按 date_trunc 分组时如何获取最后一行条目?
- c# - CSR 使用 SHA-256withECDSA 的签名无效