Ошибка синтеза 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);

Это сделало оба целых числа, что позволило синтезировать дизайн. Спасибо за помощь.

Другие вопросы по тегам