首页 > 解决方案 > 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;

标签: vhdl

解决方案


绝对 IEEE std_logic_1164 包体不是由 Aldec 定义的,但仍然由 IEEE 分发。请在其他模拟器中关闭此软件包的加速以获得与 Aldec 相同的结果。


推荐阅读