Я думаю, вам понадобится такая установка (я заметил несколько опечаток).
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
Я добавлю здесь обязательное примечание, которое вы можете избежать использования std_logic_unsigned, и перейдите квместо этого используется numeric_std ... Двигаясь дальше ... Ничего интересного здесь:
entity top is
port (
clk : in std_logic;
x : in std_logic_vector(31 downto 0);
y : in std_logic_vector(31 downto 0)
);
end top;
В архитектуре мы объявляем процедуру.Я думаю, что у вас была опечатка.(х и у против а и б).
architecture top_arch of top is
procedure add_elements
(
x : in std_logic_vector(31 downto 0);
y : in std_logic_vector(31 downto 0);
r : out std_logic_vector(31 downto 0)
)
is
begin
r := x + y;
end;
begin
Теперь фактический процесс:
test: process (clk)
variable inp1 : std_logic_vector(31 downto 0);
variable inp2 : std_logic_vector(31 downto 0);
variable res : std_logic_vector(31 downto 0);
begin
inp1 := x;
inp2 := y;
add_elements(inp1, inp2, res);
end process;
end architecture top_arch;
И все.Я думаю, что вы действительно были близки, просто возможно пропустили библиотеку и / или имели некоторые опечатки.
Редактировать: Я должен также упомянуть, что вы могли бы (и, вероятно, должны) поместить процедуру вотдельный пакет, если вы хотели для целей повторного использования.Затем вам нужно будет включить пакет, используя операторы «use».