В некотором коде тестового стенда я использую процедуру, чтобы что-то сделать с сигналом. Затем я последовательно использую эту процедуру несколько раз для разных сигналов. Это работает нормально, пока я явно определяю сигнал; как только я индексирую сигналы в цикле, он терпит неудачу с
(vcom-1450) Фактическое (индексированное имя) для формального "s" не является статическим именем сигнала.
Почему это невозможно и как я могу обойти это? Вероятно, я мог бы переместить это в for ... generate
, но тогда я хочу, чтобы do_something
вызывался в хорошо определенной последовательности.
library ieee;
use ieee.std_logic_1164.all;
entity test is
end test;
architecture tb of test is
signal foo : std_logic_vector(1 downto 0);
begin
dummy: process is
procedure do_something (
signal s : out std_logic
) is begin
s <= '1';
report "tic";
wait for 1 ns;
-- actually we would do something more interesting here
s <= '0';
report "toc";
end procedure;
begin
-- This works well, but requires manual loop-unrolling
do_something(foo(0));
do_something(foo(1));
-- This should do the same
for i in foo'range loop
-- This is the offending line:
do_something(foo(i));
end loop;
wait; -- for ever
end process dummy;
end architecture tb;
Я использую ModelSim 10.4 PE.