Проблема
Я пишу функцию в пакете, которая преобразует некоторые значения для тестового стенда. Я хочу проверить, превышает ли выход максимальное значение, если это так, я хочу установить его на это максимальное значение. Что меня утомило, так это следующее:
-- vec_in: 0...1023, returns -14...23.5 dB
function conv_dac602_scale (
vec_in : std_logic_vector)
return real is
variable val_in, dB : real := 0.0;
constant lower : real := -14.0;
constant upper : real := 23.5;
begin -- function conv_dac602_scale
val_in := real(to_integer(unsigned(vec_in)));
dB := (lower+(val_in*((upper-lower)/1024.0)));
return dB when dB <= upper else upper; -- this is the important line! (129)
end function conv_dac602_scale;
Когда я пытаюсь скомпилировать это, я получаю следующие ошибки:
** Error: myfile.vhd(129): near "when": expecting ';'
** Error: myfile.vhd(260): VHDL Compiler exiting
Затем я попытался сначала присвоить его переменной r:
...
r := dB when dB <= upper else upper; -- this is the important line! (129)
return r;
end function conv_dac602_scale;
Что не изменило исход. Я знаю, что вместо этого я могу использовать простое предложение if/else
, но мой вопрос в том, почему я не могу использовать предложение when
.
Система
Modelsim SE 10.0b, VHDL 2008