У меня есть следующий код:
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;