Ошибка синтеза VHDL
Я пытаюсь написать несколько простых математических функций в VHDL, но я получаю ошибку
found '0' definitions of operator "+", cannot determine exact overload matching definition for "+"
и я также получаю ту же ошибку о делении.
Вот соответствующий код:
signal delay_1 : integer range 0 to 127;
-- signal delay_2 : integer range 0 to 127;
-- signal delay_3 : integer range 0 to 127;
-- signal delay_4 : integer range 0 to 127;
signal us_clock : std_logic;
signal ds_squareroot : integer range 0 to 100;
signal ds_squared : integer range 0 to 5000;
if(i_reset = '1') then
delay_1 <= 0;
delay_2 <= 0;
delay_3 <= 0;
delay_4 <= 0;
ds_squared <= 0;
ds_squareroot <= 0;
elsif(rising_edge(i_clock)) then
-- Delay 1 calculations
ds_squared <= (i_distance*i_distance + (speaker_distance)*(speaker_distance));
for n in 0 to 20 loop
ds_squareroot <= ((50 + ds_squared/ds_squareroot)/2);
end loop;
delay_1 <= (ds_squareroot - i_distance)/ speed_sound;
И вот библиотеки, которые я звоню.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library UNISIM;
use UNISIM.VComponents.all;
Любой совет относительно того, почему это не компилируется, был бы очень полезен.
1 ответ
Решение
Ошибка была в том что i_distance
был std_logic_vector и speaker_distance
было целое число Очевидно, что это не синтезировать из-за разницы в типах здесь. Я решил это с помощью этого простого выражения
distance <= conv_integer(i_distance);
Это сделало оба целых числа, что позволило синтезировать дизайн. Спасибо за помощь.