Приветствую. При написании кода возникли проблемы (в некоторых моментах пользовался нейросетью). VHDL подписывает красным следующие строки.
Общий код:
library ieee;
entity distribution_estimator is
generic (
N : integer := 1024; -- размер буфера
K : integer := 256; -- число ядерных функций
M : integer := 16; -- разрядность порта F
L : integer := 8 -- разрядность порта addr
);
port (
clk : in std_logic; -- тактирующий сигнал
reset : in std_logic; -- сигнал сброса
start : in std_logic; -- сигнал запуска расчета
F : in std_logic_vector(15 downto 0); -- порт для входных данных
F_rdy : out std_logic; -- сигнал готовности данных на порте F
addr : out std_logic_vector(L-1 downto 0) -- порт для отслеживания текущего номера отсчета функции распределения на выходе модуля
);
end entity distribution_estimator;
architecture rtl of distribution_estimator is
type buffer_t is array(0 to N-1) of signed(15 downto 0);
signal buf : buffer_t:= (others => (others => '0'));
signal kernel : std_logic_vector(K-1 downto 0);
signal pdf : std_logic_vector(K-1 downto 0);
signal cdf : std_logic_vector(K-1 downto 0);
signal sum : signed(31 downto 0);
signal count : unsigned(L-1 downto 0) := (others => '0');
begin
-- Генерация ядерных функций
process (reset)
begin
if reset = '1' then
kernel <= (others => (others => '0'));
else
for i in 0 to K-1 loop
kernel(i) <= std_logic_vector(to_signed(i-K/2, 8));
end loop;
end if;
end process;
-- Расчет оценки плотности распределения и функции распределения
process (clk)
variable pdf_i, cdf_i : signed(31 downto 0);
begin
if rising_edge(clk) then
if start = '1' then
-- Чтение новых отсчетов сигнала в буфер
buf <= buf(N-1 downto 1) & signed(resize(unsigned(F), 16));
count <= count + 1;
addr <= std_logic_vector(count);
-- Расчет функции распределения
sum <= (others => '0');
for i in 0 to K-1 loop
sum <= sum + signed(kernel(i));
cdf_i := sum / to_signed(N, 32);
cdf(i) <= std_logic_vector(cdf_i(31 downto 0));
end loop;
F_rdy <= '1';
else
F_rdy <= '0';
end if;
end if;
end process;
end architecture rtl;
Строки
kernel <= (others => (others => '0'));
kernel(i) <= std_logic_vector(to_signed(i-K/2, 8));
sum <= sum + signed(kernel(i));
и
cdf(i) <= std_logic_vector(cdf_i(31 downto 0));
выделяет красным.
Сам в VHDL новичек. Буду благодарен за помощь