Я пытаюсь упаковать простой код в функцию. Вот код VHDL:
process(CLK, RST)
variable newdata : std_logic_vector(7 downto 0) := (others => '0');
variable tempdata : std_logic_vector(7 downto 0) := (others => '0');
begin
if (RST = '1') then
tempdata := (others => '0');
newdata := (others => '0');
elsif rising_edge(CLK) then
tempdata := DIN;
newdata := newdata XOR tempdata;
end if;
DOUT <= newdata;
end process;
Моделирование кода
Модель RTL
Все работает отлично, как я хотел,Но если попытаться реализовать этот код как функцию, он потерпит неудачу
function f_MOD2ALG (foo : std_logic_vector)
return std_logic_vector;
...
function f_MOD2ALG (foo : std_logic_vector)
return std_logic_vector is
variable tempdata : std_logic_vector(foo'range);
variable newdata : std_logic_vector(foo'range);
begin
tempdata := foo;
newdata := newdata xor tempdata;
return newdata;
end function;
Fail моделирование
Fail RTL модель
Нет ошибок, нет предупреждений.
На модели RTL выглядит так, будто он просто вводит данные, но я не понимаю, почему. Может кто-нибудь объяснить мне, почему это произошло? И как правильно создать функцию, которая реализует мой код? Спасибо!
Вот вызов функции:
...
signal temp : std_logic_vector(7 downto 0) := (others => '0');
begin
process(CLK, RST)
begin
if (RST = '1') then
temp <= (others => '0');
elsif rising_edge(CLK) then
temp <= f_MOD2ALG(DIN);
end if;
end process;
DOUT <= temp;
...