это, вероятно, из-за меня, что я новичок. В любом случае, я хочу определить некоторые переменные для использования в нескольких функциях (например, глобальных переменных в C). Я решил пойти с общими переменными, но это дает мне ошибку Cannot reference shared variable "x" inside pure function "y"
. Если я определяю переменную в процессе, тогда она инициализирует (стирает значение) каждую активацию процесса.Использование переменной в нескольких функциях?
Architecture SV_example of example is
shared variable temp:std_logic_vector(18 downto 0):= "0000000000000000000";
SIGNAL gct: STD_LOGIC_VECTOR(18 DOWNTO 0);
function register_adder(load_value:std_logic) return std_logic_vector is
begin
for i in size downto 0 loop
temp(i) := load_value;
end loop;
return temp;
end register_adder;
p1 : process (CLK)
begin
if rising_edge(CLK) then
gct <= register_loader('1');
end if;
end process;
end SV_example;
Я поставил ответ на вопрос, как избавиться от ошибки. Но я не уверен в вашей цели. В приведенном выше примере не требуется 'temp', так как вы используете возвращаемое значение из функции. Отправьте более полный пример, и мы сможем лучше проанализировать ваш вариант использования. – PlayDough
Вы правы. Пример выше не ясен, чтобы указать мое требование. Мне просто нужна глобальная переменная, доступная для каждой функции в архитектуре. – ismylhakkituran
Что вам нужно для переменной архитектуры, в отличие от «сигнала»? Что вы пытаетесь выполнить, обмениваясь информацией с помощью «общей переменной». Если вам нужна какая-то информация о состоянии, я предлагаю посмотреть типы 'protected' в VHDL-2002 и более поздних версиях. – PlayDough