Ошибка LRM или Ошибка инструмента? - PullRequest
2 голосов
/ 28 марта 2019

У меня есть следующий код:

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;

1 Ответ

1 голос
/ 05 апреля 2019

Определенно тело пакета IEEE std_logic_1164 не определено Aldec, но все еще распространяется IEEE.Пожалуйста, просто отключите ускорение для этого пакета в других симуляторах, чтобы получить те же результаты, что и Aldec.

...