У меня есть следующая функция, которая возвращает значение переменной, когда она может быть представлена с длиной, заданной в качестве параметра. Если значение выходит за пределы, оно должно возвращать максимально возможное значение или максимальное отрицательное значение в зависимости от знака значения.
function truncate (
value : in signed;
length : in integer)
return signed is
constant max_positive_value : signed(length-1 downto 0) := ((length-1) => '0', others => '1');
constant max_negative_value : signed(length-1 downto 0) := ((length-1) => '1', others => '0');
variable return_value : signed(length-1 downto 0) := (others => '0');
begin
if (value >= max_positive_value) then
return_value := max_positive_value;
elsif (value <= max_negative_value) then
return_value := max_negative_value;
else
return_value := resize(value, length);
end if;
return return_value;
end;
Проблема заключается в инициализации max_positive_value
и max_negative_value
. GHDL жалуется на not static choice exclude others choice
.
Как я могу инициализировать предельные значения, если длина является переменной?
Я использую VHDL 93.