Я использую Quartus Prime Pro.
Я имею дело с функцией как таковой:
library ieee ;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
function round_resize (a : unsigned; b : integer) return unsigned is
variable c : signed (a'length - 1 downto 0); --problem child
variable d : signed (b - 1 downto 0);
begin
c := a + to_signed(2**(b-2), a'length);
d := to_unsigned(c(c'length-2 downto (c'length-b-1)));
return d;
end function;
Но я получаю сообщение об ошибке:
Ошибка (13643): ошибка VHDL в файле.vhd (109): не удается определить определение оператора «+» — найдено 0 возможных определений
Поэтому я изменил проблемного ребенка на это:
c := to_unsigned( a + to_signed(2**(b-2), a'length), a'length);
Но я получаю следующую ошибку:
Ошибка (13815): ошибка квалифицированного выражения VHDL в cpmmod.vhd (110): тип to_unsigned, указанный в квалифицированном выражении, должен соответствовать подписанному типу, подразумеваемому для выражения по контексту.
Что еще я могу попробовать сделать эту работу?