Due to a problem in the Intel® Quartus® Prime Pro Edition Software version 20.4 and earlier, you might see this fatal error message in the synthesis stage when you have a VHDL recursive function calls with an intermediate values set to a constant or to the initial value of a variable declared in the function.
Code Example:
function function_2
(
constant RECURSION_DEPTH : natural)
return natural is
constant retval :natural := -- constant or initialized variable, same result
function_1(
RECURSION_DEPTH => RECURSION_DEPTH);
begin
return retval;
end function_2;
To work around this problem, instead of assigning the value to a constant, assign it to a variable, with the assignment done in the body of the function.
Note that the assignment of the value to the variable must be done in the body of the function, it must not be done as an initial value assignment in the declarative part of the function, as the latter results in the same crash as setting a constant.
Example:
function function_2
(
constant RECURSION_DEPTH : natural)
return natural is
variable retval : natural;
begin
retval := function_1(
RECURSION_DEPTH => RECURSION_DEPTH);
return retval;
end function_2;
This problem is fixed starting with the Intel® Quartus® Prime Pro Edition Software version 21.3.